14cadd4f8SNickeau<?php 24cadd4f8SNickeau 34cadd4f8SNickeauuse ComboStrap\CacheLog; 4*cc610584Sgerardnicouse ComboStrap\DataType; 54cadd4f8SNickeauuse ComboStrap\Event; 604fd306cSNickeauuse ComboStrap\ExceptionBadArgument; 704fd306cSNickeauuse ComboStrap\ExceptionNotExists; 84cadd4f8SNickeauuse ComboStrap\LogUtility; 94cadd4f8SNickeauuse ComboStrap\LowQualityCalculatedIndicator; 104cadd4f8SNickeauuse ComboStrap\LowQualityPageOverwrite; 1104fd306cSNickeauuse ComboStrap\MarkupPath; 1204fd306cSNickeauuse ComboStrap\MetadataMutation; 134cadd4f8SNickeauuse ComboStrap\PagePath; 144cadd4f8SNickeauuse ComboStrap\Site; 154cadd4f8SNickeau 164cadd4f8SNickeau 174cadd4f8SNickeau/** 1804fd306cSNickeau * Delete the backlinks when there is a page quality mutation 194cadd4f8SNickeau */ 204cadd4f8SNickeauclass action_plugin_combo_qualitymutation extends DokuWiki_Action_Plugin 214cadd4f8SNickeau{ 224cadd4f8SNickeau 234cadd4f8SNickeau 244cadd4f8SNickeau public const QUALITY_MUTATION_EVENT_NAME = 'quality_mutation'; 254cadd4f8SNickeau const CANONICAL = "low_quality"; 264cadd4f8SNickeau const DESC = "desc"; 274cadd4f8SNickeau 2804fd306cSNickeau public static function getQualityMetas(): array 2904fd306cSNickeau { 3004fd306cSNickeau return [ 3104fd306cSNickeau LowQualityCalculatedIndicator::getPersistentName(), 3204fd306cSNickeau LowQualityPageOverwrite::getPersistentName() 3304fd306cSNickeau ]; 3404fd306cSNickeau } 3504fd306cSNickeau 364cadd4f8SNickeau 374cadd4f8SNickeau public function register(Doku_Event_Handler $controller) 384cadd4f8SNickeau { 394cadd4f8SNickeau 404cadd4f8SNickeau 414cadd4f8SNickeau /** 424cadd4f8SNickeau * create the async event 434cadd4f8SNickeau */ 4404fd306cSNickeau $controller->register_hook(MetadataMutation::PAGE_METADATA_MUTATION_EVENT, 'AFTER', $this, 'create_quality_mutation', array()); 454cadd4f8SNickeau 464cadd4f8SNickeau /** 474cadd4f8SNickeau * process the Async event 484cadd4f8SNickeau */ 494cadd4f8SNickeau $controller->register_hook(self::QUALITY_MUTATION_EVENT_NAME, 'AFTER', $this, 'handle_quality_mutation'); 504cadd4f8SNickeau 514cadd4f8SNickeau 524cadd4f8SNickeau } 534cadd4f8SNickeau 544cadd4f8SNickeau 554cadd4f8SNickeau public function handle_quality_mutation(Doku_Event $event, $param) 564cadd4f8SNickeau { 574cadd4f8SNickeau 584cadd4f8SNickeau 594cadd4f8SNickeau $data = $event->data; 604cadd4f8SNickeau $path = $data[PagePath::getPersistentName()]; 6104fd306cSNickeau $page = MarkupPath::createPageFromAbsoluteId($path); 624cadd4f8SNickeau 634cadd4f8SNickeau if (!$page->getCanBeOfLowQuality()) { 644cadd4f8SNickeau return; 654cadd4f8SNickeau } 664cadd4f8SNickeau 674cadd4f8SNickeau /** 684cadd4f8SNickeau * Delete the html document cache to rewrite the links 694cadd4f8SNickeau * 704cadd4f8SNickeau */ 714cadd4f8SNickeau foreach ($page->getBacklinks() as $backlink) { 7204fd306cSNickeau try { 7304fd306cSNickeau $htmlDocument = $backlink->createHtmlFetcherWithItselfAsContextPath(); 7404fd306cSNickeau } catch (ExceptionNotExists $e) { 7504fd306cSNickeau continue; 7604fd306cSNickeau } 7704fd306cSNickeau try { 7804fd306cSNickeau $wikiId = $backlink->getWikiId(); 7904fd306cSNickeau } catch (ExceptionBadArgument $e) { 8004fd306cSNickeau LogUtility::internalError("Backlink should be only for wiki path"); 8104fd306cSNickeau continue; 8204fd306cSNickeau } 834cadd4f8SNickeau $desc = $data[self::DESC]; 844cadd4f8SNickeau CacheLog::deleteCacheIfExistsAndLog( 854cadd4f8SNickeau $htmlDocument, 864cadd4f8SNickeau self::QUALITY_MUTATION_EVENT_NAME, 8704fd306cSNickeau "The {$wikiId} of {$path} had its HTML cache deleted ($desc)." 884cadd4f8SNickeau ); 8904fd306cSNickeau 904cadd4f8SNickeau } 914cadd4f8SNickeau } 924cadd4f8SNickeau 934cadd4f8SNickeau 944cadd4f8SNickeau /** 954cadd4f8SNickeau */ 964cadd4f8SNickeau function create_quality_mutation(Doku_Event $event, $params): void 974cadd4f8SNickeau { 984cadd4f8SNickeau 994cadd4f8SNickeau if (!Site::isLowQualityProtectionEnable()) { 1004cadd4f8SNickeau return; 1014cadd4f8SNickeau } 1024cadd4f8SNickeau 1034cadd4f8SNickeau /** 1044cadd4f8SNickeau * If this is not a mutation on references we return. 1054cadd4f8SNickeau */ 1064cadd4f8SNickeau $data = $event->data; 1074cadd4f8SNickeau $variableName = $data["name"]; 10804fd306cSNickeau if (!(in_array($variableName, self::getQualityMetas()))) { 1094cadd4f8SNickeau return; 1104cadd4f8SNickeau } 1114cadd4f8SNickeau 112*cc610584Sgerardnico $newValue = DataType::toString($data[MetadataMutation::NEW_VALUE_ATTRIBUTE]); 113*cc610584Sgerardnico $oldValue = DataType::toString($data[MetadataMutation::OLD_VALUE_ATTRIBUTE]); 1144cadd4f8SNickeau $path = $data[PagePath::getPersistentName()]; 1154cadd4f8SNickeau Event::createEvent( 1164cadd4f8SNickeau self::QUALITY_MUTATION_EVENT_NAME, 1174cadd4f8SNickeau [ 1184cadd4f8SNickeau PagePath::getPersistentName() => $path, 119*cc610584Sgerardnico self::DESC => "The variable ($variableName) has the new value ($newValue) overriding ($oldValue)" 1204cadd4f8SNickeau ] 1214cadd4f8SNickeau ); 1224cadd4f8SNickeau 1234cadd4f8SNickeau 1244cadd4f8SNickeau } 1254cadd4f8SNickeau 1264cadd4f8SNickeau} 1274cadd4f8SNickeau 1284cadd4f8SNickeau 1294cadd4f8SNickeau 130