xref: /plugin/combo/action/pageprimarymetamutation.php (revision 4cadd4f8c541149bdda95f080e38a6d4e3a640ca)
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