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