xref: /template/strap/action/qualitymessage.php (revision 722648ea66ebf5492a297f883b2890d60f7e9bfa)
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                if ($page->isLowQualityPage()) {
107                    $analytics = $page->getAnalyticsFromFs(true);
108                    $mandatoryFailedRules = $analytics[Analytics::QUALITY][Analytics::FAILED_MANDATORY_RULES];
109                    $rulesUrl = PluginUtility::getUrl("quality:rule", "rules");
110                    $lqPageUrl = PluginUtility::getUrl("low_quality_page", "low quality page");
111                    $message->addContent("<div class='alert alert-info'>This is a {$lqPageUrl} because it has failed the following mandatory {$rulesUrl}:");
112                    $message->addContent("<ul style='margin-bottom: 0'>");
113                    foreach ($mandatoryFailedRules as $mandatoryFailedRule){
114                        $message->addContent("<li>{$mandatoryFailedRule}</li>");
115                    }
116                    $message->addContent("</ul>");
117                    $message->addContent("</div>");
118                }
119                $message->addContent("<p>You can still win a couple of points.</p>");
120                $message->addContent("<ul>");
121                foreach ($qualityInfoRules as $qualityRule => $qualityInfo) {
122                    $message->addContent("<li>");
123                    $message->addContent($qualityInfo);
124                    $message->addContent("</li>");
125                }
126                $message->addContent("</ul>");
127
128                $message->setSignatureCanonical("quality:dynamic_monitoring");
129                $message->setSignatureName("Quality Dynamic Monitoring Feature");
130                $message->setType(Note::TYPE_CLASSIC);
131                $message->setClass(self::QUALITY_BOX_CLASS);
132                return $message;
133
134
135            }
136        }
137        return null;
138    }
139
140
141}
142