xref: /plugin/tagging/admin.php (revision fece5bdca82f27f1a3dbaf8cb424a82fb570fb6a)
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
27*fece5bdcSAnna Dabrowska     *
28*fece5bdcSAnna Dabrowska     * FIXME remove obsolete actions
298a1a3846SAndreas Gohr     */
308a1a3846SAndreas Gohr    function handle() {
3131396860SSzymon Olewniczak        global $ID, $INPUT;
3231396860SSzymon Olewniczak
3331396860SSzymon Olewniczak        //by default use current page namespace
34ca455b8eSMichael Große        if (!$INPUT->has('filter')) {
35ca455b8eSMichael Große            $INPUT->set('filter', getNS($ID));
36ca455b8eSMichael Große        }
3731396860SSzymon Olewniczak
38a546f97cSSzymon Olewniczak
398e9d0162SSzymon Olewniczak        //by default sort by tag name
40ca455b8eSMichael Große        if (!$INPUT->has('sort')) {
41ca455b8eSMichael Große            $INPUT->set('sort', 'tid');
42ca455b8eSMichael Große        }
438e9d0162SSzymon Olewniczak
4431396860SSzymon Olewniczak        //now starts functions handle
45ca455b8eSMichael Große        if (!$INPUT->has('fn')) {
46ca455b8eSMichael Große            return false;
47ca455b8eSMichael Große        }
48ca455b8eSMichael Große        if (!checkSecurityToken()) {
49ca455b8eSMichael Große            return false;
50ca455b8eSMichael Große        }
5131396860SSzymon Olewniczak
5231396860SSzymon Olewniczak        // extract the command and any specific parameters
5331396860SSzymon Olewniczak        // submit button name is of the form - fn[cmd][param(s)]
5431396860SSzymon Olewniczak        $fn = $INPUT->param('fn');
5531396860SSzymon Olewniczak
5631396860SSzymon Olewniczak        if (is_array($fn)) {
5731396860SSzymon Olewniczak            $cmd = key($fn);
5831396860SSzymon Olewniczak            $param = is_array($fn[$cmd]) ? key($fn[$cmd]) : null;
5931396860SSzymon Olewniczak        } else {
6031396860SSzymon Olewniczak            $cmd = $fn;
6131396860SSzymon Olewniczak            $param = null;
6231396860SSzymon Olewniczak        }
6331396860SSzymon Olewniczak
6431396860SSzymon Olewniczak        switch ($cmd) {
658e9d0162SSzymon Olewniczak            case 'rename':
668e9d0162SSzymon Olewniczak                $this->hlp->renameTag($INPUT->str('old'), $INPUT->str('new'));
678e9d0162SSzymon Olewniczak                break;
688e9d0162SSzymon Olewniczak            case 'delete':
698e9d0162SSzymon Olewniczak                $this->hlp->deleteTags(array_keys($INPUT->arr('tags')), $INPUT->str('filter'));
708e9d0162SSzymon Olewniczak                break;
718e9d0162SSzymon Olewniczak            case 'sort':
728e9d0162SSzymon Olewniczak                $INPUT->set('sort', $param);
738e9d0162SSzymon Olewniczak                break;
748e9d0162SSzymon Olewniczak
75872edc7cSRené Corinth        }
76872edc7cSRené Corinth    }
77872edc7cSRené Corinth
788a1a3846SAndreas Gohr    /**
798a1a3846SAndreas Gohr     * Draw the interface
808a1a3846SAndreas Gohr     */
81872edc7cSRené Corinth    function html() {
828a1a3846SAndreas Gohr        echo $this->locale_xhtml('intro');
838a1a3846SAndreas Gohr        $this->html_table();
84872edc7cSRené Corinth    }
85872edc7cSRené Corinth
868a1a3846SAndreas Gohr    /**
878a1a3846SAndreas Gohr     * Display ALL the tags!
888a1a3846SAndreas Gohr     */
898a1a3846SAndreas Gohr    protected function html_table() {
90a99b66c1SSzymon Olewniczak        global $ID, $INPUT;
918f630140SSzymon Olewniczak
920c867873SSzymon Olewniczak        $headers = array(
93cb469644SSzymon Olewniczak            array('value' => $this->getLang('admin tag'), 'sort_by' => 'tid'),
94cb469644SSzymon Olewniczak            array('value' => $this->getLang('admin occurrence'), 'sort_by' => 'count'),
95cb469644SSzymon Olewniczak            array('value' => $this->getLang('admin writtenas'), 'sort_by' => 'orig'),
96ca455b8eSMichael Große            array('value' => $this->getLang('admin taggers'), 'sort_by' => 'taggers'),
97*fece5bdcSAnna Dabrowska            array('value' => $this->getLang('admin actions'), 'sort_by' => false),
980c867873SSzymon Olewniczak        );
998e9d0162SSzymon Olewniczak
1008e9d0162SSzymon Olewniczak        $sort = explode(',', $INPUT->str('sort'));
1018e9d0162SSzymon Olewniczak        $order_by = $sort[0];
1028e9d0162SSzymon Olewniczak        $desc = false;
1038e9d0162SSzymon Olewniczak        if (isset($sort[1]) && $sort[1] === 'desc') {
1048e9d0162SSzymon Olewniczak            $desc = true;
1058e9d0162SSzymon Olewniczak        }
1068e9d0162SSzymon Olewniczak        $tags = $this->hlp->getAllTags($INPUT->str('filter'), $order_by, $desc);
107a99b66c1SSzymon Olewniczak
1080c867873SSzymon Olewniczak        $form = new dokuwiki\Form\Form();
1090c867873SSzymon Olewniczak        $form->setHiddenField('do', 'admin');
1100c867873SSzymon Olewniczak        $form->setHiddenField('page', 'tagging');
1110c867873SSzymon Olewniczak        $form->setHiddenField('id', $ID);
1128e9d0162SSzymon Olewniczak        $form->setHiddenField('sort', $INPUT->str('sort'));
1130c867873SSzymon Olewniczak
114*fece5bdcSAnna Dabrowska        // actions dialog
115*fece5bdcSAnna Dabrowska        $form->addTagOpen('div')->id('tagging__action-dialog')->attr('style', "display:none;");
116*fece5bdcSAnna Dabrowska        $form->addTagClose('div');
117*fece5bdcSAnna Dabrowska
1180c867873SSzymon Olewniczak        $form->addTagOpen('table')->addClass('inline plugin_tagging');
1190c867873SSzymon Olewniczak
1208f630140SSzymon Olewniczak
1210c867873SSzymon Olewniczak        /**
1220c867873SSzymon Olewniczak         * Table headers
1230c867873SSzymon Olewniczak         */
1240c867873SSzymon Olewniczak        $form->addTagOpen('tr');
1250c867873SSzymon Olewniczak        foreach ($headers as $header) {
126cb469644SSzymon Olewniczak            $form->addTagOpen('th');
127cb469644SSzymon Olewniczak            if ($header['sort_by'] !== false) {
1288e9d0162SSzymon Olewniczak                $param = $header['sort_by'];
1298e9d0162SSzymon Olewniczak                $icon = 'arrow-both';
1308e9d0162SSzymon Olewniczak                $title = $this->getLang('admin sort ascending');
1318e9d0162SSzymon Olewniczak                if ($header['sort_by'] === $order_by) {
1328e9d0162SSzymon Olewniczak                    if ($desc === false) {
1338e9d0162SSzymon Olewniczak                        $icon = 'arrow-up';
1348e9d0162SSzymon Olewniczak                        $title = $this->getLang('admin sort descending');
1358e9d0162SSzymon Olewniczak                        $param .= ',desc';
1368e9d0162SSzymon Olewniczak                    } else {
1378e9d0162SSzymon Olewniczak                        $icon = 'arrow-down';
1388e9d0162SSzymon Olewniczak                    }
1398e9d0162SSzymon Olewniczak                }
1408e9d0162SSzymon Olewniczak                $form->addButtonHTML("fn[sort][$param]", $header['value'] . ' ' . inlineSVG(dirname(__FILE__) . "/images/$icon.svg"))
1418e9d0162SSzymon Olewniczak                    ->addClass('plugin_tagging sort_button')
1428e9d0162SSzymon Olewniczak                    ->attr('title', $title);
143*fece5bdcSAnna Dabrowska            } else {
144*fece5bdcSAnna Dabrowska                $form->addHTML($header['value']);
145cb469644SSzymon Olewniczak            }
146cb469644SSzymon Olewniczak            $form->addTagClose('th');
1470c867873SSzymon Olewniczak        }
1480c867873SSzymon Olewniczak        $form->addTagClose('tr');
1498a1a3846SAndreas Gohr
150193a767dSSzymon Olewniczak        foreach ($tags as $taginfo) {
151193a767dSSzymon Olewniczak            $tagname = $taginfo['tid'];
1527e05e623SSzymon Olewniczak            $taggers = $taginfo['taggers'];
1537e05e623SSzymon Olewniczak            $written = $taginfo['orig'];
1548a1a3846SAndreas Gohr
1550c867873SSzymon Olewniczak            $form->addTagOpen('tr');
1560c867873SSzymon Olewniczak            $form->addHTML('<td><a class="tagslist" href="' .
1570c867873SSzymon Olewniczak                $this->hlp->getTagSearchURL($tagname) . '">' . hsc($tagname) . '</a></td>');
1580c867873SSzymon Olewniczak            $form->addHTML('<td>' . $taginfo['count'] . '</td>');
1590c867873SSzymon Olewniczak            $form->addHTML('<td>' . hsc($written) . '</td>');
1600c867873SSzymon Olewniczak            $form->addHTML('<td>' . hsc($taggers) . '</td>');
161*fece5bdcSAnna Dabrowska            // action buttons
162*fece5bdcSAnna Dabrowska            $form->addHTML('<td>');
163*fece5bdcSAnna Dabrowska            $form->addButtonHTML('fn[actions][rename][' . $taginfo['tid'] . ']', inlineSVG(dirname(__FILE__) . '/images/edit.svg'))
164*fece5bdcSAnna Dabrowska                ->addClass('plugin_tagging action_button')->attr('data-action', 'rename')->attr('data-tid', $taginfo['tid']);
165*fece5bdcSAnna Dabrowska            $form->addButtonHTML('fn[actions][delete][' . $taginfo['tid'] . ']', inlineSVG(dirname(__FILE__) . '/images/delete.svg'))
166*fece5bdcSAnna Dabrowska                ->addClass('plugin_tagging action_button')->attr('data-action', 'delete')->attr('data-tid', $taginfo['tid']);
167*fece5bdcSAnna Dabrowska            $form->addHTML('</td>');
1680c867873SSzymon Olewniczak            $form->addTagClose('tr');
1690c867873SSzymon Olewniczak        }
1700c867873SSzymon Olewniczak
1710c867873SSzymon Olewniczak        $form->addTagClose('table');
1720c867873SSzymon Olewniczak        echo $form->toHTML();
1738f630140SSzymon Olewniczak    }
174872edc7cSRené Corinth}
175