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 function __construct() 33 { 34 // enable direct access to language strings 35 // ie $this->lang 36 $this->setupLocale(); 37 } 38 39 40 function register(Doku_Event_Handler $controller) 41 { 42 43 $controller->register_hook( 44 'TPL_ACT_RENDER', 45 'BEFORE', 46 $this, 47 '_displayQualityMessage', 48 array() 49 ); 50 51 52 } 53 54 55 /** 56 * Main function; dispatches the visual comment actions 57 * @param $event Doku_Event 58 */ 59 function _displayQualityMessage(&$event, $param) 60 { 61 if ($event->data == 'show') { 62 63 /** 64 * Quality is just for the writers 65 */ 66 if (!Auth::isWriter()) { 67 return; 68 } 69 70 $note = $this->getQualityNote(PluginUtility::getPageId(), $this); 71 if ($note != null) { 72 ptln($note->getHtml()); 73 } 74 } 75 76 } 77 78 /** 79 * @param $pageId 80 * @param $plugin - Plugin 81 * @return Note|null 82 */ 83 static public function getQualityNote($pageId, $plugin) 84 { 85 $page = new Page($pageId); 86 if ($page->existInFs()) { 87 $analytics = $page->getAnalyticsFromFs(); 88 $qualityInfoRules = $analytics[Analytics::QUALITY][Analytics::RULES][Analytics::INFO]; 89 90 // Excluded rules 91 $excludedRules = array( 92 renderer_plugin_combo_analytics::RULE_AVERAGE_WORDS_BY_SECTION_MIN, 93 renderer_plugin_combo_analytics::RULE_AVERAGE_WORDS_BY_SECTION_MAX 94 ); 95 foreach ($excludedRules as $filter) { 96 if (array_key_exists($filter, $qualityInfoRules)) { 97 unset($qualityInfoRules[$filter]); 98 } 99 } 100 101 if (sizeof($qualityInfoRules) > 0) { 102 103 $qualityScore = $analytics[Analytics::QUALITY][renderer_plugin_combo_analytics::SCORING][renderer_plugin_combo_analytics::SCORE]; 104 $message = new Note($plugin); 105 $message->addContent("<p>Well played, you got a " . PluginUtility::getUrl("quality:score", "quality score") . " of {$qualityScore} !</p>"); 106 $message->addContent("<p>You can still win a couple of points.</p>"); 107 $message->addContent("<ul>"); 108 foreach ($qualityInfoRules as $qualityRule => $qualityInfo) { 109 $message->addContent("<li>"); 110 $message->addContent($qualityInfo); 111 $message->addContent("</li>"); 112 } 113 $message->addContent("</ul>"); 114 115 $message->setSignatureCanonical("quality:dynamic_monitoring"); 116 $message->setSignatureName("Quality Dynamic Monitoring Feature"); 117 $message->setType(Note::TYPE_CLASSIC); 118 $message->setClass(self::QUALITY_BOX_CLASS); 119 return $message; 120 121 122 } 123 } 124 return null; 125 } 126 127 128} 129