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; 420797641fSAdrian Lang case 'ns': 430797641fSAdrian Lang if (count($matches) > 2) { 440797641fSAdrian Lang $data['ns'] = trim($matches[2]); 450797641fSAdrian Lang } 460797641fSAdrian 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 570a518a11SAndreas Gohr /** @var helper_plugin_tagging $hlp */ 58f61105deSAdrian Lang $hlp = plugin_load('helper', 'tagging'); 59fc7056c4SAdrian Lang 60fc7056c4SAdrian Lang switch($data['cmd']) { 61fc7056c4SAdrian Lang case 'user': 62fc7056c4SAdrian Lang $renderer->info['cache'] = false; 63fc7056c4SAdrian Lang if(!isset($data['user'])) { 64fc7056c4SAdrian Lang $data['user'] = $_SERVER['REMOTE_USER']; 65fc7056c4SAdrian Lang } 66b12334e1SAndreas Gohr $tags = $hlp->findItems(array('tagger' => $data['user']), 'tag'); 67f61105deSAdrian Lang $renderer->doc .= $hlp->html_cloud($tags, 'tag', array($hlp, 'linkToSearch'), true, true); 68fc7056c4SAdrian Lang 69fc7056c4SAdrian Lang break; 700797641fSAdrian Lang case 'ns': 710797641fSAdrian Lang $renderer->info['cache'] = false; 720797641fSAdrian Lang if(!isset($data['ns'])) { 730797641fSAdrian Lang global $INFO; 740797641fSAdrian Lang $data['ns'] = $INFO['namespace']; 750797641fSAdrian Lang } 760797641fSAdrian Lang global $ID; 770797641fSAdrian Lang $data['ns'] = resolve_id(getNS($ID), $data['ns'] . ':'); 780797641fSAdrian Lang if($data['ns'] !== '') { 790797641fSAdrian Lang // Do not match nsbla, only ns:bla 800797641fSAdrian Lang $data['ns'] .= ':'; 810797641fSAdrian Lang } 82*5540f91dSAndreas Gohr $tags = $hlp->findItems(array('pid' => $data['ns'].'%'), 'tag'); 83*5540f91dSAndreas Gohr $renderer->doc .= $hlp->html_cloud($tags, 'tag', array($hlp, 'linkToSearch'), true, true, $data['ns']); 840797641fSAdrian Lang 850797641fSAdrian Lang break; 86fbf38c5bSAndreas Gohr case 'input': 87fbf38c5bSAndreas Gohr $hlp->tpl_tags(); 88fbf38c5bSAndreas Gohr 89fbf38c5bSAndreas Gohr break; 90fc7056c4SAdrian Lang } 91fc7056c4SAdrian Lang 92fc7056c4SAdrian Lang return true; 93fc7056c4SAdrian Lang } 94fc7056c4SAdrian Lang} 95fc7056c4SAdrian Lang 96fc7056c4SAdrian Lang// vim:ts=4:sw=4:et:enc=utf-8: 97