xref: /template/strap/action/pageprimarymetamutation.php (revision 9fc13f002cb71fbc6be15f1b2f0abb7436c08989)
14cadd4f8SNickeau<?php /** @noinspection SpellCheckingInspection */
24cadd4f8SNickeau
34cadd4f8SNickeauuse ComboStrap\Event;
404fd306cSNickeauuse ComboStrap\MarkupCacheDependencies;
504fd306cSNickeauuse ComboStrap\Meta\Field\PageH1;
604fd306cSNickeauuse ComboStrap\MetadataMutation;
74cadd4f8SNickeauuse ComboStrap\PageDescription;
84cadd4f8SNickeauuse ComboStrap\PagePath;
94cadd4f8SNickeauuse ComboStrap\PageTitle;
104cadd4f8SNickeauuse ComboStrap\ResourceName;
114cadd4f8SNickeau
124cadd4f8SNickeau
134cadd4f8SNickeaurequire_once(__DIR__ . '/../ComboStrap/PluginUtility.php');
144cadd4f8SNickeau
154cadd4f8SNickeau/**
164cadd4f8SNickeau * Delete the cache
174cadd4f8SNickeau */
184cadd4f8SNickeauclass action_plugin_combo_pageprimarymetamutation extends DokuWiki_Action_Plugin
194cadd4f8SNickeau{
204cadd4f8SNickeau
214cadd4f8SNickeau
224cadd4f8SNickeau    public const PRIMARY_META_MUTATION_EVENT_NAME = 'page_primary_meta_mutation';
234cadd4f8SNickeau
244cadd4f8SNickeau    public const PRIMARY_METAS = [PageTitle::PROPERTY_NAME, ResourceName::PROPERTY_NAME, PageH1::PROPERTY_NAME, PageDescription::DESCRIPTION_PROPERTY];
254cadd4f8SNickeau
264cadd4f8SNickeau
274cadd4f8SNickeau    public function register(Doku_Event_Handler $controller)
284cadd4f8SNickeau    {
294cadd4f8SNickeau
304cadd4f8SNickeau        /**
314cadd4f8SNickeau         * create the async event
324cadd4f8SNickeau         */
3304fd306cSNickeau        $controller->register_hook(MetadataMutation::PAGE_METADATA_MUTATION_EVENT, 'AFTER', $this, 'createPrimaryMetaMutation', array());
344cadd4f8SNickeau
354cadd4f8SNickeau        /**
364cadd4f8SNickeau         * process the Async event
374cadd4f8SNickeau         */
384cadd4f8SNickeau        $controller->register_hook(self::PRIMARY_META_MUTATION_EVENT_NAME, 'AFTER', $this, 'handlePrimaryMetaMutation');
394cadd4f8SNickeau
404cadd4f8SNickeau    }
414cadd4f8SNickeau
424cadd4f8SNickeau    function createPrimaryMetaMutation($event)
434cadd4f8SNickeau    {
444cadd4f8SNickeau
454cadd4f8SNickeau        $data = $event->data;
464cadd4f8SNickeau
474cadd4f8SNickeau        /**
484cadd4f8SNickeau         * The slot cache are re-rendered only when the
494cadd4f8SNickeau         * below property are updated
504cadd4f8SNickeau         */
514cadd4f8SNickeau        if (!in_array($data["name"], self::PRIMARY_METAS)) return;
524cadd4f8SNickeau
534cadd4f8SNickeau        Event::createEvent(
544cadd4f8SNickeau            self::PRIMARY_META_MUTATION_EVENT_NAME,
55*9fc13f00Sgerardnico            $data
564cadd4f8SNickeau        );
574cadd4f8SNickeau
584cadd4f8SNickeau
594cadd4f8SNickeau    }
604cadd4f8SNickeau
614cadd4f8SNickeau    function handlePrimaryMetaMutation($event)
624cadd4f8SNickeau    {
634cadd4f8SNickeau
644cadd4f8SNickeau        /**
654cadd4f8SNickeau         * We need to re-render the slot
6604fd306cSNickeau         * that are {@link \ComboStrap\MarkupCacheDependencies::PAGE_PRIMARY_META_DEPENDENCY}
674cadd4f8SNickeau         * dependent
684cadd4f8SNickeau         */
694cadd4f8SNickeau        $data = $event->data;
704cadd4f8SNickeau
714cadd4f8SNickeau        /**
724cadd4f8SNickeau         * Build the context back before getting the slots
734cadd4f8SNickeau         */
744cadd4f8SNickeau        $path = $data[PagePath::getPersistentName()];
7504fd306cSNickeau        MarkupCacheDependencies::reRenderSideSlotIfNeeded(
764cadd4f8SNickeau            $path,
7704fd306cSNickeau            MarkupCacheDependencies::PAGE_PRIMARY_META_DEPENDENCY,
784cadd4f8SNickeau            self::PRIMARY_META_MUTATION_EVENT_NAME
794cadd4f8SNickeau        );
804cadd4f8SNickeau
814cadd4f8SNickeau    }
824cadd4f8SNickeau
834cadd4f8SNickeau
844cadd4f8SNickeau}
854cadd4f8SNickeau
864cadd4f8SNickeau
874cadd4f8SNickeau
88