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