xref: /plugin/combo/action/qualitymessage.php (revision 9b9e6d1fd4c31e9d70c96490a12e4d7445d392eb)
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