1872edc7cSRené Corinth<?php 2872edc7cSRené Corinth// must be run within Dokuwiki 30cfde7e9SMichael Großeif (!defined('DOKU_INC')) { 40cfde7e9SMichael Große die(); 50cfde7e9SMichael Große} 6872edc7cSRené Corinth 7872edc7cSRené Corinthclass admin_plugin_tagging extends DokuWiki_Admin_Plugin { 8872edc7cSRené Corinth 98a1a3846SAndreas Gohr /** @var helper_plugin_tagging */ 10872edc7cSRené Corinth private $hlp; 11872edc7cSRené Corinth 128a1a3846SAndreas Gohr public function __construct() { 13872edc7cSRené Corinth $this->hlp = plugin_load('helper', 'tagging'); 148a1a3846SAndreas Gohr } 15872edc7cSRené Corinth 168a1a3846SAndreas Gohr /** 178a1a3846SAndreas Gohr * We allow use by managers 188a1a3846SAndreas Gohr * 198a1a3846SAndreas Gohr * @return bool always false 208a1a3846SAndreas Gohr */ 218a1a3846SAndreas Gohr function forAdminOnly() { 228a1a3846SAndreas Gohr return false; 238a1a3846SAndreas Gohr } 248a1a3846SAndreas Gohr 258a1a3846SAndreas Gohr /** 2631396860SSzymon Olewniczak * Handle tag actions 278a1a3846SAndreas Gohr */ 288a1a3846SAndreas Gohr function handle() { 2931396860SSzymon Olewniczak global $ID, $INPUT; 3031396860SSzymon Olewniczak 3131396860SSzymon Olewniczak //by default use current page namespace 3231396860SSzymon Olewniczak if (!$INPUT->has('filter')) $INPUT->set('filter', getNS($ID)); 3331396860SSzymon Olewniczak 34*8e9d0162SSzymon Olewniczak //by default sort by tag name 35*8e9d0162SSzymon Olewniczak if (!$INPUT->has('sort')) $INPUT->set('sort', 'tid'); 36*8e9d0162SSzymon Olewniczak 3731396860SSzymon Olewniczak //now starts functions handle 3831396860SSzymon Olewniczak if (!$INPUT->has('fn')) return false; 3931396860SSzymon Olewniczak if (!checkSecurityToken()) return false; 4031396860SSzymon Olewniczak 4131396860SSzymon Olewniczak // extract the command and any specific parameters 4231396860SSzymon Olewniczak // submit button name is of the form - fn[cmd][param(s)] 4331396860SSzymon Olewniczak $fn = $INPUT->param('fn'); 4431396860SSzymon Olewniczak 4531396860SSzymon Olewniczak if (is_array($fn)) { 4631396860SSzymon Olewniczak $cmd = key($fn); 4731396860SSzymon Olewniczak $param = is_array($fn[$cmd]) ? key($fn[$cmd]) : null; 4831396860SSzymon Olewniczak } else { 4931396860SSzymon Olewniczak $cmd = $fn; 5031396860SSzymon Olewniczak $param = null; 5131396860SSzymon Olewniczak } 5231396860SSzymon Olewniczak 5331396860SSzymon Olewniczak switch ($cmd) { 54*8e9d0162SSzymon Olewniczak case 'rename': 55*8e9d0162SSzymon Olewniczak $this->hlp->renameTag($INPUT->str('old'), $INPUT->str('new')); 56*8e9d0162SSzymon Olewniczak break; 57*8e9d0162SSzymon Olewniczak case 'delete': 58*8e9d0162SSzymon Olewniczak $this->hlp->deleteTags(array_keys($INPUT->arr('tags')), $INPUT->str('filter')); 59*8e9d0162SSzymon Olewniczak break; 60*8e9d0162SSzymon Olewniczak case 'sort': 61*8e9d0162SSzymon Olewniczak $INPUT->set('sort', $param); 62*8e9d0162SSzymon Olewniczak break; 63*8e9d0162SSzymon Olewniczak 64872edc7cSRené Corinth } 65872edc7cSRené Corinth } 66872edc7cSRené Corinth 678a1a3846SAndreas Gohr /** 688a1a3846SAndreas Gohr * Draw the interface 698a1a3846SAndreas Gohr */ 70872edc7cSRené Corinth function html() { 718a1a3846SAndreas Gohr echo $this->locale_xhtml('intro'); 728a1a3846SAndreas Gohr $this->html_form(); 738a1a3846SAndreas Gohr echo '<br />'; 748a1a3846SAndreas Gohr $this->html_table(); 75872edc7cSRené Corinth } 76872edc7cSRené Corinth 778a1a3846SAndreas Gohr /** 788a1a3846SAndreas Gohr * Show form for renaming tags 798a1a3846SAndreas Gohr */ 808a1a3846SAndreas Gohr protected function html_form() { 810c867873SSzymon Olewniczak global $ID, $INPUT; 828a1a3846SAndreas Gohr 83f1059d49SSzymon Olewniczak $form = new dokuwiki\Form\Form(); 84f1059d49SSzymon Olewniczak $form->addClass('plugin_tagging'); 858a1a3846SAndreas Gohr 86f1059d49SSzymon Olewniczak $form->setHiddenField('do', 'admin'); 87f1059d49SSzymon Olewniczak $form->setHiddenField('page', 'tagging'); 88f1059d49SSzymon Olewniczak $form->setHiddenField('id', $ID); 89f1059d49SSzymon Olewniczak $form->setHiddenField('filter', $INPUT->str('filter')); 90*8e9d0162SSzymon Olewniczak $form->setHiddenField('sort', $INPUT->str('sort')); 918a1a3846SAndreas Gohr 92f1059d49SSzymon Olewniczak $form->addFieldsetOpen($this->getLang('admin rename tag')); 93f1059d49SSzymon Olewniczak $form->addTextInput('old', $this->getLang('admin find tag'))->addClass('block'); 94f1059d49SSzymon Olewniczak $form->addTagClose('br'); 95f1059d49SSzymon Olewniczak $form->addTextInput('new', $this->getLang('admin new name'))->addClass('block'); 96f1059d49SSzymon Olewniczak $form->addTagClose('br'); 97f1059d49SSzymon Olewniczak $form->addButton('fn[rename]', $this->getLang('admin save')); 98f1059d49SSzymon Olewniczak $form->addFieldsetClose(); 99f1059d49SSzymon Olewniczak 100f1059d49SSzymon Olewniczak echo $form->toHTML(); 1018a1a3846SAndreas Gohr } 1028a1a3846SAndreas Gohr 1038a1a3846SAndreas Gohr /** 1048a1a3846SAndreas Gohr * Display ALL the tags! 1058a1a3846SAndreas Gohr */ 1068a1a3846SAndreas Gohr protected function html_table() { 107a99b66c1SSzymon Olewniczak global $ID, $INPUT; 1088f630140SSzymon Olewniczak 1090c867873SSzymon Olewniczak $headers = array( 110cb469644SSzymon Olewniczak array('value' => ' ', 'sort_by' => false), 111cb469644SSzymon Olewniczak array('value' => $this->getLang('admin tag'), 'sort_by' => 'tid'), 112cb469644SSzymon Olewniczak array('value' => $this->getLang('admin occurrence'), 'sort_by' => 'count'), 113cb469644SSzymon Olewniczak array('value' => $this->getLang('admin writtenas'), 'sort_by' => 'orig'), 114cb469644SSzymon Olewniczak array('value' => $this->getLang('admin taggers'), 'sort_by' => 'taggers') 1150c867873SSzymon Olewniczak ); 116*8e9d0162SSzymon Olewniczak 117*8e9d0162SSzymon Olewniczak $sort = explode(',', $INPUT->str('sort')); 118*8e9d0162SSzymon Olewniczak $order_by = $sort[0]; 119*8e9d0162SSzymon Olewniczak $desc = false; 120*8e9d0162SSzymon Olewniczak if (isset($sort[1]) && $sort[1] === 'desc') { 121*8e9d0162SSzymon Olewniczak $desc = true; 122*8e9d0162SSzymon Olewniczak } 123*8e9d0162SSzymon Olewniczak $tags = $this->hlp->getAllTags($INPUT->str('filter'), $order_by, $desc); 124a99b66c1SSzymon Olewniczak 1250c867873SSzymon Olewniczak $form = new dokuwiki\Form\Form(); 1260c867873SSzymon Olewniczak $form->setHiddenField('do', 'admin'); 1270c867873SSzymon Olewniczak $form->setHiddenField('page', 'tagging'); 1280c867873SSzymon Olewniczak $form->setHiddenField('id', $ID); 129*8e9d0162SSzymon Olewniczak $form->setHiddenField('sort', $INPUT->str('sort')); 1300c867873SSzymon Olewniczak 1310c867873SSzymon Olewniczak $form->addTagOpen('table')->addClass('inline plugin_tagging'); 1320c867873SSzymon Olewniczak $form->addTagOpen('tr'); 1330c867873SSzymon Olewniczak $form->addTagOpen('th')->attr('colspan', count($headers)); 1340c867873SSzymon Olewniczak 135a99b66c1SSzymon Olewniczak /** 136a99b66c1SSzymon Olewniczak * Show form for filtering the tags by namespaces 137a99b66c1SSzymon Olewniczak */ 1380c867873SSzymon Olewniczak $form->addTextInput('filter', $this->getLang('admin filter').': '); 1390c867873SSzymon Olewniczak $form->addButton('fn[filter]', $this->getLang('admin filter button')); 1408a1a3846SAndreas Gohr 1410c867873SSzymon Olewniczak $form->addTagClose('th'); 1420c867873SSzymon Olewniczak $form->addTagClose('tr'); 1438f630140SSzymon Olewniczak 1440c867873SSzymon Olewniczak /** 1450c867873SSzymon Olewniczak * Table headers 1460c867873SSzymon Olewniczak */ 1470c867873SSzymon Olewniczak $form->addTagOpen('tr'); 1480c867873SSzymon Olewniczak foreach ($headers as $header) { 149cb469644SSzymon Olewniczak $form->addTagOpen('th'); 150cb469644SSzymon Olewniczak if ($header['sort_by'] !== false) { 151*8e9d0162SSzymon Olewniczak $param = $header['sort_by']; 152*8e9d0162SSzymon Olewniczak $icon = 'arrow-both'; 153*8e9d0162SSzymon Olewniczak $title = $this->getLang('admin sort ascending'); 154*8e9d0162SSzymon Olewniczak if ($header['sort_by'] === $order_by) { 155*8e9d0162SSzymon Olewniczak if ($desc === false) { 156*8e9d0162SSzymon Olewniczak $icon = 'arrow-up'; 157*8e9d0162SSzymon Olewniczak $title = $this->getLang('admin sort descending'); 158*8e9d0162SSzymon Olewniczak $param .= ',desc'; 159*8e9d0162SSzymon Olewniczak } else { 160*8e9d0162SSzymon Olewniczak $icon = 'arrow-down'; 161*8e9d0162SSzymon Olewniczak } 162*8e9d0162SSzymon Olewniczak } 163*8e9d0162SSzymon Olewniczak $form->addButtonHTML("fn[sort][$param]", $header['value']. ' '. inlineSVG(dirname(__FILE__) . "/images/$icon.svg")) 164*8e9d0162SSzymon Olewniczak ->addClass('plugin_tagging sort_button') 165*8e9d0162SSzymon Olewniczak ->attr('title', $title); 166cb469644SSzymon Olewniczak } 167cb469644SSzymon Olewniczak $form->addTagClose('th'); 1680c867873SSzymon Olewniczak } 1690c867873SSzymon Olewniczak $form->addTagClose('tr'); 1708a1a3846SAndreas Gohr 171193a767dSSzymon Olewniczak foreach ($tags as $taginfo) { 172193a767dSSzymon Olewniczak $tagname = $taginfo['tid']; 173193a767dSSzymon Olewniczak $taggers = $taginfo['taggers']; 174193a767dSSzymon Olewniczak $written = $taginfo['orig']; 1758a1a3846SAndreas Gohr 1760c867873SSzymon Olewniczak $form->addTagOpen('tr'); 1770c867873SSzymon Olewniczak $form->addTagOpen('td')->addClass('centeralign'); 1780c867873SSzymon Olewniczak $form->addCheckbox('tags['.hsc($tagname).']'); 1790c867873SSzymon Olewniczak $form->addTagClose('td'); 1800c867873SSzymon Olewniczak $form->addHTML('<td><a class="tagslist" href="' . 1810c867873SSzymon Olewniczak $this->hlp->getTagSearchURL($tagname) . '">' . hsc($tagname) . '</a></td>'); 1820c867873SSzymon Olewniczak $form->addHTML('<td>' . $taginfo['count'] . '</td>'); 1830c867873SSzymon Olewniczak $form->addHTML('<td>' . hsc($written) . '</td>'); 1840c867873SSzymon Olewniczak $form->addHTML('<td>' . hsc($taggers) . '</td>'); 185a99b66c1SSzymon Olewniczak 1860c867873SSzymon Olewniczak $form->addTagClose('tr'); 1870c867873SSzymon Olewniczak } 1880c867873SSzymon Olewniczak 1890c867873SSzymon Olewniczak $form->addTagOpen('tr'); 1900c867873SSzymon Olewniczak $form->addHTML('<td colspan="5" class="centeralign"><span class="medialeft">'); 1910c867873SSzymon Olewniczak $form->addButton('fn[delete]', $this->getLang('admin delete_selected'))->id('tagging__del'); 1920c867873SSzymon Olewniczak $form->addHTML('</span></td>'); 1930c867873SSzymon Olewniczak $form->addTagClose('tr'); 1940c867873SSzymon Olewniczak 1950c867873SSzymon Olewniczak $form->addTagClose('table'); 1960c867873SSzymon Olewniczak echo $form->toHTML(); 1978f630140SSzymon Olewniczak } 198872edc7cSRené Corinth} 199