xref: /plugin/qc/admin.php (revision c8d45e58b7fb355e519f202d4d79b4c8f46772b5)
1e840d0fcSDominik Eckelmann<?php
276bbc49cSAnna Dabrowska
32fc45e0cSsplitbrainuse dokuwiki\Extension\AdminPlugin;
42fc45e0cSsplitbrainuse dokuwiki\plugin\qc\Output;
52fc45e0cSsplitbrain
6e840d0fcSDominik Eckelmann/**
7e840d0fcSDominik Eckelmann * This plugin is used to display a summery of all FIXME pages
8e840d0fcSDominik Eckelmann *
9e840d0fcSDominik Eckelmann * @see http://dokuwiki.org/plugin:qc
10e840d0fcSDominik Eckelmann * @author Dominik Eckelmann <dokuwiki@cosmocode.de>
11e840d0fcSDominik Eckelmann */
122fc45e0cSsplitbrainclass admin_plugin_qc extends AdminPlugin
1376bbc49cSAnna Dabrowska{
14293182bbSAnna Dabrowska    protected $data;
15293182bbSAnna Dabrowska    protected $order;
16e840d0fcSDominik Eckelmann
178ae469bfSAndreas Gohr    /** @inheritdoc */
18293182bbSAnna Dabrowska    public function forAdminOnly()
1976bbc49cSAnna Dabrowska    {
201c845774SAndreas Gohr        return false;
211c845774SAndreas Gohr    }
22e840d0fcSDominik Eckelmann
238ae469bfSAndreas Gohr    /** @inheritDoc */
2476bbc49cSAnna Dabrowska    public function getMenuIcon()
2576bbc49cSAnna Dabrowska    {
261278cd14SAndreas Gohr        return __DIR__ . '/svg/good.svg';
271278cd14SAndreas Gohr    }
281278cd14SAndreas Gohr
298ae469bfSAndreas Gohr    /** @inheritdoc */
30293182bbSAnna Dabrowska    public function handle()
3176bbc49cSAnna Dabrowska    {
32e840d0fcSDominik Eckelmann        global $conf;
33e840d0fcSDominik Eckelmann
34e840d0fcSDominik Eckelmann        // load the quality data
35e840d0fcSDominik Eckelmann        if (is_file($conf['tmpdir'] . '/qcgather')) {
366daa3650SDominik Eckelmann            $this->data = file_get_contents($conf['tmpdir'] . '/qcgather');
37e840d0fcSDominik Eckelmann            $this->data = unserialize($this->data);
38e840d0fcSDominik Eckelmann        } else {
392fc45e0cSsplitbrain            $this->data = [];
40e840d0fcSDominik Eckelmann        }
41e840d0fcSDominik Eckelmann
42e840d0fcSDominik Eckelmann        // order the data
43e840d0fcSDominik Eckelmann        if (!isset($_REQUEST['pluginqc']['order'])) {
44e840d0fcSDominik Eckelmann            $_REQUEST['pluginqc']['order'] = 'quality';
45e840d0fcSDominik Eckelmann        }
46e840d0fcSDominik Eckelmann
47e840d0fcSDominik Eckelmann        switch ($_REQUEST['pluginqc']['order']) {
48e840d0fcSDominik Eckelmann            case 'fixme':
492fc45e0cSsplitbrain                uasort($this->data, [$this, 'sortFixme']);
50e840d0fcSDominik Eckelmann                $this->order = 'fixme';
51e840d0fcSDominik Eckelmann                break;
52e840d0fcSDominik Eckelmann            default:
532fc45e0cSsplitbrain                uasort($this->data, [$this, 'sortQuality']);
54e840d0fcSDominik Eckelmann                $this->order = 'quality';
55e840d0fcSDominik Eckelmann        }
56e840d0fcSDominik Eckelmann    }
57e840d0fcSDominik Eckelmann
588ae469bfSAndreas Gohr    /** @inheritdoc */
59293182bbSAnna Dabrowska    public function html()
6076bbc49cSAnna Dabrowska    {
61e840d0fcSDominik Eckelmann        global $ID;
62e840d0fcSDominik Eckelmann        $max = $this->getConf('maxshowen');
63e840d0fcSDominik Eckelmann        if (!$max || $max <= 0) $max = 25;
64e840d0fcSDominik Eckelmann
65e840d0fcSDominik Eckelmann        echo '<div id="plugin__qc_admin">';
66e840d0fcSDominik Eckelmann        echo '<h1>' . $this->getLang('admin_headline') . '</h1>';
67e840d0fcSDominik Eckelmann
68e840d0fcSDominik Eckelmann        echo '<p>' . sprintf($this->getLang('admin_desc'), $max) . '</p>';
69e840d0fcSDominik Eckelmann
70e840d0fcSDominik Eckelmann        echo '<table class="inline">';
71e840d0fcSDominik Eckelmann        echo '  <tr>';
72e840d0fcSDominik Eckelmann        echo '    <th>' . $this->getLang('admin_page') . '</th>';
73*c8d45e58SAndreas Gohr        echo '    <th class="quality">' . $this->getOrderArrow('quality') .
74*c8d45e58SAndreas Gohr            '<a href="' . wl($ID, ['do' => 'admin', 'page' => 'qc', 'pluginqc[order]' => 'quality']) . '">' .
75*c8d45e58SAndreas Gohr            $this->getLang('admin_quality') . '</a></th>';
76*c8d45e58SAndreas Gohr        echo '    <th class="fixme">' . $this->getOrderArrow('fixme') .
77*c8d45e58SAndreas Gohr            '<a href="' . wl($ID, ['do' => 'admin', 'page' => 'qc', 'pluginqc[order]' => 'fixme']) . '">' .
78*c8d45e58SAndreas Gohr            $this->getLang('admin_fixme') . '</a></th>';
79e840d0fcSDominik Eckelmann        echo '  </tr>';
80e840d0fcSDominik Eckelmann
81e840d0fcSDominik Eckelmann        if ($this->data) {
82e840d0fcSDominik Eckelmann            foreach ($this->data as $id => $data) {
83e840d0fcSDominik Eckelmann                if ($max == 0) break;
84e840d0fcSDominik Eckelmann                echo '  <tr>';
85e840d0fcSDominik Eckelmann                echo '    <td>';
86bebdce60SAdrian Lang                tpl_pagelink(':' . $id, $id);
87e840d0fcSDominik Eckelmann                echo '</td>';
882fc45e0cSsplitbrain                echo '    <td class="centeralign">' . Output::scoreIcon($data['score']) . '</td>';
89e840d0fcSDominik Eckelmann                echo '    <td class="centeralign">' . $data['err']['fixme'] . '</td>';
90e840d0fcSDominik Eckelmann                echo '  </tr>';
91e840d0fcSDominik Eckelmann                $max--;
92e840d0fcSDominik Eckelmann            }
93e840d0fcSDominik Eckelmann        }
94e840d0fcSDominik Eckelmann
95e840d0fcSDominik Eckelmann        echo '</table>';
96e840d0fcSDominik Eckelmann        echo '</div>';
97e840d0fcSDominik Eckelmann    }
98e840d0fcSDominik Eckelmann
998ae469bfSAndreas Gohr    /**
1008ae469bfSAndreas Gohr     * return an arrow if currently sorted by this type
1018ae469bfSAndreas Gohr     *
1028ae469bfSAndreas Gohr     * @ return string
1038ae469bfSAndreas Gohr     */
104293182bbSAnna Dabrowska    protected function getOrderArrow($type)
10576bbc49cSAnna Dabrowska    {
106e840d0fcSDominik Eckelmann        if ($type == $this->order) return '&darr; ';
107e840d0fcSDominik Eckelmann        return '';
108e840d0fcSDominik Eckelmann    }
109e840d0fcSDominik Eckelmann
110e840d0fcSDominik Eckelmann    /**
111e840d0fcSDominik Eckelmann     * order by quality
112e840d0fcSDominik Eckelmann     */
113293182bbSAnna Dabrowska    protected function sortQuality($a, $b)
11476bbc49cSAnna Dabrowska    {
1152fc45e0cSsplitbrain        return $b['score'] <=> $a['score'];
116e840d0fcSDominik Eckelmann    }
117e840d0fcSDominik Eckelmann
118e840d0fcSDominik Eckelmann    /**
119e840d0fcSDominik Eckelmann     * order by fixmes
120e840d0fcSDominik Eckelmann     */
121293182bbSAnna Dabrowska    protected function sortFixme($a, $b)
12276bbc49cSAnna Dabrowska    {
1232fc45e0cSsplitbrain        return $b['err']['fixme'] <=> $a['err']['fixme'];
124e840d0fcSDominik Eckelmann    }
125e840d0fcSDominik Eckelmann}
126