1*4cadd4f8SNickeau<?php 2*4cadd4f8SNickeau 3*4cadd4f8SNickeauuse ComboStrap\CacheLog; 4*4cadd4f8SNickeauuse ComboStrap\CacheManager; 5*4cadd4f8SNickeauuse ComboStrap\Event; 6*4cadd4f8SNickeauuse ComboStrap\ExceptionCombo; 7*4cadd4f8SNickeauuse ComboStrap\FileSystems; 8*4cadd4f8SNickeauuse ComboStrap\LogUtility; 9*4cadd4f8SNickeauuse ComboStrap\LowQualityCalculatedIndicator; 10*4cadd4f8SNickeauuse ComboStrap\LowQualityPageOverwrite; 11*4cadd4f8SNickeauuse ComboStrap\MetadataDokuWikiStore; 12*4cadd4f8SNickeauuse ComboStrap\Page; 13*4cadd4f8SNickeauuse ComboStrap\PagePath; 14*4cadd4f8SNickeauuse ComboStrap\Site; 15*4cadd4f8SNickeau 16*4cadd4f8SNickeau 17*4cadd4f8SNickeaurequire_once(__DIR__ . '/../ComboStrap/PluginUtility.php'); 18*4cadd4f8SNickeau 19*4cadd4f8SNickeau/** 20*4cadd4f8SNickeau * Delete the backlinks when there is a quality mutation 21*4cadd4f8SNickeau */ 22*4cadd4f8SNickeauclass action_plugin_combo_qualitymutation extends DokuWiki_Action_Plugin 23*4cadd4f8SNickeau{ 24*4cadd4f8SNickeau 25*4cadd4f8SNickeau 26*4cadd4f8SNickeau public const QUALITY_MUTATION_EVENT_NAME = 'quality_mutation'; 27*4cadd4f8SNickeau const CANONICAL = "low_quality"; 28*4cadd4f8SNickeau const DESC = "desc"; 29*4cadd4f8SNickeau 30*4cadd4f8SNickeau 31*4cadd4f8SNickeau public function register(Doku_Event_Handler $controller) 32*4cadd4f8SNickeau { 33*4cadd4f8SNickeau 34*4cadd4f8SNickeau 35*4cadd4f8SNickeau /** 36*4cadd4f8SNickeau * create the async event 37*4cadd4f8SNickeau */ 38*4cadd4f8SNickeau $controller->register_hook(MetadataDokuWikiStore::PAGE_METADATA_MUTATION_EVENT, 'AFTER', $this, 'create_quality_mutation', array()); 39*4cadd4f8SNickeau 40*4cadd4f8SNickeau /** 41*4cadd4f8SNickeau * process the Async event 42*4cadd4f8SNickeau */ 43*4cadd4f8SNickeau $controller->register_hook(self::QUALITY_MUTATION_EVENT_NAME, 'AFTER', $this, 'handle_quality_mutation'); 44*4cadd4f8SNickeau 45*4cadd4f8SNickeau 46*4cadd4f8SNickeau } 47*4cadd4f8SNickeau 48*4cadd4f8SNickeau 49*4cadd4f8SNickeau public function handle_quality_mutation(Doku_Event $event, $param) 50*4cadd4f8SNickeau { 51*4cadd4f8SNickeau 52*4cadd4f8SNickeau 53*4cadd4f8SNickeau $data = $event->data; 54*4cadd4f8SNickeau $path = $data[PagePath::getPersistentName()]; 55*4cadd4f8SNickeau $page = Page::createPageFromQualifiedPath($path); 56*4cadd4f8SNickeau 57*4cadd4f8SNickeau if (!$page->getCanBeOfLowQuality()) { 58*4cadd4f8SNickeau return; 59*4cadd4f8SNickeau } 60*4cadd4f8SNickeau 61*4cadd4f8SNickeau /** 62*4cadd4f8SNickeau * Delete the html document cache to rewrite the links 63*4cadd4f8SNickeau * 64*4cadd4f8SNickeau */ 65*4cadd4f8SNickeau foreach ($page->getBacklinks() as $backlink) { 66*4cadd4f8SNickeau $htmlDocument = $backlink->getHtmlDocument(); 67*4cadd4f8SNickeau $desc = $data[self::DESC]; 68*4cadd4f8SNickeau CacheLog::deleteCacheIfExistsAndLog( 69*4cadd4f8SNickeau $htmlDocument, 70*4cadd4f8SNickeau self::QUALITY_MUTATION_EVENT_NAME, 71*4cadd4f8SNickeau "The {$backlink->getDokuwikiId()} of {$path} had its HTML cache deleted ($desc)." 72*4cadd4f8SNickeau ); 73*4cadd4f8SNickeau } 74*4cadd4f8SNickeau } 75*4cadd4f8SNickeau 76*4cadd4f8SNickeau 77*4cadd4f8SNickeau /** 78*4cadd4f8SNickeau */ 79*4cadd4f8SNickeau function create_quality_mutation(Doku_Event $event, $params): void 80*4cadd4f8SNickeau { 81*4cadd4f8SNickeau 82*4cadd4f8SNickeau if (!Site::isLowQualityProtectionEnable()) { 83*4cadd4f8SNickeau return; 84*4cadd4f8SNickeau } 85*4cadd4f8SNickeau 86*4cadd4f8SNickeau /** 87*4cadd4f8SNickeau * If this is not a mutation on references we return. 88*4cadd4f8SNickeau */ 89*4cadd4f8SNickeau $data = $event->data; 90*4cadd4f8SNickeau $variableName = $data["name"]; 91*4cadd4f8SNickeau if (!(in_array($variableName, [LowQualityCalculatedIndicator::getPersistentName(), LowQualityPageOverwrite::getPersistentName()]))) { 92*4cadd4f8SNickeau return; 93*4cadd4f8SNickeau } 94*4cadd4f8SNickeau 95*4cadd4f8SNickeau $newValue = $data[MetadataDokuWikiStore::NEW_VALUE_ATTRIBUTE]; 96*4cadd4f8SNickeau $path = $data[PagePath::getPersistentName()]; 97*4cadd4f8SNickeau Event::createEvent( 98*4cadd4f8SNickeau self::QUALITY_MUTATION_EVENT_NAME, 99*4cadd4f8SNickeau [ 100*4cadd4f8SNickeau PagePath::getPersistentName() => $path, 101*4cadd4f8SNickeau self::DESC => "The variable ($variableName) has the new value ($newValue)" 102*4cadd4f8SNickeau ] 103*4cadd4f8SNickeau ); 104*4cadd4f8SNickeau 105*4cadd4f8SNickeau 106*4cadd4f8SNickeau } 107*4cadd4f8SNickeau 108*4cadd4f8SNickeau} 109*4cadd4f8SNickeau 110*4cadd4f8SNickeau 111*4cadd4f8SNickeau 112