14cadd4f8SNickeau<?php 24cadd4f8SNickeau 34cadd4f8SNickeauuse ComboStrap\CacheLog; 44cadd4f8SNickeauuse ComboStrap\CacheManager; 54cadd4f8SNickeauuse ComboStrap\Event; 6*04fd306cSNickeauuse ComboStrap\ExceptionBadArgument; 7*04fd306cSNickeauuse ComboStrap\ExceptionCompile; 8*04fd306cSNickeauuse ComboStrap\ExceptionNotExists; 94cadd4f8SNickeauuse ComboStrap\FileSystems; 104cadd4f8SNickeauuse ComboStrap\LogUtility; 114cadd4f8SNickeauuse ComboStrap\LowQualityCalculatedIndicator; 124cadd4f8SNickeauuse ComboStrap\LowQualityPageOverwrite; 13*04fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore; 14*04fd306cSNickeauuse ComboStrap\MarkupPath; 15*04fd306cSNickeauuse ComboStrap\MetadataMutation; 164cadd4f8SNickeauuse ComboStrap\PagePath; 174cadd4f8SNickeauuse ComboStrap\Site; 184cadd4f8SNickeau 194cadd4f8SNickeau 204cadd4f8SNickeau 214cadd4f8SNickeau/** 22*04fd306cSNickeau * Delete the backlinks when there is a page quality mutation 234cadd4f8SNickeau */ 244cadd4f8SNickeauclass action_plugin_combo_qualitymutation extends DokuWiki_Action_Plugin 254cadd4f8SNickeau{ 264cadd4f8SNickeau 274cadd4f8SNickeau 284cadd4f8SNickeau public const QUALITY_MUTATION_EVENT_NAME = 'quality_mutation'; 294cadd4f8SNickeau const CANONICAL = "low_quality"; 304cadd4f8SNickeau const DESC = "desc"; 314cadd4f8SNickeau 32*04fd306cSNickeau public static function getQualityMetas(): array 33*04fd306cSNickeau { 34*04fd306cSNickeau return [ 35*04fd306cSNickeau LowQualityCalculatedIndicator::getPersistentName(), 36*04fd306cSNickeau LowQualityPageOverwrite::getPersistentName() 37*04fd306cSNickeau ]; 38*04fd306cSNickeau } 39*04fd306cSNickeau 404cadd4f8SNickeau 414cadd4f8SNickeau public function register(Doku_Event_Handler $controller) 424cadd4f8SNickeau { 434cadd4f8SNickeau 444cadd4f8SNickeau 454cadd4f8SNickeau /** 464cadd4f8SNickeau * create the async event 474cadd4f8SNickeau */ 48*04fd306cSNickeau $controller->register_hook(MetadataMutation::PAGE_METADATA_MUTATION_EVENT, 'AFTER', $this, 'create_quality_mutation', array()); 494cadd4f8SNickeau 504cadd4f8SNickeau /** 514cadd4f8SNickeau * process the Async event 524cadd4f8SNickeau */ 534cadd4f8SNickeau $controller->register_hook(self::QUALITY_MUTATION_EVENT_NAME, 'AFTER', $this, 'handle_quality_mutation'); 544cadd4f8SNickeau 554cadd4f8SNickeau 564cadd4f8SNickeau } 574cadd4f8SNickeau 584cadd4f8SNickeau 594cadd4f8SNickeau public function handle_quality_mutation(Doku_Event $event, $param) 604cadd4f8SNickeau { 614cadd4f8SNickeau 624cadd4f8SNickeau 634cadd4f8SNickeau $data = $event->data; 644cadd4f8SNickeau $path = $data[PagePath::getPersistentName()]; 65*04fd306cSNickeau $page = MarkupPath::createPageFromAbsoluteId($path); 664cadd4f8SNickeau 674cadd4f8SNickeau if (!$page->getCanBeOfLowQuality()) { 684cadd4f8SNickeau return; 694cadd4f8SNickeau } 704cadd4f8SNickeau 714cadd4f8SNickeau /** 724cadd4f8SNickeau * Delete the html document cache to rewrite the links 734cadd4f8SNickeau * 744cadd4f8SNickeau */ 754cadd4f8SNickeau foreach ($page->getBacklinks() as $backlink) { 76*04fd306cSNickeau try { 77*04fd306cSNickeau $htmlDocument = $backlink->createHtmlFetcherWithItselfAsContextPath(); 78*04fd306cSNickeau } catch (ExceptionNotExists $e) { 79*04fd306cSNickeau continue; 80*04fd306cSNickeau } 81*04fd306cSNickeau try { 82*04fd306cSNickeau $wikiId = $backlink->getWikiId(); 83*04fd306cSNickeau } catch (ExceptionBadArgument $e) { 84*04fd306cSNickeau LogUtility::internalError("Backlink should be only for wiki path"); 85*04fd306cSNickeau continue; 86*04fd306cSNickeau } 874cadd4f8SNickeau $desc = $data[self::DESC]; 884cadd4f8SNickeau CacheLog::deleteCacheIfExistsAndLog( 894cadd4f8SNickeau $htmlDocument, 904cadd4f8SNickeau self::QUALITY_MUTATION_EVENT_NAME, 91*04fd306cSNickeau "The {$wikiId} of {$path} had its HTML cache deleted ($desc)." 924cadd4f8SNickeau ); 93*04fd306cSNickeau 944cadd4f8SNickeau } 954cadd4f8SNickeau } 964cadd4f8SNickeau 974cadd4f8SNickeau 984cadd4f8SNickeau /** 994cadd4f8SNickeau */ 1004cadd4f8SNickeau function create_quality_mutation(Doku_Event $event, $params): void 1014cadd4f8SNickeau { 1024cadd4f8SNickeau 1034cadd4f8SNickeau if (!Site::isLowQualityProtectionEnable()) { 1044cadd4f8SNickeau return; 1054cadd4f8SNickeau } 1064cadd4f8SNickeau 1074cadd4f8SNickeau /** 1084cadd4f8SNickeau * If this is not a mutation on references we return. 1094cadd4f8SNickeau */ 1104cadd4f8SNickeau $data = $event->data; 1114cadd4f8SNickeau $variableName = $data["name"]; 112*04fd306cSNickeau if (!(in_array($variableName, self::getQualityMetas()))) { 1134cadd4f8SNickeau return; 1144cadd4f8SNickeau } 1154cadd4f8SNickeau 116*04fd306cSNickeau $newValue = $data[MetadataMutation::NEW_VALUE_ATTRIBUTE]; 1174cadd4f8SNickeau $path = $data[PagePath::getPersistentName()]; 1184cadd4f8SNickeau Event::createEvent( 1194cadd4f8SNickeau self::QUALITY_MUTATION_EVENT_NAME, 1204cadd4f8SNickeau [ 1214cadd4f8SNickeau PagePath::getPersistentName() => $path, 1224cadd4f8SNickeau self::DESC => "The variable ($variableName) has the new value ($newValue)" 1234cadd4f8SNickeau ] 1244cadd4f8SNickeau ); 1254cadd4f8SNickeau 1264cadd4f8SNickeau 1274cadd4f8SNickeau } 1284cadd4f8SNickeau 1294cadd4f8SNickeau} 1304cadd4f8SNickeau 1314cadd4f8SNickeau 1324cadd4f8SNickeau 133