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