1fc7056c4SAdrian Lang<?php 2df43a7beSAndreas Gohr 3df43a7beSAndreas Gohruse dokuwiki\Extension\SyntaxPlugin; 4df43a7beSAndreas Gohr 5fc7056c4SAdrian Lang/** 6fc7056c4SAdrian Lang * DokuWiki Plugin tagging (Syntax Component) 7fc7056c4SAdrian Lang * 8fc7056c4SAdrian Lang * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 9fc7056c4SAdrian Lang * @author Adrian Lang <lang@cosmocode.de> 10fc7056c4SAdrian Lang */ 11df43a7beSAndreas Gohrclass syntax_plugin_tagging extends SyntaxPlugin 12df43a7beSAndreas Gohr{ 13df43a7beSAndreas Gohr public function getType() 14df43a7beSAndreas Gohr { 15fc7056c4SAdrian Lang return 'substition'; 16fc7056c4SAdrian Lang } 17fc7056c4SAdrian Lang 18df43a7beSAndreas Gohr public function getPType() 19df43a7beSAndreas Gohr { 20fc7056c4SAdrian Lang return 'block'; 21fc7056c4SAdrian Lang } 22fc7056c4SAdrian Lang 23df43a7beSAndreas Gohr public function getSort() 24df43a7beSAndreas Gohr { 25fc7056c4SAdrian Lang return 13; 26fc7056c4SAdrian Lang } 27fc7056c4SAdrian Lang 28df43a7beSAndreas Gohr public function connectTo($mode) 29df43a7beSAndreas Gohr { 30df43a7beSAndreas Gohr $this->Lexer->addSpecialPattern('{{tagging::\w+(?:>[^}\?]+)?(?:\?\d+)?}}', $mode, 'plugin_tagging'); 31fc7056c4SAdrian Lang } 32fc7056c4SAdrian Lang 33df43a7beSAndreas Gohr public function handle($match, $state, $pos, Doku_Handler $handler) 34df43a7beSAndreas Gohr { 35df43a7beSAndreas Gohr $data = []; 36df43a7beSAndreas Gohr $matches = []; 37df43a7beSAndreas Gohr preg_match('/{{tagging::(\w+)(?:>([^}\?]+))?(\?\d+)?}}/', $match, $matches); 38fc7056c4SAdrian Lang $data['cmd'] = $matches[1]; 394aeb1ac5SAndreas Gohr $data['limit'] = (int)ltrim($matches[3] ?? '', '?'); 400cfde7e9SMichael Große if (!$data['limit']) { 410cfde7e9SMichael Große $data['limit'] = $this->getConf('cloudlimit'); 420cfde7e9SMichael Große } 43fc7056c4SAdrian Lang 44fc7056c4SAdrian Lang switch ($data['cmd']) { 45fc7056c4SAdrian Lang case 'user': 46fc7056c4SAdrian Lang if (count($matches) > 2) { 47fc7056c4SAdrian Lang $data['user'] = trim($matches[2]); 48fc7056c4SAdrian Lang } 49fc7056c4SAdrian Lang break; 500b6fad27Ssandos187 case 'tag': 510b6fad27Ssandos187 if (count($matches) > 2) { 520b6fad27Ssandos187 $data['tag'] = trim($matches[2]); 530b6fad27Ssandos187 } 540b6fad27Ssandos187 break; 550797641fSAdrian Lang case 'ns': 560797641fSAdrian Lang if (count($matches) > 2) { 570797641fSAdrian Lang $data['ns'] = trim($matches[2]); 580797641fSAdrian Lang } 590797641fSAdrian Lang break; 604227fca4SAnna Dabrowska case 'manage': 614227fca4SAnna Dabrowska if (count($matches) > 2) { 624227fca4SAnna Dabrowska $data['manage'] = trim($matches[2]); 634227fca4SAnna Dabrowska } 644227fca4SAnna Dabrowska break; 65fc7056c4SAdrian Lang } 66fc7056c4SAdrian Lang 67fc7056c4SAdrian Lang return $data; 68fc7056c4SAdrian Lang } 69fc7056c4SAdrian Lang 70df43a7beSAndreas Gohr public function render($mode, Doku_Renderer $renderer, $data) 71df43a7beSAndreas Gohr { 72fc7056c4SAdrian Lang if ($mode !== 'xhtml') { 73fc7056c4SAdrian Lang return false; 74fc7056c4SAdrian Lang } 75fc7056c4SAdrian Lang 760a518a11SAndreas Gohr /** @var helper_plugin_tagging $hlp */ 77f61105deSAdrian Lang $hlp = plugin_load('helper', 'tagging'); 78fc7056c4SAdrian Lang 79fc7056c4SAdrian Lang switch ($data['cmd']) { 80fc7056c4SAdrian Lang case 'user': 81fc7056c4SAdrian Lang $renderer->info['cache'] = false; 82fc7056c4SAdrian Lang if (!isset($data['user'])) { 83fc7056c4SAdrian Lang $data['user'] = $_SERVER['REMOTE_USER']; 84fc7056c4SAdrian Lang } 85df43a7beSAndreas Gohr $tags = $hlp->findItems(['tagger' => $data['user']], 'tag', $data['limit']); 860b6fad27Ssandos187 87df43a7beSAndreas Gohr $renderer->doc .= $hlp->html_cloud($tags, 'tag', [$hlp, 'linkToSearch'], true, true); 88fc7056c4SAdrian Lang 89fc7056c4SAdrian Lang break; 900b6fad27Ssandos187 case 'tag': 910b6fad27Ssandos187 $renderer->info['cache'] = false; 920b6fad27Ssandos187 93df43a7beSAndreas Gohr $pids = $hlp->findItems(['tag' => $data['tag']], 'pid', $data['limit']); 940b6fad27Ssandos187 950b6fad27Ssandos187 $renderer->doc .= $hlp->html_page_list($pids); 960b6fad27Ssandos187 970b6fad27Ssandos187 break; 980797641fSAdrian Lang case 'ns': 990797641fSAdrian Lang $renderer->info['cache'] = false; 100*55d5df8cSAnna Dabrowska 101*55d5df8cSAnna Dabrowska $data['ns'] = $hlp->resolveNs($data); 102*55d5df8cSAnna Dabrowska 103a448a407SAnna Dabrowska $tags = $hlp->findItems(['pid' => $hlp->globNamespace($data['ns'])], 'tag', $data['limit']); 104df43a7beSAndreas Gohr $renderer->doc .= $hlp->html_cloud($tags, 'tag', [$hlp, 'linkToSearch'], true, true, $data['ns']); 1050797641fSAdrian Lang 1060797641fSAdrian Lang break; 107fbf38c5bSAndreas Gohr case 'input': 1083496cc8aSAndreas Gohr $renderer->nocache(); 1093496cc8aSAndreas Gohr $renderer->doc .= $hlp->tpl_tags(false); 110fbf38c5bSAndreas Gohr break; 1114227fca4SAnna Dabrowska case 'manage': 1124227fca4SAnna Dabrowska $renderer->nocache(); 1134227fca4SAnna Dabrowska $ns = $data['manage'] ?: ''; 1144227fca4SAnna Dabrowska $renderer->doc .= $hlp->manageTags($ns); 1154227fca4SAnna Dabrowska break; 116fc7056c4SAdrian Lang } 117fc7056c4SAdrian Lang 118fc7056c4SAdrian Lang return true; 119fc7056c4SAdrian Lang } 120fc7056c4SAdrian Lang} 121