xref: /plugin/notification/action/cache.php (revision 94db1f407199fbe5341fc03c87c134af7da06d1f)
1*94db1f40SSzymon Olewniczak<?php
2*94db1f40SSzymon Olewniczak/**
3*94db1f40SSzymon Olewniczak * DokuWiki Plugin notification (Action Component)
4*94db1f40SSzymon Olewniczak *
5*94db1f40SSzymon Olewniczak * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6*94db1f40SSzymon Olewniczak * @author  Szymon Olewniczak <it@rid.pl>
7*94db1f40SSzymon Olewniczak */
8*94db1f40SSzymon Olewniczak
9*94db1f40SSzymon Olewniczak// must be run within Dokuwiki
10*94db1f40SSzymon Olewniczakif (!defined('DOKU_INC')) {
11*94db1f40SSzymon Olewniczak    die();
12*94db1f40SSzymon Olewniczak}
13*94db1f40SSzymon Olewniczak
14*94db1f40SSzymon Olewniczakclass action_plugin_notification_cache extends DokuWiki_Action_Plugin
15*94db1f40SSzymon Olewniczak{
16*94db1f40SSzymon Olewniczak
17*94db1f40SSzymon Olewniczak    /**
18*94db1f40SSzymon Olewniczak     * Registers a callback function for a given event
19*94db1f40SSzymon Olewniczak     *
20*94db1f40SSzymon Olewniczak     * @param Doku_Event_Handler $controller DokuWiki's event controller object
21*94db1f40SSzymon Olewniczak     *
22*94db1f40SSzymon Olewniczak     * @return void
23*94db1f40SSzymon Olewniczak     */
24*94db1f40SSzymon Olewniczak    public function register(Doku_Event_Handler $controller)
25*94db1f40SSzymon Olewniczak    {
26*94db1f40SSzymon Olewniczak        $controller->register_hook('PARSER_CACHE_USE', 'BEFORE', $this, 'handle_parser_cache_use');
27*94db1f40SSzymon Olewniczak    }
28*94db1f40SSzymon Olewniczak
29*94db1f40SSzymon Olewniczak    /**
30*94db1f40SSzymon Olewniczak     *
31*94db1f40SSzymon Olewniczak     * @param Doku_Event $event  event object by reference
32*94db1f40SSzymon Olewniczak     * @param mixed      $param  [the parameters passed as fifth argument to register_hook() when this
33*94db1f40SSzymon Olewniczak     *                           handler was registered]
34*94db1f40SSzymon Olewniczak     *
35*94db1f40SSzymon Olewniczak     * @return void
36*94db1f40SSzymon Olewniczak     */
37*94db1f40SSzymon Olewniczak    public function handle_parser_cache_use(Doku_Event $event, $param)
38*94db1f40SSzymon Olewniczak    {
39*94db1f40SSzymon Olewniczak        /** @var cache_renderer $cache */
40*94db1f40SSzymon Olewniczak        $cache = $event->data;
41*94db1f40SSzymon Olewniczak
42*94db1f40SSzymon Olewniczak        if(!$cache->page) return;
43*94db1f40SSzymon Olewniczak        //purge only xhtml cache
44*94db1f40SSzymon Olewniczak        if($cache->mode != 'xhtml') return;
45*94db1f40SSzymon Olewniczak
46*94db1f40SSzymon Olewniczak        //Check if it is plugins
47*94db1f40SSzymon Olewniczak        $notification = p_get_metadata($cache->page, 'plugin notification');
48*94db1f40SSzymon Olewniczak        if(!$notification) return;
49*94db1f40SSzymon Olewniczak
50*94db1f40SSzymon Olewniczak        if ($notification['dynamic user']) {
51*94db1f40SSzymon Olewniczak            $cache->_nocache = true;
52*94db1f40SSzymon Olewniczak            return;
53*94db1f40SSzymon Olewniczak        }
54*94db1f40SSzymon Olewniczak
55*94db1f40SSzymon Olewniczak        $data = [
56*94db1f40SSzymon Olewniczak            'plugins' => $notification['plugins'],
57*94db1f40SSzymon Olewniczak            'dependencies' => [],
58*94db1f40SSzymon Olewniczak            '_nocache' => false
59*94db1f40SSzymon Olewniczak        ];
60*94db1f40SSzymon Olewniczak        trigger_event('PLUGIN_NOTIFICATION_CACHE_DEPENDENCIES', $data);
61*94db1f40SSzymon Olewniczak
62*94db1f40SSzymon Olewniczak        //add a media directories to dependencies
63*94db1f40SSzymon Olewniczak        $cache->depends['files'] = array_merge($cache->depends['files'], $data['dependencies']);
64*94db1f40SSzymon Olewniczak        $cache->_nocache = $data['_nocache'];
65*94db1f40SSzymon Olewniczak    }
66*94db1f40SSzymon Olewniczak}
67