xref: /template/strap/ComboStrap/LowQualityCalculatedIndicator.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1c3437056SNickeau<?php
2c3437056SNickeau
3c3437056SNickeau
4c3437056SNickeaunamespace ComboStrap;
5c3437056SNickeau
6c3437056SNickeau
7*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata;
8*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataBoolean;
9*04fd306cSNickeauuse renderer_plugin_combo_analytics;
10*04fd306cSNickeau
11c3437056SNickeauclass LowQualityCalculatedIndicator extends MetadataBoolean
12c3437056SNickeau{
13c3437056SNickeau
14*04fd306cSNickeau    public const PROPERTY_NAME = "low_quality_indicator_calculated";
15c3437056SNickeau
16*04fd306cSNickeau    public static function createFromPage(MarkupPath $page)
17c3437056SNickeau    {
18c3437056SNickeau        return (new LowQualityCalculatedIndicator())
19c3437056SNickeau            ->setResource($page);
20c3437056SNickeau    }
21c3437056SNickeau
22*04fd306cSNickeau    public static function getTab(): ?string
23c3437056SNickeau    {
24c3437056SNickeau        // not in a form
25c3437056SNickeau        return null;
26c3437056SNickeau    }
27c3437056SNickeau
28*04fd306cSNickeau    public static function getDescription(): string
29c3437056SNickeau    {
30c3437056SNickeau        return "The indicator calculated by the analytics process that tells if a page is of a low quality";
31c3437056SNickeau    }
32c3437056SNickeau
33*04fd306cSNickeau    public function getValue(): bool
34c3437056SNickeau    {
35*04fd306cSNickeau
36*04fd306cSNickeau        try {
37*04fd306cSNickeau            return parent::getValue();
38*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
39c3437056SNickeau
40c3437056SNickeau            /**
41c3437056SNickeau             * Migration code
42*04fd306cSNickeau             * The indicator {@link LowQualityCalculatedIndicator::PROPERTY_NAME} is new
43c3437056SNickeau             * but if the analytics was done, we can get it
44c3437056SNickeau             */
45c3437056SNickeau            $resource = $this->getResource();
46*04fd306cSNickeau            if (!($resource instanceof MarkupPath)) {
47*04fd306cSNickeau                throw new ExceptionNotFound("Low Quality is only for page resources");
48c3437056SNickeau            }
49c3437056SNickeau            try {
50*04fd306cSNickeau                $analyticsDocument = $resource->fetchAnalyticsDocument();
51*04fd306cSNickeau            } catch (ExceptionNotExists $e) {
52*04fd306cSNickeau                throw new ExceptionNotFound("No analytics document could be found");
53*04fd306cSNickeau            }
54*04fd306cSNickeau
55*04fd306cSNickeau            $analyticsCache = $analyticsDocument->getContentCachePath();
56*04fd306cSNickeau            if (!FileSystems::exists($analyticsCache)) {
57*04fd306cSNickeau                throw new ExceptionNotFound("No analytics document could be found");
58*04fd306cSNickeau            }
59*04fd306cSNickeau
60*04fd306cSNickeau            try {
61*04fd306cSNickeau                return Json::createFromPath($analyticsCache)->toArray()[renderer_plugin_combo_analytics::QUALITY][renderer_plugin_combo_analytics::LOW];
62*04fd306cSNickeau            } catch (ExceptionCompile $e) {
63*04fd306cSNickeau                $message = "Error while reading the json analytics. {$e->getMessage()}";
64*04fd306cSNickeau                LogUtility::internalError($message, self::CANONICAL);
65*04fd306cSNickeau                throw new ExceptionNotFound($message);
66*04fd306cSNickeau            }
67*04fd306cSNickeau
68c3437056SNickeau        }
69c3437056SNickeau
70c3437056SNickeau    }
71c3437056SNickeau
72c3437056SNickeau
73*04fd306cSNickeau    static public function getLabel(): string
74c3437056SNickeau    {
75c3437056SNickeau        return "Low Quality Indicator";
76c3437056SNickeau    }
77c3437056SNickeau
78c3437056SNickeau    static public function getName(): string
79c3437056SNickeau    {
80*04fd306cSNickeau        return self::PROPERTY_NAME;
81c3437056SNickeau    }
82c3437056SNickeau
83*04fd306cSNickeau    static public function getPersistenceType(): string
84c3437056SNickeau    {
85c3437056SNickeau        return Metadata::DERIVED_METADATA;
86c3437056SNickeau    }
87c3437056SNickeau
88*04fd306cSNickeau    static public function isMutable(): bool
89c3437056SNickeau    {
90c3437056SNickeau        return false;
91c3437056SNickeau    }
92c3437056SNickeau
93c3437056SNickeau    /**
94c3437056SNickeau     * By default, if a file has not been through
95c3437056SNickeau     * a {@link \renderer_plugin_combo_analytics}
96c3437056SNickeau     * analysis, this is a low page if protection is set
97c3437056SNickeau     */
98c3437056SNickeau    public function getDefaultValue(): bool
99c3437056SNickeau    {
100c3437056SNickeau
101c3437056SNickeau        if (!Site::isLowQualityProtectionEnable()) {
102c3437056SNickeau            return false;
103c3437056SNickeau        }
104c3437056SNickeau        return true;
105c3437056SNickeau    }
106c3437056SNickeau}
107