xref: /template/strap/action/qualitymessage.php (revision d262537c0e3e167c29541034d59d4a6edf2ffecf)
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