1<?php 2 3use ComboStrap\Analytics; 4use ComboStrap\Auth; 5use ComboStrap\LogUtility; 6use ComboStrap\Note; 7use ComboStrap\Page; 8use ComboStrap\PagesIndex; 9use ComboStrap\PluginUtility; 10 11if (!defined('DOKU_INC')) die(); 12if (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/'); 13 14 15require_once(__DIR__ . '/../class/Page.php'); 16require_once(__DIR__ . '/../class/Note.php'); 17 18/** 19 * 20 * Show a quality message 21 * 22 * 23 * 24 */ 25class action_plugin_combo_qualitymessage extends DokuWiki_Action_Plugin 26{ 27 28 // a class can not start with a number 29 const QUALITY_BOX_CLASS = "quality-message"; 30 31 /** 32 * The quality rules that will not show 33 * up in the messages 34 */ 35 const CONF_EXCLUDED_QUALITY_RULES_FROM_DYNAMIC_MONITORING = "excludedQualityRulesFromDynamicMonitoring"; 36 37 38 function __construct() 39 { 40 // enable direct access to language strings 41 // ie $this->lang 42 $this->setupLocale(); 43 } 44 45 46 function register(Doku_Event_Handler $controller) 47 { 48 49 $controller->register_hook( 50 'TPL_ACT_RENDER', 51 'BEFORE', 52 $this, 53 '_displayQualityMessage', 54 array() 55 ); 56 57 58 } 59 60 61 /** 62 * Main function; dispatches the visual comment actions 63 * @param $event Doku_Event 64 */ 65 function _displayQualityMessage(&$event, $param) 66 { 67 if ($event->data == 'show') { 68 69 /** 70 * Quality is just for the writers 71 */ 72 if (!Auth::isWriter()) { 73 return; 74 } 75 76 $note = $this->createQualityNote(PluginUtility::getPageId(), $this); 77 if ($note != null) { 78 ptln($note->getHtml()); 79 } 80 } 81 82 } 83 84 /** 85 * @param $pageId 86 * @param $plugin - Plugin 87 * @return Note|null 88 */ 89 static public function createQualityNote($pageId, $plugin) 90 { 91 $page = new Page($pageId); 92 93 if ($page->isBar()) { 94 return null; 95 } 96 97 if ($page->existInFs()) { 98 $analytics = $page->getAnalyticsFromFs(); 99 $rules = $analytics[Analytics::QUALITY][Analytics::RULES]; 100 101 /** 102 * If there is no info, nothing to show 103 */ 104 if (!array_key_exists(Analytics::INFO, $rules)) { 105 return null; 106 } 107 108 /** 109 * The error info 110 */ 111 $qualityInfoRules = $rules[Analytics::INFO]; 112 113 /** 114 * Excluding the excluded rules 115 */ 116 global $conf; 117 $excludedRulesConf = $conf['plugin'][PluginUtility::PLUGIN_BASE_NAME][self::CONF_EXCLUDED_QUALITY_RULES_FROM_DYNAMIC_MONITORING]; 118 $excludedRules = preg_split("/,/", $excludedRulesConf); 119 foreach ($excludedRules as $excludedRule) { 120 if (array_key_exists($excludedRule, $qualityInfoRules)) { 121 unset($qualityInfoRules[$excludedRule]); 122 } 123 } 124 125 if (sizeof($qualityInfoRules) > 0) { 126 127 $qualityScore = $analytics[Analytics::QUALITY][renderer_plugin_combo_analytics::SCORING][renderer_plugin_combo_analytics::SCORE]; 128 $message = new Note($plugin); 129 $message->addContent("<p>Well played, you got a " . PluginUtility::getUrl("quality:score", "quality score") . " of {$qualityScore} !</p>"); 130 if ($page->isLowQualityPage()) { 131 $analytics = $page->getAnalyticsFromFs(true); 132 $mandatoryFailedRules = $analytics[Analytics::QUALITY][Analytics::FAILED_MANDATORY_RULES]; 133 $rulesUrl = PluginUtility::getUrl("quality:rule", "rules"); 134 $lqPageUrl = PluginUtility::getUrl("low_quality_page", "low quality page"); 135 $message->addContent("<div class='alert alert-info'>This is a {$lqPageUrl} because it has failed the following mandatory {$rulesUrl}:"); 136 $message->addContent("<ul style='margin-bottom: 0'>"); 137 138 foreach ($mandatoryFailedRules as $mandatoryFailedRule) { 139 $message->addContent("<li>".PluginUtility::getUrl("quality:rule#list", $mandatoryFailedRule)."</li>"); 140 } 141 $message->addContent("</ul>"); 142 $message->addContent("</div>"); 143 } 144 $message->addContent("<p>You can still win a couple of points.</p>"); 145 $message->addContent("<ul>"); 146 foreach ($qualityInfoRules as $qualityRule => $qualityInfo) { 147 $message->addContent("<li>"); 148 $message->addContent($qualityInfo); 149 $message->addContent("</li>"); 150 } 151 $message->addContent("</ul>"); 152 153 $message->setSignatureCanonical("quality:dynamic_monitoring"); 154 $message->setSignatureName("Quality Dynamic Monitoring Feature"); 155 $message->setType(Note::TYPE_CLASSIC); 156 $message->setClass(self::QUALITY_BOX_CLASS); 157 return $message; 158 159 160 } 161 } 162 return null; 163 } 164 165 166} 167