xref: /plugin/combo/ComboStrap/Api/QualityMessageHandler.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeaunamespace ComboStrap\Api;
4*04fd306cSNickeau
5*04fd306cSNickeauuse ComboStrap\ExceptionNotFound;
6*04fd306cSNickeauuse ComboStrap\ExecutionContext;
7*04fd306cSNickeauuse ComboStrap\HttpResponseStatus;
8*04fd306cSNickeauuse ComboStrap\Identity;
9*04fd306cSNickeauuse ComboStrap\Mime;
10*04fd306cSNickeauuse ComboStrap\QualityTag;
11*04fd306cSNickeauuse ComboStrap\WikiPath;
12*04fd306cSNickeauuse dokuwiki\Extension\Event;
13*04fd306cSNickeau
14*04fd306cSNickeau/**
15*04fd306cSNickeau * Return the quality report in HTML
16*04fd306cSNickeau */
17*04fd306cSNickeauclass QualityMessageHandler
18*04fd306cSNickeau{
19*04fd306cSNickeau
20*04fd306cSNickeau    public const CALL_ID = "combo-quality-message";
21*04fd306cSNickeau    public const CANONICAL = "quality:dynamic_monitoring";
22*04fd306cSNickeau
23*04fd306cSNickeau    /**
24*04fd306cSNickeau     * Disable the message totally
25*04fd306cSNickeau     */
26*04fd306cSNickeau    public const CONF_DISABLE_QUALITY_MONITORING = "disableDynamicQualityMonitoring";
27*04fd306cSNickeau    /**
28*04fd306cSNickeau     * The quality rules that will not show
29*04fd306cSNickeau     * up in the messages
30*04fd306cSNickeau     */
31*04fd306cSNickeau    public const CONF_EXCLUDED_QUALITY_RULES_FROM_DYNAMIC_MONITORING = "excludedQualityRulesFromDynamicMonitoring";
32*04fd306cSNickeau
33*04fd306cSNickeau
34*04fd306cSNickeau    public static function handle(Event $event)
35*04fd306cSNickeau    {
36*04fd306cSNickeau
37*04fd306cSNickeau        // no other ajax call handlers needed
38*04fd306cSNickeau        $event->stopPropagation();
39*04fd306cSNickeau        $event->preventDefault();
40*04fd306cSNickeau
41*04fd306cSNickeau        $executingContext = ExecutionContext::getActualOrCreateFromEnv();
42*04fd306cSNickeau
43*04fd306cSNickeau        /**
44*04fd306cSNickeau         * Shared check between post and get HTTP method
45*04fd306cSNickeau         */
46*04fd306cSNickeau        /**
47*04fd306cSNickeau         * Shared check between post and get HTTP method
48*04fd306cSNickeau         */
49*04fd306cSNickeau        try {
50*04fd306cSNickeau            $id = ApiRouter::getRequestParameter("id");
51*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
52*04fd306cSNickeau            $executingContext->response()
53*04fd306cSNickeau                ->setStatus(HttpResponseStatus::BAD_REQUEST)
54*04fd306cSNickeau                ->setEvent($event)
55*04fd306cSNickeau                ->setCanonical(QualityMessageHandler::CANONICAL)
56*04fd306cSNickeau                ->setBody("The page id should not be empty", Mime::getHtml())
57*04fd306cSNickeau                ->end();
58*04fd306cSNickeau            return;
59*04fd306cSNickeau        }
60*04fd306cSNickeau
61*04fd306cSNickeau        /**
62*04fd306cSNickeau         * Quality is just for the writers
63*04fd306cSNickeau         */
64*04fd306cSNickeau        if (!Identity::isWriter($id)) {
65*04fd306cSNickeau            $executingContext->response()
66*04fd306cSNickeau                ->setStatus(HttpResponseStatus::NOT_AUTHORIZED)
67*04fd306cSNickeau                ->setEvent($event)
68*04fd306cSNickeau                ->setBody("Quality is only for writer", Mime::getHtml())
69*04fd306cSNickeau                ->end();
70*04fd306cSNickeau            return;
71*04fd306cSNickeau        }
72*04fd306cSNickeau
73*04fd306cSNickeau
74*04fd306cSNickeau        $markupPath = WikiPath::createMarkupPathFromId($id);
75*04fd306cSNickeau        $message = QualityTag::createQualityReport($markupPath);
76*04fd306cSNickeau        $status = $message->getStatus();
77*04fd306cSNickeau
78*04fd306cSNickeau
79*04fd306cSNickeau        $executingContext->response()
80*04fd306cSNickeau            ->setStatus($status)
81*04fd306cSNickeau            ->setEvent($event)
82*04fd306cSNickeau            ->setCanonical(QualityMessageHandler::CANONICAL)
83*04fd306cSNickeau            ->setBody($message->getContent(), Mime::getHtml())
84*04fd306cSNickeau            ->end();
85*04fd306cSNickeau    }
86*04fd306cSNickeau}
87