108ca4f85Sgerardnico<?php 208ca4f85Sgerardnico 308ca4f85Sgerardnicouse ComboStrap\Analytics; 4*d262537cSgerardnicouse ComboStrap\Auth; 508ca4f85Sgerardnicouse ComboStrap\LogUtility; 6*d262537cSgerardnicouse ComboStrap\Note; 708ca4f85Sgerardnicouse ComboStrap\Page; 808ca4f85Sgerardnicouse ComboStrap\PagesIndex; 908ca4f85Sgerardnicouse ComboStrap\PluginUtility; 1008ca4f85Sgerardnico 1108ca4f85Sgerardnicoif (!defined('DOKU_INC')) die(); 1208ca4f85Sgerardnicoif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/'); 1308ca4f85Sgerardnico 1408ca4f85Sgerardnico 1508ca4f85Sgerardnicorequire_once(__DIR__ . '/../class/Page.php'); 16*d262537cSgerardnicorequire_once(__DIR__ . '/../class/Note.php'); 1708ca4f85Sgerardnico 1808ca4f85Sgerardnico/** 1908ca4f85Sgerardnico * 2008ca4f85Sgerardnico * Show a quality message 2108ca4f85Sgerardnico * 2208ca4f85Sgerardnico * 2308ca4f85Sgerardnico * 2408ca4f85Sgerardnico */ 2508ca4f85Sgerardnicoclass action_plugin_combo_qualitymessage extends DokuWiki_Action_Plugin 2608ca4f85Sgerardnico{ 2708ca4f85Sgerardnico 2808ca4f85Sgerardnico // a class can not start with a number 2908ca4f85Sgerardnico const QUALITY_BOX_CLASS = "quality-message"; 3008ca4f85Sgerardnico 3108ca4f85Sgerardnico 3208ca4f85Sgerardnico function __construct() 3308ca4f85Sgerardnico { 3408ca4f85Sgerardnico // enable direct access to language strings 3508ca4f85Sgerardnico // ie $this->lang 3608ca4f85Sgerardnico $this->setupLocale(); 3708ca4f85Sgerardnico } 3808ca4f85Sgerardnico 3908ca4f85Sgerardnico 4008ca4f85Sgerardnico function register(Doku_Event_Handler $controller) 4108ca4f85Sgerardnico { 4208ca4f85Sgerardnico 4308ca4f85Sgerardnico $controller->register_hook( 4408ca4f85Sgerardnico 'TPL_ACT_RENDER', 4508ca4f85Sgerardnico 'BEFORE', 4608ca4f85Sgerardnico $this, 4708ca4f85Sgerardnico '_displayQualityMessage', 4808ca4f85Sgerardnico array() 4908ca4f85Sgerardnico ); 5008ca4f85Sgerardnico 5108ca4f85Sgerardnico 5208ca4f85Sgerardnico } 5308ca4f85Sgerardnico 5408ca4f85Sgerardnico 5508ca4f85Sgerardnico /** 5608ca4f85Sgerardnico * Main function; dispatches the visual comment actions 5708ca4f85Sgerardnico * @param $event Doku_Event 5808ca4f85Sgerardnico */ 5908ca4f85Sgerardnico function _displayQualityMessage(&$event, $param) 6008ca4f85Sgerardnico { 6108ca4f85Sgerardnico if ($event->data == 'show') { 62*d262537cSgerardnico 63*d262537cSgerardnico /** 64*d262537cSgerardnico * Quality is just for the writers 65*d262537cSgerardnico */ 66*d262537cSgerardnico if (!Auth::isWriter()) { 67*d262537cSgerardnico return; 68*d262537cSgerardnico } 69*d262537cSgerardnico 70*d262537cSgerardnico $note = $this->getQualityNote(PluginUtility::getPageId(), $this); 71*d262537cSgerardnico if ($note != null) { 72*d262537cSgerardnico ptln($note->getHtml()); 73*d262537cSgerardnico } 74*d262537cSgerardnico } 75*d262537cSgerardnico 76*d262537cSgerardnico } 77*d262537cSgerardnico 78*d262537cSgerardnico /** 79*d262537cSgerardnico * @param $pageId 80*d262537cSgerardnico * @param $plugin - Plugin 81*d262537cSgerardnico * @return Note|null 82*d262537cSgerardnico */ 83*d262537cSgerardnico static public function getQualityNote($pageId, $plugin) 84*d262537cSgerardnico { 85*d262537cSgerardnico $page = new Page($pageId); 86*d262537cSgerardnico if ($page->existInFs()) { 8708ca4f85Sgerardnico $analytics = $page->getAnalyticsFromFs(); 8808ca4f85Sgerardnico $qualityInfoRules = $analytics[Analytics::QUALITY][Analytics::RULES][Analytics::INFO]; 8908ca4f85Sgerardnico 9008ca4f85Sgerardnico // Excluded rules 9108ca4f85Sgerardnico $excludedRules = array( 9208ca4f85Sgerardnico renderer_plugin_combo_analytics::RULE_AVERAGE_WORDS_BY_SECTION_MIN, 9308ca4f85Sgerardnico renderer_plugin_combo_analytics::RULE_AVERAGE_WORDS_BY_SECTION_MAX 9408ca4f85Sgerardnico ); 9508ca4f85Sgerardnico foreach ($excludedRules as $filter) { 9608ca4f85Sgerardnico if (array_key_exists($filter, $qualityInfoRules)) { 9708ca4f85Sgerardnico unset($qualityInfoRules[$filter]); 9808ca4f85Sgerardnico } 9908ca4f85Sgerardnico } 10008ca4f85Sgerardnico 10108ca4f85Sgerardnico if (sizeof($qualityInfoRules) > 0) { 10208ca4f85Sgerardnico 10308ca4f85Sgerardnico $qualityScore = $analytics[Analytics::QUALITY][renderer_plugin_combo_analytics::SCORING][renderer_plugin_combo_analytics::SCORE]; 104*d262537cSgerardnico $message = new Note($plugin); 105*d262537cSgerardnico $message->addContent("<p>Well played, you got a " . PluginUtility::getUrl("quality:score", "quality score") . " of {$qualityScore} !</p>"); 10608ca4f85Sgerardnico $message->addContent("<p>You can still win a couple of points.</p>"); 10708ca4f85Sgerardnico $message->addContent("<ul>"); 10808ca4f85Sgerardnico foreach ($qualityInfoRules as $qualityRule => $qualityInfo) { 10908ca4f85Sgerardnico $message->addContent("<li>"); 11008ca4f85Sgerardnico $message->addContent($qualityInfo); 11108ca4f85Sgerardnico $message->addContent("</li>"); 11208ca4f85Sgerardnico } 11308ca4f85Sgerardnico $message->addContent("</ul>"); 11408ca4f85Sgerardnico 115*d262537cSgerardnico $message->setSignatureCanonical("quality:dynamic_monitoring"); 116*d262537cSgerardnico $message->setSignatureName("Quality Dynamic Monitoring Feature"); 117*d262537cSgerardnico $message->setType(Note::TYPE_CLASSIC); 11808ca4f85Sgerardnico $message->setClass(self::QUALITY_BOX_CLASS); 119*d262537cSgerardnico return $message; 12008ca4f85Sgerardnico 12108ca4f85Sgerardnico 12208ca4f85Sgerardnico } 12308ca4f85Sgerardnico } 124*d262537cSgerardnico return null; 12508ca4f85Sgerardnico } 12608ca4f85Sgerardnico 12708ca4f85Sgerardnico 12808ca4f85Sgerardnico} 129