xref: /plugin/qc/admin.php (revision 76bbc49c3993db5faa9303ad0615cbeca3339685)
1e840d0fcSDominik Eckelmann<?php
2*76bbc49cSAnna Dabrowska
31c845774SAndreas Gohr// must be run within Dokuwiki
41c845774SAndreas Gohrif (!defined('DOKU_INC')) die();
5e840d0fcSDominik Eckelmann
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 */
12*76bbc49cSAnna Dabrowskaclass admin_plugin_qc extends DokuWiki_Admin_Plugin
13*76bbc49cSAnna Dabrowska{
14e840d0fcSDominik Eckelmann
15e840d0fcSDominik Eckelmann    var $data;
16e840d0fcSDominik Eckelmann    var $order;
17e840d0fcSDominik Eckelmann
18*76bbc49cSAnna Dabrowska    function getMenuSort()
19*76bbc49cSAnna Dabrowska    {
201c845774SAndreas Gohr        return 999;
211c845774SAndreas Gohr    }
221c845774SAndreas Gohr
23*76bbc49cSAnna Dabrowska    function forAdminOnly()
24*76bbc49cSAnna Dabrowska    {
251c845774SAndreas Gohr        return false;
261c845774SAndreas Gohr    }
27e840d0fcSDominik Eckelmann
28e840d0fcSDominik Eckelmann    /**
291278cd14SAndreas Gohr     * @inheritDoc
301278cd14SAndreas Gohr     */
31*76bbc49cSAnna Dabrowska    public function getMenuIcon()
32*76bbc49cSAnna Dabrowska    {
331278cd14SAndreas Gohr        return __DIR__ . '/svg/good.svg';
341278cd14SAndreas Gohr    }
351278cd14SAndreas Gohr
361278cd14SAndreas Gohr    /**
37e840d0fcSDominik Eckelmann     * handle the request befor html output
38e840d0fcSDominik Eckelmann     *
39e840d0fcSDominik Eckelmann     * @see html()
40e840d0fcSDominik Eckelmann     */
41*76bbc49cSAnna Dabrowska    function handle()
42*76bbc49cSAnna Dabrowska    {
43e840d0fcSDominik Eckelmann        global $conf;
44e840d0fcSDominik Eckelmann
45e840d0fcSDominik Eckelmann        // load the quality data
46e840d0fcSDominik Eckelmann        if (is_file($conf['tmpdir'] . '/qcgather')) {
476daa3650SDominik Eckelmann            $this->data = file_get_contents($conf['tmpdir'] . '/qcgather');
48e840d0fcSDominik Eckelmann            $this->data = unserialize($this->data);
49e840d0fcSDominik Eckelmann        } else {
50e840d0fcSDominik Eckelmann            $this->data = array();
51e840d0fcSDominik Eckelmann        }
52e840d0fcSDominik Eckelmann
53e840d0fcSDominik Eckelmann        // order the data
54e840d0fcSDominik Eckelmann        if (!isset($_REQUEST['pluginqc']['order'])) {
55e840d0fcSDominik Eckelmann            $_REQUEST['pluginqc']['order'] = 'quality';
56e840d0fcSDominik Eckelmann        }
57e840d0fcSDominik Eckelmann
58e840d0fcSDominik Eckelmann        switch ($_REQUEST['pluginqc']['order']) {
59e840d0fcSDominik Eckelmann            case 'fixme':
60e840d0fcSDominik Eckelmann                uasort($this->data, array($this, 'sortFixme'));
61e840d0fcSDominik Eckelmann                $this->order = 'fixme';
62e840d0fcSDominik Eckelmann                break;
63e840d0fcSDominik Eckelmann            default:
64e840d0fcSDominik Eckelmann                uasort($this->data, array($this, 'sortQuality'));
65e840d0fcSDominik Eckelmann                $this->order = 'quality';
66e840d0fcSDominik Eckelmann        }
67e840d0fcSDominik Eckelmann    }
68e840d0fcSDominik Eckelmann
69e840d0fcSDominik Eckelmann    /**
70e840d0fcSDominik Eckelmann     * output html for the admin page
71e840d0fcSDominik Eckelmann     */
72*76bbc49cSAnna Dabrowska    function html()
73*76bbc49cSAnna Dabrowska    {
74e840d0fcSDominik Eckelmann        global $ID;
75e840d0fcSDominik Eckelmann        $max = $this->getConf('maxshowen');
76e840d0fcSDominik Eckelmann        if (!$max || $max <= 0) $max = 25;
77e840d0fcSDominik Eckelmann
78e840d0fcSDominik Eckelmann        echo '<div id="plugin__qc_admin">';
79e840d0fcSDominik Eckelmann        echo '<h1>' . $this->getLang('admin_headline') . '</h1>';
80e840d0fcSDominik Eckelmann
81e840d0fcSDominik Eckelmann        echo '<p>' . sprintf($this->getLang('admin_desc'), $max) . '</p>';
82e840d0fcSDominik Eckelmann
83e840d0fcSDominik Eckelmann        echo '<table class="inline">';
84e840d0fcSDominik Eckelmann        echo '  <tr>';
85e840d0fcSDominik Eckelmann        echo '    <th>' . $this->getLang('admin_page') . '</th>';
86e840d0fcSDominik 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>';
87e840d0fcSDominik 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>';
88e840d0fcSDominik Eckelmann        echo '  </tr>';
89e840d0fcSDominik Eckelmann
90e840d0fcSDominik Eckelmann        if ($this->data) {
91e840d0fcSDominik Eckelmann            foreach ($this->data as $id => $data) {
92e840d0fcSDominik Eckelmann                if ($max == 0) break;
93e840d0fcSDominik Eckelmann                echo '  <tr>';
94e840d0fcSDominik Eckelmann                echo '    <td>';
95bebdce60SAdrian Lang                tpl_pagelink(':' . $id, $id);
96e840d0fcSDominik Eckelmann                echo '</td>';
971c845774SAndreas Gohr                echo '    <td class="centeralign">' . \dokuwiki\plugin\qc\Output::scoreIcon($data['score']) . '</td>';
98e840d0fcSDominik Eckelmann                echo '    <td class="centeralign">' . $data['err']['fixme'] . '</td>';
99e840d0fcSDominik Eckelmann                echo '  </tr>';
100e840d0fcSDominik Eckelmann                $max--;
101e840d0fcSDominik Eckelmann            }
102e840d0fcSDominik Eckelmann        }
103e840d0fcSDominik Eckelmann
104e840d0fcSDominik Eckelmann        echo '</table>';
105e840d0fcSDominik Eckelmann        echo '</div>';
106e840d0fcSDominik Eckelmann    }
107e840d0fcSDominik Eckelmann
108*76bbc49cSAnna Dabrowska    function getOrderArrow($type)
109*76bbc49cSAnna Dabrowska    {
110e840d0fcSDominik Eckelmann        if ($type == $this->order) return '&darr; ';
111e840d0fcSDominik Eckelmann        return '';
112e840d0fcSDominik Eckelmann    }
113e840d0fcSDominik Eckelmann
114e840d0fcSDominik Eckelmann    /**
115e840d0fcSDominik Eckelmann     * order by quality
116e840d0fcSDominik Eckelmann     */
117*76bbc49cSAnna Dabrowska    function sortQuality($a, $b)
118*76bbc49cSAnna Dabrowska    {
119e840d0fcSDominik Eckelmann        if ($a['score'] == $b['score']) return 0;
120e840d0fcSDominik Eckelmann        return ($a['score'] < $b['score']) ? 1 : -1;
121e840d0fcSDominik Eckelmann    }
122e840d0fcSDominik Eckelmann
123e840d0fcSDominik Eckelmann    /**
124e840d0fcSDominik Eckelmann     * order by fixmes
125e840d0fcSDominik Eckelmann     */
126*76bbc49cSAnna Dabrowska    function sortFixme($a, $b)
127*76bbc49cSAnna Dabrowska    {
128e840d0fcSDominik Eckelmann        if ($a['err']['fixme'] == $b['err']['fixme']) return 0;
129e840d0fcSDominik Eckelmann        return ($a['err']['fixme'] < $b['err']['fixme']) ? 1 : -1;
130e840d0fcSDominik Eckelmann    }
131e840d0fcSDominik Eckelmann}
132