xref: /plugin/tagging/admin.php (revision cb469644934584ed7531f1cab36efe04b8665f0e)
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' => '&#160;',                           '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