1*e840d0fcSDominik Eckelmann<?php 2*e840d0fcSDominik Eckelmannif(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); 3*e840d0fcSDominik Eckelmannif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 4*e840d0fcSDominik Eckelmann 5*e840d0fcSDominik Eckelmannrequire_once(DOKU_PLUGIN.'admin.php'); 6*e840d0fcSDominik Eckelmannrequire_once(DOKU_INC.'inc/pageutils.php'); 7*e840d0fcSDominik Eckelmannrequire_once(DOKU_INC.'inc/io.php'); 8*e840d0fcSDominik Eckelmannrequire_once(DOKU_INC.'inc/common.php'); 9*e840d0fcSDominik Eckelmann 10*e840d0fcSDominik Eckelmann/** 11*e840d0fcSDominik Eckelmann * This plugin is used to display a summery of all FIXME pages 12*e840d0fcSDominik Eckelmann * 13*e840d0fcSDominik Eckelmann * @see http://dokuwiki.org/plugin:qc 14*e840d0fcSDominik Eckelmann * @author Dominik Eckelmann <dokuwiki@cosmocode.de> 15*e840d0fcSDominik Eckelmann */ 16*e840d0fcSDominik Eckelmannclass admin_plugin_qc extends DokuWiki_Admin_Plugin { 17*e840d0fcSDominik Eckelmann 18*e840d0fcSDominik Eckelmann var $data; 19*e840d0fcSDominik Eckelmann var $order; 20*e840d0fcSDominik Eckelmann 21*e840d0fcSDominik Eckelmann function getMenuSort() { return 999; } 22*e840d0fcSDominik Eckelmann function forAdminOnly() { return false; } 23*e840d0fcSDominik Eckelmann 24*e840d0fcSDominik Eckelmann /** 25*e840d0fcSDominik Eckelmann * handle the request befor html output 26*e840d0fcSDominik Eckelmann * 27*e840d0fcSDominik Eckelmann * @see html() 28*e840d0fcSDominik Eckelmann */ 29*e840d0fcSDominik Eckelmann function handle() { 30*e840d0fcSDominik Eckelmann global $conf; 31*e840d0fcSDominik Eckelmann 32*e840d0fcSDominik Eckelmann // load the quality data 33*e840d0fcSDominik Eckelmann if (is_file($conf['tmpdir'].'/qcgather')) { 34*e840d0fcSDominik Eckelmann $this->data = io_readFile($conf['tmpdir'].'/qcgather'); 35*e840d0fcSDominik Eckelmann $this->data = unserialize($this->data); 36*e840d0fcSDominik Eckelmann } else { 37*e840d0fcSDominik Eckelmann $this->data = array(); 38*e840d0fcSDominik Eckelmann } 39*e840d0fcSDominik Eckelmann 40*e840d0fcSDominik Eckelmann // order the data 41*e840d0fcSDominik Eckelmann if (!isset($_REQUEST['pluginqc']['order'])) { 42*e840d0fcSDominik Eckelmann $_REQUEST['pluginqc']['order'] = 'quality'; 43*e840d0fcSDominik Eckelmann } 44*e840d0fcSDominik Eckelmann 45*e840d0fcSDominik Eckelmann switch ($_REQUEST['pluginqc']['order']) { 46*e840d0fcSDominik Eckelmann case 'fixme': 47*e840d0fcSDominik Eckelmann uasort($this->data, array($this, 'sortFixme')); 48*e840d0fcSDominik Eckelmann $this->order = 'fixme'; 49*e840d0fcSDominik Eckelmann break; 50*e840d0fcSDominik Eckelmann default: 51*e840d0fcSDominik Eckelmann uasort($this->data, array($this, 'sortQuality')); 52*e840d0fcSDominik Eckelmann $this->order = 'quality'; 53*e840d0fcSDominik Eckelmann } 54*e840d0fcSDominik Eckelmann } 55*e840d0fcSDominik Eckelmann 56*e840d0fcSDominik Eckelmann /** 57*e840d0fcSDominik Eckelmann * output html for the admin page 58*e840d0fcSDominik Eckelmann */ 59*e840d0fcSDominik Eckelmann function html() { 60*e840d0fcSDominik Eckelmann global $ID; 61*e840d0fcSDominik Eckelmann $max = $this->getConf('maxshowen'); 62*e840d0fcSDominik Eckelmann if (!$max || $max <= 0) $max = 25; 63*e840d0fcSDominik Eckelmann 64*e840d0fcSDominik Eckelmann echo '<div id="plugin__qc_admin">'; 65*e840d0fcSDominik Eckelmann echo '<h1>'.$this->getLang('admin_headline').'</h1>'; 66*e840d0fcSDominik Eckelmann 67*e840d0fcSDominik Eckelmann echo '<p>'.sprintf($this->getLang('admin_desc'),$max).'</p>'; 68*e840d0fcSDominik Eckelmann 69*e840d0fcSDominik Eckelmann echo '<table class="inline">'; 70*e840d0fcSDominik Eckelmann echo ' <tr>'; 71*e840d0fcSDominik Eckelmann echo ' <th>'.$this->getLang('admin_page').'</th>'; 72*e840d0fcSDominik 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>'; 73*e840d0fcSDominik 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>'; 74*e840d0fcSDominik Eckelmann echo ' </tr>'; 75*e840d0fcSDominik Eckelmann 76*e840d0fcSDominik Eckelmann if ($this->data) { 77*e840d0fcSDominik Eckelmann foreach ($this->data as $id => $data) { 78*e840d0fcSDominik Eckelmann if ($max == 0) break; 79*e840d0fcSDominik Eckelmann echo ' <tr>'; 80*e840d0fcSDominik Eckelmann echo ' <td>'; 81*e840d0fcSDominik Eckelmann tpl_pagelink($id, $id); 82*e840d0fcSDominik Eckelmann echo '</td>'; 83*e840d0fcSDominik Eckelmann echo ' <td class="centeralign">' . $data['score'] . ' <img src="'. $this->getImgUrl($data['score']) .'" /></td>'; 84*e840d0fcSDominik Eckelmann echo ' <td class="centeralign">' . $data['err']['fixme'] . '</td>'; 85*e840d0fcSDominik Eckelmann echo ' </tr>'; 86*e840d0fcSDominik Eckelmann $max--; 87*e840d0fcSDominik Eckelmann } 88*e840d0fcSDominik Eckelmann } 89*e840d0fcSDominik Eckelmann 90*e840d0fcSDominik Eckelmann echo '</table>'; 91*e840d0fcSDominik Eckelmann echo '</div>'; 92*e840d0fcSDominik Eckelmann } 93*e840d0fcSDominik Eckelmann 94*e840d0fcSDominik Eckelmann function getOrderArrow($type) { 95*e840d0fcSDominik Eckelmann if ($type == $this->order) return '↓ '; 96*e840d0fcSDominik Eckelmann return ''; 97*e840d0fcSDominik Eckelmann } 98*e840d0fcSDominik Eckelmann 99*e840d0fcSDominik Eckelmann function getImgUrl($score, $return = true) { 100*e840d0fcSDominik Eckelmann $maxerr = 10; 101*e840d0fcSDominik Eckelmann if ($score > $maxerr) { 102*e840d0fcSDominik Eckelmann $ico = DOKU_BASE . 'lib/plugins/qc/pix/'.$this->getConf('theme').'/status_red.png'; 103*e840d0fcSDominik Eckelmann } elseif($score) { 104*e840d0fcSDominik Eckelmann $ico = DOKU_BASE . 'lib/plugins/qc/pix/'.$this->getConf('theme').'/status_yellow.png'; 105*e840d0fcSDominik Eckelmann } else { 106*e840d0fcSDominik Eckelmann $ico = DOKU_BASE . 'lib/plugins/qc/pix/'.$this->getConf('theme').'/status_green.png'; 107*e840d0fcSDominik Eckelmann } 108*e840d0fcSDominik Eckelmann if ($return) return $ico; 109*e840d0fcSDominik Eckelmann echo $ico; 110*e840d0fcSDominik Eckelmann } 111*e840d0fcSDominik Eckelmann 112*e840d0fcSDominik Eckelmann /** 113*e840d0fcSDominik Eckelmann * order by quality 114*e840d0fcSDominik Eckelmann */ 115*e840d0fcSDominik Eckelmann function sortQuality($a, $b) { 116*e840d0fcSDominik Eckelmann if ($a['score'] == $b['score']) return 0; 117*e840d0fcSDominik Eckelmann return ($a['score'] < $b['score']) ? 1 : -1; 118*e840d0fcSDominik Eckelmann } 119*e840d0fcSDominik Eckelmann 120*e840d0fcSDominik Eckelmann /** 121*e840d0fcSDominik Eckelmann * order by fixmes 122*e840d0fcSDominik Eckelmann */ 123*e840d0fcSDominik Eckelmann function sortFixme($a, $b) { 124*e840d0fcSDominik Eckelmann if ($a['err']['fixme'] == $b['err']['fixme']) return 0; 125*e840d0fcSDominik Eckelmann return ($a['err']['fixme'] < $b['err']['fixme']) ? 1 : -1; 126*e840d0fcSDominik Eckelmann } 127*e840d0fcSDominik Eckelmann 128*e840d0fcSDominik Eckelmann} 129*e840d0fcSDominik Eckelmann 130*e840d0fcSDominik Eckelmann?> 131