1*4cadd4f8SNickeau<?php /** @noinspection SpellCheckingInspection */ 2*4cadd4f8SNickeau 3*4cadd4f8SNickeauuse ComboStrap\CacheDependencies; 4*4cadd4f8SNickeauuse ComboStrap\DokuwikiId; 5*4cadd4f8SNickeauuse ComboStrap\Event; 6*4cadd4f8SNickeauuse ComboStrap\MetadataDokuWikiStore; 7*4cadd4f8SNickeauuse ComboStrap\PageDescription; 8*4cadd4f8SNickeauuse ComboStrap\PageH1; 9*4cadd4f8SNickeauuse ComboStrap\PagePath; 10*4cadd4f8SNickeauuse ComboStrap\PageTitle; 11*4cadd4f8SNickeauuse ComboStrap\ResourceName; 12*4cadd4f8SNickeau 13*4cadd4f8SNickeau 14*4cadd4f8SNickeaurequire_once(__DIR__ . '/../ComboStrap/PluginUtility.php'); 15*4cadd4f8SNickeau 16*4cadd4f8SNickeau/** 17*4cadd4f8SNickeau * Delete the cache 18*4cadd4f8SNickeau */ 19*4cadd4f8SNickeauclass action_plugin_combo_pageprimarymetamutation extends DokuWiki_Action_Plugin 20*4cadd4f8SNickeau{ 21*4cadd4f8SNickeau 22*4cadd4f8SNickeau 23*4cadd4f8SNickeau public const PRIMARY_META_MUTATION_EVENT_NAME = 'page_primary_meta_mutation'; 24*4cadd4f8SNickeau 25*4cadd4f8SNickeau public const PRIMARY_METAS = [PageTitle::PROPERTY_NAME, ResourceName::PROPERTY_NAME, PageH1::PROPERTY_NAME, PageDescription::DESCRIPTION_PROPERTY]; 26*4cadd4f8SNickeau 27*4cadd4f8SNickeau 28*4cadd4f8SNickeau public function register(Doku_Event_Handler $controller) 29*4cadd4f8SNickeau { 30*4cadd4f8SNickeau 31*4cadd4f8SNickeau /** 32*4cadd4f8SNickeau * create the async event 33*4cadd4f8SNickeau */ 34*4cadd4f8SNickeau $controller->register_hook(MetadataDokuWikiStore::PAGE_METADATA_MUTATION_EVENT, 'AFTER', $this, 'createPrimaryMetaMutation', array()); 35*4cadd4f8SNickeau 36*4cadd4f8SNickeau /** 37*4cadd4f8SNickeau * process the Async event 38*4cadd4f8SNickeau */ 39*4cadd4f8SNickeau $controller->register_hook(self::PRIMARY_META_MUTATION_EVENT_NAME, 'AFTER', $this, 'handlePrimaryMetaMutation'); 40*4cadd4f8SNickeau 41*4cadd4f8SNickeau } 42*4cadd4f8SNickeau 43*4cadd4f8SNickeau function createPrimaryMetaMutation($event) 44*4cadd4f8SNickeau { 45*4cadd4f8SNickeau 46*4cadd4f8SNickeau $data = $event->data; 47*4cadd4f8SNickeau 48*4cadd4f8SNickeau /** 49*4cadd4f8SNickeau * The slot cache are re-rendered only when the 50*4cadd4f8SNickeau * below property are updated 51*4cadd4f8SNickeau */ 52*4cadd4f8SNickeau if (!in_array($data["name"], self::PRIMARY_METAS)) return; 53*4cadd4f8SNickeau 54*4cadd4f8SNickeau Event::createEvent( 55*4cadd4f8SNickeau self::PRIMARY_META_MUTATION_EVENT_NAME, 56*4cadd4f8SNickeau [ 57*4cadd4f8SNickeau PagePath::getPersistentName() => $data[PagePath::getPersistentName()] 58*4cadd4f8SNickeau ] 59*4cadd4f8SNickeau ); 60*4cadd4f8SNickeau 61*4cadd4f8SNickeau 62*4cadd4f8SNickeau } 63*4cadd4f8SNickeau 64*4cadd4f8SNickeau function handlePrimaryMetaMutation($event) 65*4cadd4f8SNickeau { 66*4cadd4f8SNickeau 67*4cadd4f8SNickeau /** 68*4cadd4f8SNickeau * We need to re-render the slot 69*4cadd4f8SNickeau * that are {@link \ComboStrap\CacheDependencies::PAGE_PRIMARY_META_DEPENDENCY} 70*4cadd4f8SNickeau * dependent 71*4cadd4f8SNickeau */ 72*4cadd4f8SNickeau $data = $event->data; 73*4cadd4f8SNickeau 74*4cadd4f8SNickeau /** 75*4cadd4f8SNickeau * Build the context back before getting the slots 76*4cadd4f8SNickeau */ 77*4cadd4f8SNickeau $path = $data[PagePath::getPersistentName()]; 78*4cadd4f8SNickeau CacheDependencies::reRenderSecondarySlotsIfNeeded( 79*4cadd4f8SNickeau $path, 80*4cadd4f8SNickeau CacheDependencies::PAGE_PRIMARY_META_DEPENDENCY, 81*4cadd4f8SNickeau self::PRIMARY_META_MUTATION_EVENT_NAME 82*4cadd4f8SNickeau ); 83*4cadd4f8SNickeau 84*4cadd4f8SNickeau } 85*4cadd4f8SNickeau 86*4cadd4f8SNickeau 87*4cadd4f8SNickeau} 88*4cadd4f8SNickeau 89*4cadd4f8SNickeau 90*4cadd4f8SNickeau 91