xref: /template/strap/action/pageprimarymetamutation.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
14cadd4f8SNickeau<?php /** @noinspection SpellCheckingInspection */
24cadd4f8SNickeau
34cadd4f8SNickeauuse ComboStrap\Event;
4*04fd306cSNickeauuse ComboStrap\MarkupCacheDependencies;
5*04fd306cSNickeauuse ComboStrap\Meta\Field\PageH1;
6*04fd306cSNickeauuse 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         */
33*04fd306cSNickeau        $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,
554cadd4f8SNickeau            [
564cadd4f8SNickeau                PagePath::getPersistentName() => $data[PagePath::getPersistentName()]
574cadd4f8SNickeau            ]
584cadd4f8SNickeau        );
594cadd4f8SNickeau
604cadd4f8SNickeau
614cadd4f8SNickeau    }
624cadd4f8SNickeau
634cadd4f8SNickeau    function handlePrimaryMetaMutation($event)
644cadd4f8SNickeau    {
654cadd4f8SNickeau
664cadd4f8SNickeau        /**
674cadd4f8SNickeau         * We need to re-render the slot
68*04fd306cSNickeau         * that are {@link \ComboStrap\MarkupCacheDependencies::PAGE_PRIMARY_META_DEPENDENCY}
694cadd4f8SNickeau         * dependent
704cadd4f8SNickeau         */
714cadd4f8SNickeau        $data = $event->data;
724cadd4f8SNickeau
734cadd4f8SNickeau        /**
744cadd4f8SNickeau         * Build the context back before getting the slots
754cadd4f8SNickeau         */
764cadd4f8SNickeau        $path = $data[PagePath::getPersistentName()];
77*04fd306cSNickeau        MarkupCacheDependencies::reRenderSideSlotIfNeeded(
784cadd4f8SNickeau            $path,
79*04fd306cSNickeau            MarkupCacheDependencies::PAGE_PRIMARY_META_DEPENDENCY,
804cadd4f8SNickeau            self::PRIMARY_META_MUTATION_EVENT_NAME
814cadd4f8SNickeau        );
824cadd4f8SNickeau
834cadd4f8SNickeau    }
844cadd4f8SNickeau
854cadd4f8SNickeau
864cadd4f8SNickeau}
874cadd4f8SNickeau
884cadd4f8SNickeau
894cadd4f8SNickeau
90