xref: /plugin/notification/action/cache.php (revision 6cdebc539ff0654a6c1d30517990fc9fc0a7a4d7)
194db1f40SSzymon Olewniczak<?php
2*6cdebc53SAnna Dabrowska
3*6cdebc53SAnna Dabrowskause dokuwiki\Extension\ActionPlugin;
4*6cdebc53SAnna Dabrowskause dokuwiki\Extension\EventHandler;
5*6cdebc53SAnna Dabrowskause dokuwiki\Extension\Event;
6*6cdebc53SAnna Dabrowska
794db1f40SSzymon Olewniczak/**
894db1f40SSzymon Olewniczak * DokuWiki Plugin notification (Action Component)
994db1f40SSzymon Olewniczak *
1094db1f40SSzymon Olewniczak * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
1194db1f40SSzymon Olewniczak * @author  Szymon Olewniczak <it@rid.pl>
1294db1f40SSzymon Olewniczak */
1394db1f40SSzymon Olewniczak
14*6cdebc53SAnna Dabrowskaclass action_plugin_notification_cache extends ActionPlugin
1594db1f40SSzymon Olewniczak{
1694db1f40SSzymon Olewniczak    /**
1794db1f40SSzymon Olewniczak     * Registers a callback function for a given event
1894db1f40SSzymon Olewniczak     *
19*6cdebc53SAnna Dabrowska     * @param EventHandler $controller DokuWiki's event controller object
2094db1f40SSzymon Olewniczak     *
2194db1f40SSzymon Olewniczak     * @return void
2294db1f40SSzymon Olewniczak     */
23*6cdebc53SAnna Dabrowska    public function register(EventHandler $controller)
2494db1f40SSzymon Olewniczak    {
25*6cdebc53SAnna Dabrowska        $controller->register_hook('PARSER_CACHE_USE', 'BEFORE', $this, 'handleParserCacheUse');
2694db1f40SSzymon Olewniczak    }
2794db1f40SSzymon Olewniczak
2894db1f40SSzymon Olewniczak    /**
2994db1f40SSzymon Olewniczak     *
30*6cdebc53SAnna Dabrowska     * @param Event $event event object by reference
3194db1f40SSzymon Olewniczak     * @param mixed      $param  [the parameters passed as fifth argument to register_hook() when this
3294db1f40SSzymon Olewniczak     *                           handler was registered]
3394db1f40SSzymon Olewniczak     *
3494db1f40SSzymon Olewniczak     * @return void
3594db1f40SSzymon Olewniczak     */
36*6cdebc53SAnna Dabrowska    public function handleParserCacheUse(Event $event, $param)
3794db1f40SSzymon Olewniczak    {
3894db1f40SSzymon Olewniczak        /** @var cache_renderer $cache */
3994db1f40SSzymon Olewniczak        $cache = $event->data;
4094db1f40SSzymon Olewniczak
4194db1f40SSzymon Olewniczak        if (!$cache->page) return;
4294db1f40SSzymon Olewniczak        //purge only xhtml cache
4394db1f40SSzymon Olewniczak        if ($cache->mode != 'xhtml') return;
4494db1f40SSzymon Olewniczak
4594db1f40SSzymon Olewniczak        //Check if it is plugins
4694db1f40SSzymon Olewniczak        $notification = p_get_metadata($cache->page, 'plugin notification');
4794db1f40SSzymon Olewniczak        if (!$notification) return;
4894db1f40SSzymon Olewniczak
4994db1f40SSzymon Olewniczak        if ($notification['dynamic user']) {
5094db1f40SSzymon Olewniczak            $cache->_nocache = true;
5194db1f40SSzymon Olewniczak            return;
5294db1f40SSzymon Olewniczak        }
5394db1f40SSzymon Olewniczak
5494db1f40SSzymon Olewniczak        $data = [
5594db1f40SSzymon Olewniczak            'plugins' => $notification['plugins'],
5694db1f40SSzymon Olewniczak            'dependencies' => [],
5794db1f40SSzymon Olewniczak            '_nocache' => false
5894db1f40SSzymon Olewniczak        ];
59*6cdebc53SAnna Dabrowska        Event::createAndTrigger('PLUGIN_NOTIFICATION_CACHE_DEPENDENCIES', $data);
6094db1f40SSzymon Olewniczak
6194db1f40SSzymon Olewniczak        //add a media directories to dependencies
6294db1f40SSzymon Olewniczak        $cache->depends['files'] = array_merge($cache->depends['files'], $data['dependencies']);
6394db1f40SSzymon Olewniczak        $cache->_nocache = $data['_nocache'];
6494db1f40SSzymon Olewniczak    }
6594db1f40SSzymon Olewniczak}
66