xref: /plugin/tagging/syntax.php (revision 0797641fcb9238435a07b86fa77dc6fb2c6060d5)
1fc7056c4SAdrian Lang<?php
2fc7056c4SAdrian Lang/**
3fc7056c4SAdrian Lang * DokuWiki Plugin tagging (Syntax Component)
4fc7056c4SAdrian Lang *
5fc7056c4SAdrian Lang * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6fc7056c4SAdrian Lang * @author  Adrian Lang <lang@cosmocode.de>
7fc7056c4SAdrian Lang */
8fc7056c4SAdrian Lang
9fc7056c4SAdrian Lang// must be run within Dokuwiki
10fc7056c4SAdrian Langif (!defined('DOKU_INC')) die();
11fc7056c4SAdrian Lang
12fc7056c4SAdrian Langclass syntax_plugin_tagging extends DokuWiki_Syntax_Plugin {
13fc7056c4SAdrian Lang
14fc7056c4SAdrian Lang    function getType() {
15fc7056c4SAdrian Lang        return 'substition';
16fc7056c4SAdrian Lang    }
17fc7056c4SAdrian Lang
18fc7056c4SAdrian Lang    function getPType() {
19fc7056c4SAdrian Lang        return 'block';
20fc7056c4SAdrian Lang    }
21fc7056c4SAdrian Lang
22fc7056c4SAdrian Lang    function getSort() {
23fc7056c4SAdrian Lang        return 13;
24fc7056c4SAdrian Lang    }
25fc7056c4SAdrian Lang
26fc7056c4SAdrian Lang    function connectTo($mode) {
27fc7056c4SAdrian Lang        $this->Lexer->addSpecialPattern('{{tagging::\w+(?:>[^}]+)?}}',$mode,'plugin_tagging');
28fc7056c4SAdrian Lang    }
29fc7056c4SAdrian Lang
30fc7056c4SAdrian Lang    function handle($match, $state, $pos, &$handler){
31fc7056c4SAdrian Lang        $data = array();
32fc7056c4SAdrian Lang        $matches = array();
33fc7056c4SAdrian Lang        preg_match('/{{tagging::(\w+)(?:>([^}]+))?}}/', $match, $matches);
34fc7056c4SAdrian Lang        $data['cmd'] = $matches[1];
35fc7056c4SAdrian Lang
36fc7056c4SAdrian Lang        switch($data['cmd']) {
37fc7056c4SAdrian Lang        case 'user':
38fc7056c4SAdrian Lang            if (count($matches) > 2) {
39fc7056c4SAdrian Lang                $data['user'] = trim($matches[2]);
40fc7056c4SAdrian Lang            }
41fc7056c4SAdrian Lang            break;
42*0797641fSAdrian Lang        case 'ns':
43*0797641fSAdrian Lang            if (count($matches) > 2) {
44*0797641fSAdrian Lang                $data['ns'] = trim($matches[2]);
45*0797641fSAdrian Lang            }
46*0797641fSAdrian Lang            break;
47fc7056c4SAdrian Lang        }
48fc7056c4SAdrian Lang
49fc7056c4SAdrian Lang        return $data;
50fc7056c4SAdrian Lang    }
51fc7056c4SAdrian Lang
52fc7056c4SAdrian Lang    function render($mode, &$renderer, $data) {
53fc7056c4SAdrian Lang        if ($mode !== 'xhtml') {
54fc7056c4SAdrian Lang            return false;
55fc7056c4SAdrian Lang        }
56fc7056c4SAdrian Lang
57f61105deSAdrian Lang        $hlp = plugin_load('helper', 'tagging');
58fc7056c4SAdrian Lang
59fc7056c4SAdrian Lang        switch($data['cmd']) {
60fc7056c4SAdrian Lang        case 'user':
61fc7056c4SAdrian Lang            $renderer->info['cache'] = false;
62fc7056c4SAdrian Lang            if (!isset($data['user'])) {
63fc7056c4SAdrian Lang                $data['user'] = $_SERVER['REMOTE_USER'];
64fc7056c4SAdrian Lang            }
65f61105deSAdrian Lang            $tags = $hlp->getTags(array('tagger' => $data['user']), 'tag');
66f61105deSAdrian Lang            $renderer->doc .= $hlp->html_cloud($tags, 'tag', array($hlp, 'linkToSearch'), true, true);
67fc7056c4SAdrian Lang
68fc7056c4SAdrian Lang            break;
69*0797641fSAdrian Lang        case 'ns':
70*0797641fSAdrian Lang            $renderer->info['cache'] = false;
71*0797641fSAdrian Lang            if (!isset($data['ns'])) {
72*0797641fSAdrian Lang                global $INFO;
73*0797641fSAdrian Lang                $data['ns'] = $INFO['namespace'];
74*0797641fSAdrian Lang            }
75*0797641fSAdrian Lang            global $ID;
76*0797641fSAdrian Lang            $data['ns'] = resolve_id(getNS($ID), $data['ns'] . ':');
77*0797641fSAdrian Lang            if ($data['ns'] !== '') {
78*0797641fSAdrian Lang                // Do not match nsbla, only ns:bla
79*0797641fSAdrian Lang                $data['ns'] .= ':';
80*0797641fSAdrian Lang            }
81*0797641fSAdrian Lang            $data['ns'] .= '%';
82*0797641fSAdrian Lang            $tags = $hlp->getTags(array('pid' => $data['ns']), 'tag');
83*0797641fSAdrian Lang            $renderer->doc .= $hlp->html_cloud($tags, 'tag', array($hlp, 'linkToSearch'), true, true);
84*0797641fSAdrian Lang
85*0797641fSAdrian Lang            break;
86fc7056c4SAdrian Lang        }
87fc7056c4SAdrian Lang
88fc7056c4SAdrian Lang        return true;
89fc7056c4SAdrian Lang    }
90fc7056c4SAdrian Lang}
91fc7056c4SAdrian Lang
92fc7056c4SAdrian Lang// vim:ts=4:sw=4:et:enc=utf-8:
93