xref: /plugin/qc/admin.php (revision 8ae469bf7217f195a3a1b4ddd0d2857bc1c123f9)
1e840d0fcSDominik Eckelmann<?php
276bbc49cSAnna Dabrowska
3e840d0fcSDominik Eckelmann/**
4e840d0fcSDominik Eckelmann * This plugin is used to display a summery of all FIXME pages
5e840d0fcSDominik Eckelmann *
6e840d0fcSDominik Eckelmann * @see http://dokuwiki.org/plugin:qc
7e840d0fcSDominik Eckelmann * @author Dominik Eckelmann <dokuwiki@cosmocode.de>
8e840d0fcSDominik Eckelmann */
976bbc49cSAnna Dabrowskaclass admin_plugin_qc extends DokuWiki_Admin_Plugin
1076bbc49cSAnna Dabrowska{
11293182bbSAnna Dabrowska    protected $data;
12293182bbSAnna Dabrowska    protected $order;
13e840d0fcSDominik Eckelmann
14*8ae469bfSAndreas Gohr    /** @inheritdoc */
15293182bbSAnna Dabrowska    public function forAdminOnly()
1676bbc49cSAnna Dabrowska    {
171c845774SAndreas Gohr        return false;
181c845774SAndreas Gohr    }
19e840d0fcSDominik Eckelmann
20*8ae469bfSAndreas Gohr    /** @inheritDoc */
2176bbc49cSAnna Dabrowska    public function getMenuIcon()
2276bbc49cSAnna Dabrowska    {
231278cd14SAndreas Gohr        return __DIR__ . '/svg/good.svg';
241278cd14SAndreas Gohr    }
251278cd14SAndreas Gohr
26*8ae469bfSAndreas Gohr    /** @inheritdoc */
27293182bbSAnna Dabrowska    public function handle()
2876bbc49cSAnna Dabrowska    {
29e840d0fcSDominik Eckelmann        global $conf;
30e840d0fcSDominik Eckelmann
31e840d0fcSDominik Eckelmann        // load the quality data
32e840d0fcSDominik Eckelmann        if (is_file($conf['tmpdir'] . '/qcgather')) {
336daa3650SDominik Eckelmann            $this->data = file_get_contents($conf['tmpdir'] . '/qcgather');
34e840d0fcSDominik Eckelmann            $this->data = unserialize($this->data);
35e840d0fcSDominik Eckelmann        } else {
36e840d0fcSDominik Eckelmann            $this->data = array();
37e840d0fcSDominik Eckelmann        }
38e840d0fcSDominik Eckelmann
39e840d0fcSDominik Eckelmann        // order the data
40e840d0fcSDominik Eckelmann        if (!isset($_REQUEST['pluginqc']['order'])) {
41e840d0fcSDominik Eckelmann            $_REQUEST['pluginqc']['order'] = 'quality';
42e840d0fcSDominik Eckelmann        }
43e840d0fcSDominik Eckelmann
44e840d0fcSDominik Eckelmann        switch ($_REQUEST['pluginqc']['order']) {
45e840d0fcSDominik Eckelmann            case 'fixme':
46e840d0fcSDominik Eckelmann                uasort($this->data, array($this, 'sortFixme'));
47e840d0fcSDominik Eckelmann                $this->order = 'fixme';
48e840d0fcSDominik Eckelmann                break;
49e840d0fcSDominik Eckelmann            default:
50e840d0fcSDominik Eckelmann                uasort($this->data, array($this, 'sortQuality'));
51e840d0fcSDominik Eckelmann                $this->order = 'quality';
52e840d0fcSDominik Eckelmann        }
53e840d0fcSDominik Eckelmann    }
54e840d0fcSDominik Eckelmann
55*8ae469bfSAndreas Gohr    /** @inheritdoc */
56293182bbSAnna Dabrowska    public function html()
5776bbc49cSAnna Dabrowska    {
58e840d0fcSDominik Eckelmann        global $ID;
59e840d0fcSDominik Eckelmann        $max = $this->getConf('maxshowen');
60e840d0fcSDominik Eckelmann        if (!$max || $max <= 0) $max = 25;
61e840d0fcSDominik Eckelmann
62e840d0fcSDominik Eckelmann        echo '<div id="plugin__qc_admin">';
63e840d0fcSDominik Eckelmann        echo '<h1>' . $this->getLang('admin_headline') . '</h1>';
64e840d0fcSDominik Eckelmann
65e840d0fcSDominik Eckelmann        echo '<p>' . sprintf($this->getLang('admin_desc'), $max) . '</p>';
66e840d0fcSDominik Eckelmann
67e840d0fcSDominik Eckelmann        echo '<table class="inline">';
68e840d0fcSDominik Eckelmann        echo '  <tr>';
69e840d0fcSDominik Eckelmann        echo '    <th>' . $this->getLang('admin_page') . '</th>';
70e840d0fcSDominik Eckelmann        echo '    <th class="quality">' . $this->getOrderArrow('quality') . '<a href="' . wl($ID, array('do' => 'admin', 'page' => 'qc', 'pluginqc[order]' => 'quality')) . '">' . $this->getLang('admin_quality') . '</a></th>';
71e840d0fcSDominik Eckelmann        echo '    <th class="fixme">' . $this->getOrderArrow('fixme') . '<a href="' . wl($ID, array('do' => 'admin', 'page' => 'qc', 'pluginqc[order]' => 'fixme')) . '">' . $this->getLang('admin_fixme') . '</a></th>';
72e840d0fcSDominik Eckelmann        echo '  </tr>';
73e840d0fcSDominik Eckelmann
74e840d0fcSDominik Eckelmann        if ($this->data) {
75e840d0fcSDominik Eckelmann            foreach ($this->data as $id => $data) {
76e840d0fcSDominik Eckelmann                if ($max == 0) break;
77e840d0fcSDominik Eckelmann                echo '  <tr>';
78e840d0fcSDominik Eckelmann                echo '    <td>';
79bebdce60SAdrian Lang                tpl_pagelink(':' . $id, $id);
80e840d0fcSDominik Eckelmann                echo '</td>';
811c845774SAndreas Gohr                echo '    <td class="centeralign">' . \dokuwiki\plugin\qc\Output::scoreIcon($data['score']) . '</td>';
82e840d0fcSDominik Eckelmann                echo '    <td class="centeralign">' . $data['err']['fixme'] . '</td>';
83e840d0fcSDominik Eckelmann                echo '  </tr>';
84e840d0fcSDominik Eckelmann                $max--;
85e840d0fcSDominik Eckelmann            }
86e840d0fcSDominik Eckelmann        }
87e840d0fcSDominik Eckelmann
88e840d0fcSDominik Eckelmann        echo '</table>';
89e840d0fcSDominik Eckelmann        echo '</div>';
90e840d0fcSDominik Eckelmann    }
91e840d0fcSDominik Eckelmann
92*8ae469bfSAndreas Gohr    /**
93*8ae469bfSAndreas Gohr     * return an arrow if currently sorted by this type
94*8ae469bfSAndreas Gohr     *
95*8ae469bfSAndreas Gohr     * @ return string
96*8ae469bfSAndreas Gohr     */
97293182bbSAnna Dabrowska    protected function getOrderArrow($type)
9876bbc49cSAnna Dabrowska    {
99e840d0fcSDominik Eckelmann        if ($type == $this->order) return '&darr; ';
100e840d0fcSDominik Eckelmann        return '';
101e840d0fcSDominik Eckelmann    }
102e840d0fcSDominik Eckelmann
103e840d0fcSDominik Eckelmann    /**
104e840d0fcSDominik Eckelmann     * order by quality
105e840d0fcSDominik Eckelmann     */
106293182bbSAnna Dabrowska    protected function sortQuality($a, $b)
10776bbc49cSAnna Dabrowska    {
108e840d0fcSDominik Eckelmann        if ($a['score'] == $b['score']) return 0;
109e840d0fcSDominik Eckelmann        return ($a['score'] < $b['score']) ? 1 : -1;
110e840d0fcSDominik Eckelmann    }
111e840d0fcSDominik Eckelmann
112e840d0fcSDominik Eckelmann    /**
113e840d0fcSDominik Eckelmann     * order by fixmes
114e840d0fcSDominik Eckelmann     */
115293182bbSAnna Dabrowska    protected function sortFixme($a, $b)
11676bbc49cSAnna Dabrowska    {
117e840d0fcSDominik Eckelmann        if ($a['err']['fixme'] == $b['err']['fixme']) return 0;
118e840d0fcSDominik Eckelmann        return ($a['err']['fixme'] < $b['err']['fixme']) ? 1 : -1;
119e840d0fcSDominik Eckelmann    }
120e840d0fcSDominik Eckelmann}
121