1e840d0fcSDominik Eckelmann<?php 276bbc49cSAnna Dabrowska 32fc45e0cSsplitbrainuse dokuwiki\Extension\AdminPlugin; 42fc45e0cSsplitbrainuse dokuwiki\plugin\qc\Output; 52fc45e0cSsplitbrain 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 */ 122fc45e0cSsplitbrainclass admin_plugin_qc extends AdminPlugin 1376bbc49cSAnna Dabrowska{ 14293182bbSAnna Dabrowska protected $data; 15293182bbSAnna Dabrowska protected $order; 16e840d0fcSDominik Eckelmann 178ae469bfSAndreas Gohr /** @inheritdoc */ 18293182bbSAnna Dabrowska public function forAdminOnly() 1976bbc49cSAnna Dabrowska { 201c845774SAndreas Gohr return false; 211c845774SAndreas Gohr } 22e840d0fcSDominik Eckelmann 238ae469bfSAndreas Gohr /** @inheritDoc */ 2476bbc49cSAnna Dabrowska public function getMenuIcon() 2576bbc49cSAnna Dabrowska { 261278cd14SAndreas Gohr return __DIR__ . '/svg/good.svg'; 271278cd14SAndreas Gohr } 281278cd14SAndreas Gohr 298ae469bfSAndreas Gohr /** @inheritdoc */ 30293182bbSAnna Dabrowska public function handle() 3176bbc49cSAnna Dabrowska { 32e840d0fcSDominik Eckelmann global $conf; 33e840d0fcSDominik Eckelmann 34e840d0fcSDominik Eckelmann // load the quality data 35e840d0fcSDominik Eckelmann if (is_file($conf['tmpdir'] . '/qcgather')) { 366daa3650SDominik Eckelmann $this->data = file_get_contents($conf['tmpdir'] . '/qcgather'); 37e840d0fcSDominik Eckelmann $this->data = unserialize($this->data); 38e840d0fcSDominik Eckelmann } else { 392fc45e0cSsplitbrain $this->data = []; 40e840d0fcSDominik Eckelmann } 41e840d0fcSDominik Eckelmann 42e840d0fcSDominik Eckelmann // order the data 43e840d0fcSDominik Eckelmann if (!isset($_REQUEST['pluginqc']['order'])) { 44e840d0fcSDominik Eckelmann $_REQUEST['pluginqc']['order'] = 'quality'; 45e840d0fcSDominik Eckelmann } 46e840d0fcSDominik Eckelmann 47e840d0fcSDominik Eckelmann switch ($_REQUEST['pluginqc']['order']) { 48e840d0fcSDominik Eckelmann case 'fixme': 492fc45e0cSsplitbrain uasort($this->data, [$this, 'sortFixme']); 50e840d0fcSDominik Eckelmann $this->order = 'fixme'; 51e840d0fcSDominik Eckelmann break; 52e840d0fcSDominik Eckelmann default: 532fc45e0cSsplitbrain uasort($this->data, [$this, 'sortQuality']); 54e840d0fcSDominik Eckelmann $this->order = 'quality'; 55e840d0fcSDominik Eckelmann } 56e840d0fcSDominik Eckelmann } 57e840d0fcSDominik Eckelmann 588ae469bfSAndreas Gohr /** @inheritdoc */ 59293182bbSAnna Dabrowska public function html() 6076bbc49cSAnna Dabrowska { 61e840d0fcSDominik Eckelmann global $ID; 62e840d0fcSDominik Eckelmann $max = $this->getConf('maxshowen'); 63e840d0fcSDominik Eckelmann if (!$max || $max <= 0) $max = 25; 64e840d0fcSDominik Eckelmann 65e840d0fcSDominik Eckelmann echo '<div id="plugin__qc_admin">'; 66e840d0fcSDominik Eckelmann echo '<h1>' . $this->getLang('admin_headline') . '</h1>'; 67e840d0fcSDominik Eckelmann 68e840d0fcSDominik Eckelmann echo '<p>' . sprintf($this->getLang('admin_desc'), $max) . '</p>'; 69e840d0fcSDominik Eckelmann 70e840d0fcSDominik Eckelmann echo '<table class="inline">'; 71e840d0fcSDominik Eckelmann echo ' <tr>'; 72e840d0fcSDominik Eckelmann echo ' <th>' . $this->getLang('admin_page') . '</th>'; 73*c8d45e58SAndreas Gohr echo ' <th class="quality">' . $this->getOrderArrow('quality') . 74*c8d45e58SAndreas Gohr '<a href="' . wl($ID, ['do' => 'admin', 'page' => 'qc', 'pluginqc[order]' => 'quality']) . '">' . 75*c8d45e58SAndreas Gohr $this->getLang('admin_quality') . '</a></th>'; 76*c8d45e58SAndreas Gohr echo ' <th class="fixme">' . $this->getOrderArrow('fixme') . 77*c8d45e58SAndreas Gohr '<a href="' . wl($ID, ['do' => 'admin', 'page' => 'qc', 'pluginqc[order]' => 'fixme']) . '">' . 78*c8d45e58SAndreas Gohr $this->getLang('admin_fixme') . '</a></th>'; 79e840d0fcSDominik Eckelmann echo ' </tr>'; 80e840d0fcSDominik Eckelmann 81e840d0fcSDominik Eckelmann if ($this->data) { 82e840d0fcSDominik Eckelmann foreach ($this->data as $id => $data) { 83e840d0fcSDominik Eckelmann if ($max == 0) break; 84e840d0fcSDominik Eckelmann echo ' <tr>'; 85e840d0fcSDominik Eckelmann echo ' <td>'; 86bebdce60SAdrian Lang tpl_pagelink(':' . $id, $id); 87e840d0fcSDominik Eckelmann echo '</td>'; 882fc45e0cSsplitbrain echo ' <td class="centeralign">' . Output::scoreIcon($data['score']) . '</td>'; 89e840d0fcSDominik Eckelmann echo ' <td class="centeralign">' . $data['err']['fixme'] . '</td>'; 90e840d0fcSDominik Eckelmann echo ' </tr>'; 91e840d0fcSDominik Eckelmann $max--; 92e840d0fcSDominik Eckelmann } 93e840d0fcSDominik Eckelmann } 94e840d0fcSDominik Eckelmann 95e840d0fcSDominik Eckelmann echo '</table>'; 96e840d0fcSDominik Eckelmann echo '</div>'; 97e840d0fcSDominik Eckelmann } 98e840d0fcSDominik Eckelmann 998ae469bfSAndreas Gohr /** 1008ae469bfSAndreas Gohr * return an arrow if currently sorted by this type 1018ae469bfSAndreas Gohr * 1028ae469bfSAndreas Gohr * @ return string 1038ae469bfSAndreas Gohr */ 104293182bbSAnna Dabrowska protected function getOrderArrow($type) 10576bbc49cSAnna Dabrowska { 106e840d0fcSDominik Eckelmann if ($type == $this->order) return '↓ '; 107e840d0fcSDominik Eckelmann return ''; 108e840d0fcSDominik Eckelmann } 109e840d0fcSDominik Eckelmann 110e840d0fcSDominik Eckelmann /** 111e840d0fcSDominik Eckelmann * order by quality 112e840d0fcSDominik Eckelmann */ 113293182bbSAnna Dabrowska protected function sortQuality($a, $b) 11476bbc49cSAnna Dabrowska { 1152fc45e0cSsplitbrain return $b['score'] <=> $a['score']; 116e840d0fcSDominik Eckelmann } 117e840d0fcSDominik Eckelmann 118e840d0fcSDominik Eckelmann /** 119e840d0fcSDominik Eckelmann * order by fixmes 120e840d0fcSDominik Eckelmann */ 121293182bbSAnna Dabrowska protected function sortFixme($a, $b) 12276bbc49cSAnna Dabrowska { 1232fc45e0cSsplitbrain return $b['err']['fixme'] <=> $a['err']['fixme']; 124e840d0fcSDominik Eckelmann } 125e840d0fcSDominik Eckelmann} 126