xref: /plugin/qc/admin.php (revision 1c8457749c0d73df0789872e745e575b222391d8)
1e840d0fcSDominik Eckelmann<?php
2*1c845774SAndreas Gohr// must be run within Dokuwiki
3*1c845774SAndreas Gohrif(!defined('DOKU_INC')) die();
4e840d0fcSDominik Eckelmann
5e840d0fcSDominik Eckelmann/**
6e840d0fcSDominik Eckelmann * This plugin is used to display a summery of all FIXME pages
7e840d0fcSDominik Eckelmann *
8e840d0fcSDominik Eckelmann * @see http://dokuwiki.org/plugin:qc
9e840d0fcSDominik Eckelmann * @author Dominik Eckelmann <dokuwiki@cosmocode.de>
10e840d0fcSDominik Eckelmann */
11e840d0fcSDominik Eckelmannclass admin_plugin_qc extends DokuWiki_Admin_Plugin {
12e840d0fcSDominik Eckelmann
13e840d0fcSDominik Eckelmann    var $data;
14e840d0fcSDominik Eckelmann    var $order;
15e840d0fcSDominik Eckelmann
16*1c845774SAndreas Gohr    function getMenuSort() {
17*1c845774SAndreas Gohr        return 999;
18*1c845774SAndreas Gohr    }
19*1c845774SAndreas Gohr
20*1c845774SAndreas Gohr    function forAdminOnly() {
21*1c845774SAndreas Gohr        return false;
22*1c845774SAndreas Gohr    }
23e840d0fcSDominik Eckelmann
24e840d0fcSDominik Eckelmann    /**
25e840d0fcSDominik Eckelmann     * handle the request befor html output
26e840d0fcSDominik Eckelmann     *
27e840d0fcSDominik Eckelmann     * @see html()
28e840d0fcSDominik Eckelmann     */
29e840d0fcSDominik Eckelmann    function handle() {
30e840d0fcSDominik Eckelmann        global $conf;
31e840d0fcSDominik Eckelmann
32e840d0fcSDominik Eckelmann        // load the quality data
33e840d0fcSDominik Eckelmann        if(is_file($conf['tmpdir'] . '/qcgather')) {
346daa3650SDominik Eckelmann            $this->data = file_get_contents($conf['tmpdir'] . '/qcgather');
35e840d0fcSDominik Eckelmann            $this->data = unserialize($this->data);
36e840d0fcSDominik Eckelmann        } else {
37e840d0fcSDominik Eckelmann            $this->data = array();
38e840d0fcSDominik Eckelmann        }
39e840d0fcSDominik Eckelmann
40e840d0fcSDominik Eckelmann        // order the data
41e840d0fcSDominik Eckelmann        if(!isset($_REQUEST['pluginqc']['order'])) {
42e840d0fcSDominik Eckelmann            $_REQUEST['pluginqc']['order'] = 'quality';
43e840d0fcSDominik Eckelmann        }
44e840d0fcSDominik Eckelmann
45e840d0fcSDominik Eckelmann        switch($_REQUEST['pluginqc']['order']) {
46e840d0fcSDominik Eckelmann            case 'fixme':
47e840d0fcSDominik Eckelmann                uasort($this->data, array($this, 'sortFixme'));
48e840d0fcSDominik Eckelmann                $this->order = 'fixme';
49e840d0fcSDominik Eckelmann                break;
50e840d0fcSDominik Eckelmann            default:
51e840d0fcSDominik Eckelmann                uasort($this->data, array($this, 'sortQuality'));
52e840d0fcSDominik Eckelmann                $this->order = 'quality';
53e840d0fcSDominik Eckelmann        }
54e840d0fcSDominik Eckelmann    }
55e840d0fcSDominik Eckelmann
56e840d0fcSDominik Eckelmann    /**
57e840d0fcSDominik Eckelmann     * output html for the admin page
58e840d0fcSDominik Eckelmann     */
59e840d0fcSDominik Eckelmann    function html() {
60e840d0fcSDominik Eckelmann        global $ID;
61e840d0fcSDominik Eckelmann        $max = $this->getConf('maxshowen');
62e840d0fcSDominik Eckelmann        if(!$max || $max <= 0) $max = 25;
63e840d0fcSDominik Eckelmann
64e840d0fcSDominik Eckelmann        echo '<div id="plugin__qc_admin">';
65e840d0fcSDominik Eckelmann        echo '<h1>' . $this->getLang('admin_headline') . '</h1>';
66e840d0fcSDominik Eckelmann
67e840d0fcSDominik Eckelmann        echo '<p>' . sprintf($this->getLang('admin_desc'), $max) . '</p>';
68e840d0fcSDominik Eckelmann
69e840d0fcSDominik Eckelmann        echo '<table class="inline">';
70e840d0fcSDominik Eckelmann        echo '  <tr>';
71e840d0fcSDominik Eckelmann        echo '    <th>' . $this->getLang('admin_page') . '</th>';
72e840d0fcSDominik 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>';
73e840d0fcSDominik 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>';
74e840d0fcSDominik Eckelmann        echo '  </tr>';
75e840d0fcSDominik Eckelmann
76e840d0fcSDominik Eckelmann        if($this->data) {
77e840d0fcSDominik Eckelmann            foreach($this->data as $id => $data) {
78e840d0fcSDominik Eckelmann                if($max == 0) break;
79e840d0fcSDominik Eckelmann                echo '  <tr>';
80e840d0fcSDominik Eckelmann                echo '    <td>';
81bebdce60SAdrian Lang                tpl_pagelink(':' . $id, $id);
82e840d0fcSDominik Eckelmann                echo '</td>';
83*1c845774SAndreas Gohr                echo '    <td class="centeralign">' . \dokuwiki\plugin\qc\Output::scoreIcon($data['score']) . '</td>';
84e840d0fcSDominik Eckelmann                echo '    <td class="centeralign">' . $data['err']['fixme'] . '</td>';
85e840d0fcSDominik Eckelmann                echo '  </tr>';
86e840d0fcSDominik Eckelmann                $max--;
87e840d0fcSDominik Eckelmann            }
88e840d0fcSDominik Eckelmann        }
89e840d0fcSDominik Eckelmann
90e840d0fcSDominik Eckelmann        echo '</table>';
91e840d0fcSDominik Eckelmann        echo '</div>';
92e840d0fcSDominik Eckelmann    }
93e840d0fcSDominik Eckelmann
94e840d0fcSDominik Eckelmann    function getOrderArrow($type) {
95e840d0fcSDominik Eckelmann        if($type == $this->order) return '&darr; ';
96e840d0fcSDominik Eckelmann        return '';
97e840d0fcSDominik Eckelmann    }
98e840d0fcSDominik Eckelmann
99e840d0fcSDominik Eckelmann    /**
100e840d0fcSDominik Eckelmann     * order by quality
101e840d0fcSDominik Eckelmann     */
102e840d0fcSDominik Eckelmann    function sortQuality($a, $b) {
103e840d0fcSDominik Eckelmann        if($a['score'] == $b['score']) return 0;
104e840d0fcSDominik Eckelmann        return ($a['score'] < $b['score']) ? 1 : -1;
105e840d0fcSDominik Eckelmann    }
106e840d0fcSDominik Eckelmann
107e840d0fcSDominik Eckelmann    /**
108e840d0fcSDominik Eckelmann     * order by fixmes
109e840d0fcSDominik Eckelmann     */
110e840d0fcSDominik Eckelmann    function sortFixme($a, $b) {
111e840d0fcSDominik Eckelmann        if($a['err']['fixme'] == $b['err']['fixme']) return 0;
112e840d0fcSDominik Eckelmann        return ($a['err']['fixme'] < $b['err']['fixme']) ? 1 : -1;
113e840d0fcSDominik Eckelmann    }
114e840d0fcSDominik Eckelmann
115e840d0fcSDominik Eckelmann}
116e840d0fcSDominik Eckelmann
117e840d0fcSDominik Eckelmann?>
118