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; 118a1a3846SAndreas Gohr /** @var string message to show */ 128b352fbcSRené Corinth private $message; 13872edc7cSRené Corinth 148a1a3846SAndreas Gohr public function __construct() { 15872edc7cSRené Corinth $this->hlp = plugin_load('helper', 'tagging'); 168a1a3846SAndreas Gohr } 17872edc7cSRené Corinth 188a1a3846SAndreas Gohr /** 198a1a3846SAndreas Gohr * We allow use by managers 208a1a3846SAndreas Gohr * 218a1a3846SAndreas Gohr * @return bool always false 228a1a3846SAndreas Gohr */ 238a1a3846SAndreas Gohr function forAdminOnly() { 248a1a3846SAndreas Gohr return false; 258a1a3846SAndreas Gohr } 268a1a3846SAndreas Gohr 278a1a3846SAndreas Gohr /** 2831396860SSzymon Olewniczak * Handle tag actions 298a1a3846SAndreas Gohr */ 308a1a3846SAndreas Gohr function handle() { 3131396860SSzymon Olewniczak global $ID, $INPUT; 3231396860SSzymon Olewniczak 3331396860SSzymon Olewniczak //by default use current page namespace 3431396860SSzymon Olewniczak if (!$INPUT->has('filter')) $INPUT->set('filter', getNS($ID)); 3531396860SSzymon Olewniczak 3631396860SSzymon Olewniczak //now starts functions handle 3731396860SSzymon Olewniczak if (!$INPUT->has('fn')) return false; 3831396860SSzymon Olewniczak if (!checkSecurityToken()) return false; 3931396860SSzymon Olewniczak 4031396860SSzymon Olewniczak // extract the command and any specific parameters 4131396860SSzymon Olewniczak // submit button name is of the form - fn[cmd][param(s)] 4231396860SSzymon Olewniczak $fn = $INPUT->param('fn'); 4331396860SSzymon Olewniczak 4431396860SSzymon Olewniczak if (is_array($fn)) { 4531396860SSzymon Olewniczak $cmd = key($fn); 4631396860SSzymon Olewniczak $param = is_array($fn[$cmd]) ? key($fn[$cmd]) : null; 4731396860SSzymon Olewniczak } else { 4831396860SSzymon Olewniczak $cmd = $fn; 4931396860SSzymon Olewniczak $param = null; 5031396860SSzymon Olewniczak } 5131396860SSzymon Olewniczak 5231396860SSzymon Olewniczak switch ($cmd) { 5331396860SSzymon Olewniczak case 'rename' : $this->_renameTag(); break; 5431396860SSzymon Olewniczak case 'delete' : $this->_deleteTags(); break; 55*cb469644SSzymon Olewniczak case 'sort' : break; 56872edc7cSRené Corinth } 57872edc7cSRené Corinth } 58872edc7cSRené Corinth 598a1a3846SAndreas Gohr /** 608a1a3846SAndreas Gohr * Draw the interface 618a1a3846SAndreas Gohr */ 62872edc7cSRené Corinth function html() { 638a1a3846SAndreas Gohr echo $this->locale_xhtml('intro'); 648a1a3846SAndreas Gohr $this->html_form(); 658a1a3846SAndreas Gohr echo '<br />'; 668a1a3846SAndreas Gohr $this->html_table(); 67872edc7cSRené Corinth } 68872edc7cSRené Corinth 698a1a3846SAndreas Gohr /** 708a1a3846SAndreas Gohr * Show form for renaming tags 718a1a3846SAndreas Gohr */ 728a1a3846SAndreas Gohr protected function html_form() { 730c867873SSzymon Olewniczak global $ID, $INPUT; 748a1a3846SAndreas Gohr 75f1059d49SSzymon Olewniczak $form = new dokuwiki\Form\Form(); 76f1059d49SSzymon Olewniczak $form->addClass('plugin_tagging'); 778a1a3846SAndreas Gohr 78f1059d49SSzymon Olewniczak $form->setHiddenField('do', 'admin'); 79f1059d49SSzymon Olewniczak $form->setHiddenField('page', 'tagging'); 80f1059d49SSzymon Olewniczak $form->setHiddenField('id', $ID); 81f1059d49SSzymon Olewniczak $form->setHiddenField('filter', $INPUT->str('filter')); 828a1a3846SAndreas Gohr 83f1059d49SSzymon Olewniczak $form->addFieldsetOpen($this->getLang('admin rename tag')); 84f1059d49SSzymon Olewniczak $form->addTextInput('old', $this->getLang('admin find tag'))->addClass('block'); 85f1059d49SSzymon Olewniczak $form->addTagClose('br'); 86f1059d49SSzymon Olewniczak $form->addTextInput('new', $this->getLang('admin new name'))->addClass('block'); 87f1059d49SSzymon Olewniczak $form->addTagClose('br'); 88f1059d49SSzymon Olewniczak $form->addButton('fn[rename]', $this->getLang('admin save')); 89f1059d49SSzymon Olewniczak $form->addFieldsetClose(); 90f1059d49SSzymon Olewniczak 91f1059d49SSzymon Olewniczak echo $form->toHTML(); 928a1a3846SAndreas Gohr } 938a1a3846SAndreas Gohr 948a1a3846SAndreas Gohr /** 958a1a3846SAndreas Gohr * Display ALL the tags! 968a1a3846SAndreas Gohr */ 978a1a3846SAndreas Gohr protected function html_table() { 98a99b66c1SSzymon Olewniczak global $ID, $INPUT; 998f630140SSzymon Olewniczak 1000c867873SSzymon Olewniczak $headers = array( 101*cb469644SSzymon Olewniczak array('value' => ' ', 'sort_by' => false), 102*cb469644SSzymon Olewniczak array('value' => $this->getLang('admin tag'), 'sort_by' => 'tid'), 103*cb469644SSzymon Olewniczak array('value' => $this->getLang('admin occurrence'), 'sort_by' => 'count'), 104*cb469644SSzymon Olewniczak array('value' => $this->getLang('admin writtenas'), 'sort_by' => 'orig'), 105*cb469644SSzymon Olewniczak array('value' => $this->getLang('admin taggers'), 'sort_by' => 'taggers') 1060c867873SSzymon Olewniczak ); 107a99b66c1SSzymon Olewniczak $tags = $this->hlp->getAllTags($INPUT->str('filter')); 108a99b66c1SSzymon Olewniczak 1090c867873SSzymon Olewniczak $form = new dokuwiki\Form\Form(); 1100c867873SSzymon Olewniczak $form->setHiddenField('do', 'admin'); 1110c867873SSzymon Olewniczak $form->setHiddenField('page', 'tagging'); 1120c867873SSzymon Olewniczak $form->setHiddenField('id', $ID); 1130c867873SSzymon Olewniczak 1140c867873SSzymon Olewniczak $form->addTagOpen('table')->addClass('inline plugin_tagging'); 1150c867873SSzymon Olewniczak $form->addTagOpen('tr'); 1160c867873SSzymon Olewniczak $form->addTagOpen('th')->attr('colspan', count($headers)); 1170c867873SSzymon Olewniczak 118a99b66c1SSzymon Olewniczak /** 119a99b66c1SSzymon Olewniczak * Show form for filtering the tags by namespaces 120a99b66c1SSzymon Olewniczak */ 1210c867873SSzymon Olewniczak $form->addTextInput('filter', $this->getLang('admin filter').': '); 1220c867873SSzymon Olewniczak $form->addButton('fn[filter]', $this->getLang('admin filter button')); 1238a1a3846SAndreas Gohr 1240c867873SSzymon Olewniczak $form->addTagClose('th'); 1250c867873SSzymon Olewniczak $form->addTagClose('tr'); 1268f630140SSzymon Olewniczak 1270c867873SSzymon Olewniczak /** 1280c867873SSzymon Olewniczak * Table headers 1290c867873SSzymon Olewniczak */ 1300c867873SSzymon Olewniczak $form->addTagOpen('tr'); 1310c867873SSzymon Olewniczak foreach ($headers as $header) { 132*cb469644SSzymon Olewniczak $form->addTagOpen('th'); 133*cb469644SSzymon Olewniczak $form->addHTML($header['value']); 134*cb469644SSzymon Olewniczak if ($header['sort_by'] !== false) { 135*cb469644SSzymon Olewniczak $form->addButton("fn[sort][$header[sort_by]]", 'sort'); 136*cb469644SSzymon Olewniczak } 137*cb469644SSzymon Olewniczak $form->addTagClose('th'); 1380c867873SSzymon Olewniczak } 1390c867873SSzymon Olewniczak $form->addTagClose('tr'); 1408a1a3846SAndreas Gohr 141193a767dSSzymon Olewniczak foreach ($tags as $taginfo) { 142193a767dSSzymon Olewniczak $tagname = $taginfo['tid']; 143193a767dSSzymon Olewniczak $taggers = $taginfo['taggers']; 144193a767dSSzymon Olewniczak $written = $taginfo['orig']; 1458a1a3846SAndreas Gohr 1460c867873SSzymon Olewniczak $form->addTagOpen('tr'); 1470c867873SSzymon Olewniczak $form->addTagOpen('td')->addClass('centeralign'); 1480c867873SSzymon Olewniczak $form->addCheckbox('tags['.hsc($tagname).']'); 1490c867873SSzymon Olewniczak $form->addTagClose('td'); 1500c867873SSzymon Olewniczak $form->addHTML('<td><a class="tagslist" href="' . 1510c867873SSzymon Olewniczak $this->hlp->getTagSearchURL($tagname) . '">' . hsc($tagname) . '</a></td>'); 1520c867873SSzymon Olewniczak $form->addHTML('<td>' . $taginfo['count'] . '</td>'); 1530c867873SSzymon Olewniczak $form->addHTML('<td>' . hsc($written) . '</td>'); 1540c867873SSzymon Olewniczak $form->addHTML('<td>' . hsc($taggers) . '</td>'); 155a99b66c1SSzymon Olewniczak 1560c867873SSzymon Olewniczak $form->addTagClose('tr'); 1570c867873SSzymon Olewniczak } 1580c867873SSzymon Olewniczak 1590c867873SSzymon Olewniczak $form->addTagOpen('tr'); 1600c867873SSzymon Olewniczak $form->addHTML('<td colspan="5" class="centeralign"><span class="medialeft">'); 1610c867873SSzymon Olewniczak $form->addButton('fn[delete]', $this->getLang('admin delete_selected'))->id('tagging__del'); 1620c867873SSzymon Olewniczak $form->addHTML('</span></td>'); 1630c867873SSzymon Olewniczak $form->addTagClose('tr'); 1640c867873SSzymon Olewniczak 1650c867873SSzymon Olewniczak $form->addTagClose('table'); 1660c867873SSzymon Olewniczak echo $form->toHTML(); 1678f630140SSzymon Olewniczak } 1688f630140SSzymon Olewniczak 1698f630140SSzymon Olewniczak /** 1708f630140SSzymon Olewniczak * Rename a tag 1718f630140SSzymon Olewniczak * 1728f630140SSzymon Olewniczak */ 1738f630140SSzymon Olewniczak protected function _renameTag() { 1748f630140SSzymon Olewniczak global $INPUT; 1758f630140SSzymon Olewniczak 1768f630140SSzymon Olewniczak if ($INPUT->post->has('old') && $INPUT->post->has('new')) { 1778f630140SSzymon Olewniczak $this->hlp->renameTag($INPUT->post->str('old'), $INPUT->post->str('new')); 1788f630140SSzymon Olewniczak } 1798f630140SSzymon Olewniczak } 1808f630140SSzymon Olewniczak 1818f630140SSzymon Olewniczak /** 1828f630140SSzymon Olewniczak * Delete tags 1838f630140SSzymon Olewniczak * 1848f630140SSzymon Olewniczak */ 1858f630140SSzymon Olewniczak protected function _deleteTags() { 1868f630140SSzymon Olewniczak global $INPUT; 1878f630140SSzymon Olewniczak 1888f630140SSzymon Olewniczak if ($INPUT->post->has('tags')) { 18931396860SSzymon Olewniczak $this->hlp->deleteTags(array_keys($INPUT->post->arr('tags')), $INPUT->str('filter')); 1908f630140SSzymon Olewniczak } 1918a1a3846SAndreas Gohr } 192872edc7cSRené Corinth} 193