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