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 if ($page->existInFs()) { 97 $analytics = $page->getAnalyticsFromFs(); 98 $rules = $analytics[Analytics::QUALITY][Analytics::RULES]; 99 100 /** 101 * If there is no info, nothing to show 102 */ 103 if (!array_key_exists(Analytics::INFO, $rules)) { 104 return null; 105 } 106 107 /** 108 * The error info 109 */ 110 $qualityInfoRules = $rules[Analytics::INFO]; 111 112 /** 113 * Excluding the excluded rules 114 */ 115 global $conf; 116 $excludedRulesConf = $conf['plugin'][PluginUtility::PLUGIN_BASE_NAME][self::CONF_EXCLUDED_QUALITY_RULES_FROM_DYNAMIC_MONITORING]; 117 $excludedRules = preg_split("/,/", $excludedRulesConf); 118 foreach ($excludedRules as $excludedRule) { 119 if (array_key_exists($excludedRule, $qualityInfoRules)) { 120 unset($qualityInfoRules[$excludedRule]); 121 } 122 } 123 124 if (sizeof($qualityInfoRules) > 0) { 125 126 $qualityScore = $analytics[Analytics::QUALITY][renderer_plugin_combo_analytics::SCORING][renderer_plugin_combo_analytics::SCORE]; 127 $message = new Note($plugin); 128 $message->addContent("<p>Well played, you got a " . PluginUtility::getUrl("quality:score", "quality score") . " of {$qualityScore} !</p>"); 129 if ($page->isLowQualityPage()) { 130 $analytics = $page->getAnalyticsFromFs(true); 131 $mandatoryFailedRules = $analytics[Analytics::QUALITY][Analytics::FAILED_MANDATORY_RULES]; 132 $rulesUrl = PluginUtility::getUrl("quality:rule", "rules"); 133 $lqPageUrl = PluginUtility::getUrl("low_quality_page", "low quality page"); 134 $message->addContent("<div class='alert alert-info'>This is a {$lqPageUrl} because it has failed the following mandatory {$rulesUrl}:"); 135 $message->addContent("<ul style='margin-bottom: 0'>"); 136 137 foreach ($mandatoryFailedRules as $mandatoryFailedRule) { 138 $message->addContent("<li>".PluginUtility::getUrl("quality:rule#list", $mandatoryFailedRule)."</li>"); 139 } 140 $message->addContent("</ul>"); 141 $message->addContent("</div>"); 142 } 143 $message->addContent("<p>You can still win a couple of points.</p>"); 144 $message->addContent("<ul>"); 145 foreach ($qualityInfoRules as $qualityRule => $qualityInfo) { 146 $message->addContent("<li>"); 147 $message->addContent($qualityInfo); 148 $message->addContent("</li>"); 149 } 150 $message->addContent("</ul>"); 151 152 $message->setSignatureCanonical("quality:dynamic_monitoring"); 153 $message->setSignatureName("Quality Dynamic Monitoring Feature"); 154 $message->setType(Note::TYPE_CLASSIC); 155 $message->setClass(self::QUALITY_BOX_CLASS); 156 return $message; 157 158 159 } 160 } 161 return null; 162 } 163 164 165} 166