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