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