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 '↓ '; 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