xref: /template/strap/ComboStrap/LowQualityCalculatedIndicator.php (revision abb1a102c65d07a7a322382b6553c84e3bf44ccd)
1c3437056SNickeau<?php
2c3437056SNickeau
3c3437056SNickeau
4c3437056SNickeaunamespace ComboStrap;
5c3437056SNickeau
6c3437056SNickeau
704fd306cSNickeauuse ComboStrap\Meta\Api\Metadata;
804fd306cSNickeauuse ComboStrap\Meta\Api\MetadataBoolean;
904fd306cSNickeauuse renderer_plugin_combo_analytics;
1004fd306cSNickeau
11c3437056SNickeauclass LowQualityCalculatedIndicator extends MetadataBoolean
12c3437056SNickeau{
13c3437056SNickeau
1404fd306cSNickeau    public const PROPERTY_NAME = "low_quality_indicator_calculated";
15c3437056SNickeau
1604fd306cSNickeau    public static function createFromPage(MarkupPath $page)
17c3437056SNickeau    {
18c3437056SNickeau        return (new LowQualityCalculatedIndicator())
19c3437056SNickeau            ->setResource($page);
20c3437056SNickeau    }
21c3437056SNickeau
2204fd306cSNickeau    public static function getTab(): ?string
23c3437056SNickeau    {
24c3437056SNickeau        // not in a form
25c3437056SNickeau        return null;
26c3437056SNickeau    }
27c3437056SNickeau
2804fd306cSNickeau    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
3304fd306cSNickeau    public function getValue(): bool
34c3437056SNickeau    {
3504fd306cSNickeau
3604fd306cSNickeau        try {
3704fd306cSNickeau            return parent::getValue();
3804fd306cSNickeau        } catch (ExceptionNotFound $e) {
39c3437056SNickeau
40c3437056SNickeau            /**
41c3437056SNickeau             * Migration code
4204fd306cSNickeau             * The indicator {@link LowQualityCalculatedIndicator::PROPERTY_NAME} is new
43c3437056SNickeau             * but if the analytics was done, we can get it
44c3437056SNickeau             */
45c3437056SNickeau            $resource = $this->getResource();
4604fd306cSNickeau            if (!($resource instanceof MarkupPath)) {
4704fd306cSNickeau                throw new ExceptionNotFound("Low Quality is only for page resources");
48c3437056SNickeau            }
49c3437056SNickeau            try {
5004fd306cSNickeau                $analyticsDocument = $resource->fetchAnalyticsDocument();
5104fd306cSNickeau            } catch (ExceptionNotExists $e) {
5204fd306cSNickeau                throw new ExceptionNotFound("No analytics document could be found");
5304fd306cSNickeau            }
5404fd306cSNickeau
5504fd306cSNickeau            $analyticsCache = $analyticsDocument->getContentCachePath();
5604fd306cSNickeau            if (!FileSystems::exists($analyticsCache)) {
5704fd306cSNickeau                throw new ExceptionNotFound("No analytics document could be found");
5804fd306cSNickeau            }
5904fd306cSNickeau
6004fd306cSNickeau            try {
61*abb1a102Sgerardnico                $value = Json::createFromPath($analyticsCache)->toArray()[renderer_plugin_combo_analytics::QUALITY][renderer_plugin_combo_analytics::LOW];
62*abb1a102Sgerardnico                if ($value === null) {
63*abb1a102Sgerardnico                    throw new ExceptionNotFound("The value is null in the analytics document.");
64*abb1a102Sgerardnico                }
65*abb1a102Sgerardnico                return DataType::toBoolean($value, true);
6604fd306cSNickeau            } catch (ExceptionCompile $e) {
6704fd306cSNickeau                $message = "Error while reading the json analytics. {$e->getMessage()}";
6804fd306cSNickeau                LogUtility::internalError($message, self::CANONICAL);
6904fd306cSNickeau                throw new ExceptionNotFound($message);
7004fd306cSNickeau            }
7104fd306cSNickeau
72c3437056SNickeau        }
73c3437056SNickeau
74c3437056SNickeau    }
75c3437056SNickeau
76c3437056SNickeau
7704fd306cSNickeau    static public function getLabel(): string
78c3437056SNickeau    {
79c3437056SNickeau        return "Low Quality Indicator";
80c3437056SNickeau    }
81c3437056SNickeau
82c3437056SNickeau    static public function getName(): string
83c3437056SNickeau    {
8404fd306cSNickeau        return self::PROPERTY_NAME;
85c3437056SNickeau    }
86c3437056SNickeau
8704fd306cSNickeau    static public function getPersistenceType(): string
88c3437056SNickeau    {
89c3437056SNickeau        return Metadata::DERIVED_METADATA;
90c3437056SNickeau    }
91c3437056SNickeau
9204fd306cSNickeau    static public function isMutable(): bool
93c3437056SNickeau    {
94c3437056SNickeau        return false;
95c3437056SNickeau    }
96c3437056SNickeau
97c3437056SNickeau    /**
98c3437056SNickeau     * By default, if a file has not been through
99c3437056SNickeau     * a {@link \renderer_plugin_combo_analytics}
100c3437056SNickeau     * analysis, this is a low page if protection is set
101c3437056SNickeau     */
102c3437056SNickeau    public function getDefaultValue(): bool
103c3437056SNickeau    {
104c3437056SNickeau
105c3437056SNickeau        if (!Site::isLowQualityProtectionEnable()) {
106c3437056SNickeau            return false;
107c3437056SNickeau        }
108c3437056SNickeau        return true;
109c3437056SNickeau    }
110c3437056SNickeau}
111