xref: /template/strap/action/qualitymutation.php (revision 4cadd4f8c541149bdda95f080e38a6d4e3a640ca)
1*4cadd4f8SNickeau<?php
2*4cadd4f8SNickeau
3*4cadd4f8SNickeauuse ComboStrap\CacheLog;
4*4cadd4f8SNickeauuse ComboStrap\CacheManager;
5*4cadd4f8SNickeauuse ComboStrap\Event;
6*4cadd4f8SNickeauuse ComboStrap\ExceptionCombo;
7*4cadd4f8SNickeauuse ComboStrap\FileSystems;
8*4cadd4f8SNickeauuse ComboStrap\LogUtility;
9*4cadd4f8SNickeauuse ComboStrap\LowQualityCalculatedIndicator;
10*4cadd4f8SNickeauuse ComboStrap\LowQualityPageOverwrite;
11*4cadd4f8SNickeauuse ComboStrap\MetadataDokuWikiStore;
12*4cadd4f8SNickeauuse ComboStrap\Page;
13*4cadd4f8SNickeauuse ComboStrap\PagePath;
14*4cadd4f8SNickeauuse ComboStrap\Site;
15*4cadd4f8SNickeau
16*4cadd4f8SNickeau
17*4cadd4f8SNickeaurequire_once(__DIR__ . '/../ComboStrap/PluginUtility.php');
18*4cadd4f8SNickeau
19*4cadd4f8SNickeau/**
20*4cadd4f8SNickeau * Delete the backlinks when there is a quality mutation
21*4cadd4f8SNickeau */
22*4cadd4f8SNickeauclass action_plugin_combo_qualitymutation extends DokuWiki_Action_Plugin
23*4cadd4f8SNickeau{
24*4cadd4f8SNickeau
25*4cadd4f8SNickeau
26*4cadd4f8SNickeau    public const QUALITY_MUTATION_EVENT_NAME = 'quality_mutation';
27*4cadd4f8SNickeau    const CANONICAL = "low_quality";
28*4cadd4f8SNickeau    const DESC = "desc";
29*4cadd4f8SNickeau
30*4cadd4f8SNickeau
31*4cadd4f8SNickeau    public function register(Doku_Event_Handler $controller)
32*4cadd4f8SNickeau    {
33*4cadd4f8SNickeau
34*4cadd4f8SNickeau
35*4cadd4f8SNickeau        /**
36*4cadd4f8SNickeau         * create the async event
37*4cadd4f8SNickeau         */
38*4cadd4f8SNickeau        $controller->register_hook(MetadataDokuWikiStore::PAGE_METADATA_MUTATION_EVENT, 'AFTER', $this, 'create_quality_mutation', array());
39*4cadd4f8SNickeau
40*4cadd4f8SNickeau        /**
41*4cadd4f8SNickeau         * process the Async event
42*4cadd4f8SNickeau         */
43*4cadd4f8SNickeau        $controller->register_hook(self::QUALITY_MUTATION_EVENT_NAME, 'AFTER', $this, 'handle_quality_mutation');
44*4cadd4f8SNickeau
45*4cadd4f8SNickeau
46*4cadd4f8SNickeau    }
47*4cadd4f8SNickeau
48*4cadd4f8SNickeau
49*4cadd4f8SNickeau    public function handle_quality_mutation(Doku_Event $event, $param)
50*4cadd4f8SNickeau    {
51*4cadd4f8SNickeau
52*4cadd4f8SNickeau
53*4cadd4f8SNickeau        $data = $event->data;
54*4cadd4f8SNickeau        $path = $data[PagePath::getPersistentName()];
55*4cadd4f8SNickeau        $page = Page::createPageFromQualifiedPath($path);
56*4cadd4f8SNickeau
57*4cadd4f8SNickeau        if (!$page->getCanBeOfLowQuality()) {
58*4cadd4f8SNickeau            return;
59*4cadd4f8SNickeau        }
60*4cadd4f8SNickeau
61*4cadd4f8SNickeau        /**
62*4cadd4f8SNickeau         * Delete the html document cache to rewrite the links
63*4cadd4f8SNickeau         *
64*4cadd4f8SNickeau         */
65*4cadd4f8SNickeau        foreach ($page->getBacklinks() as $backlink) {
66*4cadd4f8SNickeau            $htmlDocument = $backlink->getHtmlDocument();
67*4cadd4f8SNickeau            $desc = $data[self::DESC];
68*4cadd4f8SNickeau            CacheLog::deleteCacheIfExistsAndLog(
69*4cadd4f8SNickeau                $htmlDocument,
70*4cadd4f8SNickeau                self::QUALITY_MUTATION_EVENT_NAME,
71*4cadd4f8SNickeau                "The {$backlink->getDokuwikiId()} of {$path} had its HTML cache deleted ($desc)."
72*4cadd4f8SNickeau            );
73*4cadd4f8SNickeau        }
74*4cadd4f8SNickeau    }
75*4cadd4f8SNickeau
76*4cadd4f8SNickeau
77*4cadd4f8SNickeau    /**
78*4cadd4f8SNickeau     */
79*4cadd4f8SNickeau    function create_quality_mutation(Doku_Event $event, $params): void
80*4cadd4f8SNickeau    {
81*4cadd4f8SNickeau
82*4cadd4f8SNickeau        if (!Site::isLowQualityProtectionEnable()) {
83*4cadd4f8SNickeau            return;
84*4cadd4f8SNickeau        }
85*4cadd4f8SNickeau
86*4cadd4f8SNickeau        /**
87*4cadd4f8SNickeau         * If this is not a mutation on references we return.
88*4cadd4f8SNickeau         */
89*4cadd4f8SNickeau        $data = $event->data;
90*4cadd4f8SNickeau        $variableName = $data["name"];
91*4cadd4f8SNickeau        if (!(in_array($variableName, [LowQualityCalculatedIndicator::getPersistentName(), LowQualityPageOverwrite::getPersistentName()]))) {
92*4cadd4f8SNickeau            return;
93*4cadd4f8SNickeau        }
94*4cadd4f8SNickeau
95*4cadd4f8SNickeau        $newValue = $data[MetadataDokuWikiStore::NEW_VALUE_ATTRIBUTE];
96*4cadd4f8SNickeau        $path = $data[PagePath::getPersistentName()];
97*4cadd4f8SNickeau        Event::createEvent(
98*4cadd4f8SNickeau            self::QUALITY_MUTATION_EVENT_NAME,
99*4cadd4f8SNickeau            [
100*4cadd4f8SNickeau                PagePath::getPersistentName() => $path,
101*4cadd4f8SNickeau                self::DESC => "The variable ($variableName) has the new value ($newValue)"
102*4cadd4f8SNickeau            ]
103*4cadd4f8SNickeau        );
104*4cadd4f8SNickeau
105*4cadd4f8SNickeau
106*4cadd4f8SNickeau    }
107*4cadd4f8SNickeau
108*4cadd4f8SNickeau}
109*4cadd4f8SNickeau
110*4cadd4f8SNickeau
111*4cadd4f8SNickeau
112