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