xref: /plugin/tagging/syntax.php (revision fc7056c454bec7cd85c8c385ec81bacf17b192b5)
1*fc7056c4SAdrian Lang<?php
2*fc7056c4SAdrian Lang/**
3*fc7056c4SAdrian Lang * DokuWiki Plugin tagging (Syntax Component)
4*fc7056c4SAdrian Lang *
5*fc7056c4SAdrian Lang * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6*fc7056c4SAdrian Lang * @author  Adrian Lang <lang@cosmocode.de>
7*fc7056c4SAdrian Lang */
8*fc7056c4SAdrian Lang
9*fc7056c4SAdrian Lang// must be run within Dokuwiki
10*fc7056c4SAdrian Langif (!defined('DOKU_INC')) die();
11*fc7056c4SAdrian Lang
12*fc7056c4SAdrian Langif (!defined('DOKU_LF')) define('DOKU_LF', "\n");
13*fc7056c4SAdrian Langif (!defined('DOKU_TAB')) define('DOKU_TAB', "\t");
14*fc7056c4SAdrian Langif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
15*fc7056c4SAdrian Lang
16*fc7056c4SAdrian Langrequire_once DOKU_PLUGIN.'syntax.php';
17*fc7056c4SAdrian Langrequire_once DOKU_PLUGIN.'tagging/common.php';
18*fc7056c4SAdrian Lang
19*fc7056c4SAdrian Langclass syntax_plugin_tagging extends DokuWiki_Syntax_Plugin {
20*fc7056c4SAdrian Lang
21*fc7056c4SAdrian Lang    function getType() {
22*fc7056c4SAdrian Lang        return 'substition';
23*fc7056c4SAdrian Lang    }
24*fc7056c4SAdrian Lang
25*fc7056c4SAdrian Lang    function getPType() {
26*fc7056c4SAdrian Lang        return 'block';
27*fc7056c4SAdrian Lang    }
28*fc7056c4SAdrian Lang
29*fc7056c4SAdrian Lang    function getSort() {
30*fc7056c4SAdrian Lang        return 13;
31*fc7056c4SAdrian Lang    }
32*fc7056c4SAdrian Lang
33*fc7056c4SAdrian Lang    function connectTo($mode) {
34*fc7056c4SAdrian Lang        $this->Lexer->addSpecialPattern('{{tagging::\w+(?:>[^}]+)?}}',$mode,'plugin_tagging');
35*fc7056c4SAdrian Lang    }
36*fc7056c4SAdrian Lang
37*fc7056c4SAdrian Lang    function handle($match, $state, $pos, &$handler){
38*fc7056c4SAdrian Lang        $data = array();
39*fc7056c4SAdrian Lang        $matches = array();
40*fc7056c4SAdrian Lang        preg_match('/{{tagging::(\w+)(?:>([^}]+))?}}/', $match, $matches);
41*fc7056c4SAdrian Lang        $data['cmd'] = $matches[1];
42*fc7056c4SAdrian Lang
43*fc7056c4SAdrian Lang        switch($data['cmd']) {
44*fc7056c4SAdrian Lang        case 'user':
45*fc7056c4SAdrian Lang            if (count($matches) > 2) {
46*fc7056c4SAdrian Lang                $data['user'] = trim($matches[2]);
47*fc7056c4SAdrian Lang            }
48*fc7056c4SAdrian Lang            break;
49*fc7056c4SAdrian Lang        }
50*fc7056c4SAdrian Lang
51*fc7056c4SAdrian Lang        return $data;
52*fc7056c4SAdrian Lang    }
53*fc7056c4SAdrian Lang
54*fc7056c4SAdrian Lang    function render($mode, &$renderer, $data) {
55*fc7056c4SAdrian Lang        if ($mode !== 'xhtml') {
56*fc7056c4SAdrian Lang            return false;
57*fc7056c4SAdrian Lang        }
58*fc7056c4SAdrian Lang
59*fc7056c4SAdrian Lang        $pte = tagging_get_pte($this);
60*fc7056c4SAdrian Lang
61*fc7056c4SAdrian Lang        switch($data['cmd']) {
62*fc7056c4SAdrian Lang        case 'user':
63*fc7056c4SAdrian Lang            $renderer->info['cache'] = false;
64*fc7056c4SAdrian Lang            if (!isset($data['user'])) {
65*fc7056c4SAdrian Lang                $data['user'] = $_SERVER['REMOTE_USER'];
66*fc7056c4SAdrian Lang            }
67*fc7056c4SAdrian Lang            if (is_null($pte)) return;
68*fc7056c4SAdrian Lang            list($min, $max, $data_arr) = $pte->user_tagcloud($data['user'], 10);
69*fc7056c4SAdrian Lang
70*fc7056c4SAdrian Lang            cloud_weight($data_arr, $min, $max, 10);
71*fc7056c4SAdrian Lang
72*fc7056c4SAdrian Lang            $renderer->doc .= '<ul class="tagcloud" id="tagging_tagcloud">';
73*fc7056c4SAdrian Lang            if (count($data_arr) === 0) {
74*fc7056c4SAdrian Lang                // Produce valid XHTML (ul needs a child)
75*fc7056c4SAdrian Lang                $this->setupLocale();
76*fc7056c4SAdrian Lang                $renderer->doc .=  '<li>' . $this->lang['js']['notags'] . '</li>';
77*fc7056c4SAdrian Lang            }
78*fc7056c4SAdrian Lang            foreach ($data_arr as $tag => $size) {
79*fc7056c4SAdrian Lang                $renderer->doc .=  '<li class="t' .
80*fc7056c4SAdrian Lang                     $size . '">' .
81*fc7056c4SAdrian Lang                     '<a href="' . $pte->tag_browse_url($tag) . '">' .
82*fc7056c4SAdrian Lang                     $tag . '</a>' . '</li> ';
83*fc7056c4SAdrian Lang            }
84*fc7056c4SAdrian Lang            $renderer->doc .= '</ul>';
85*fc7056c4SAdrian Lang
86*fc7056c4SAdrian Lang            break;
87*fc7056c4SAdrian Lang        }
88*fc7056c4SAdrian Lang
89*fc7056c4SAdrian Lang        return true;
90*fc7056c4SAdrian Lang    }
91*fc7056c4SAdrian Lang}
92*fc7056c4SAdrian Lang
93*fc7056c4SAdrian Lang// vim:ts=4:sw=4:et:enc=utf-8:
94