xref: /plugin/combo/action/qualitymessage.php (revision aa3cb38f16c718b4f409afba33b2d5efdbe0760a)
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->getQualityNote(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 getQualityNote($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                    foreach ($mandatoryFailedRules as $mandatoryFailedRule) {
137                        $message->addContent("<li>{$mandatoryFailedRule}</li>");
138                    }
139                    $message->addContent("</ul>");
140                    $message->addContent("</div>");
141                }
142                $message->addContent("<p>You can still win a couple of points.</p>");
143                $message->addContent("<ul>");
144                foreach ($qualityInfoRules as $qualityRule => $qualityInfo) {
145                    $message->addContent("<li>");
146                    $message->addContent($qualityInfo);
147                    $message->addContent("</li>");
148                }
149                $message->addContent("</ul>");
150
151                $message->setSignatureCanonical("quality:dynamic_monitoring");
152                $message->setSignatureName("Quality Dynamic Monitoring Feature");
153                $message->setType(Note::TYPE_CLASSIC);
154                $message->setClass(self::QUALITY_BOX_CLASS);
155                return $message;
156
157
158            }
159        }
160        return null;
161    }
162
163
164}
165