1<?php 2 3if(!defined('DOKU_INC')) die(); 4 5class action_plugin_approve_cache extends DokuWiki_Action_Plugin 6{ 7 /** 8 * Registers a callback function for a given event 9 * 10 * @param Doku_Event_Handler $controller DokuWiki's event controller object 11 * 12 * @return void 13 */ 14 public function register(Doku_Event_Handler $controller) 15 { 16 $controller->register_hook('PARSER_CACHE_USE', 'BEFORE', $this, 'handle_parser_cache_use'); 17 } 18 /** 19 * @param Doku_Event $event event object by reference 20 * @param mixed $param [the parameters passed as fifth argument to register_hook() when this 21 * handler was registered] 22 * 23 * @return void 24 */ 25 public function handle_parser_cache_use(Doku_Event $event, $param) 26 { 27 /** @var cache_renderer $cache */ 28 $cache = $event->data; 29 30 if(!$cache->page) return; 31 //purge only xhtml cache 32 if($cache->mode != 'xhtml') return; 33 34 //Check if it is plugins 35 $approve = p_get_metadata($cache->page, 'plugin approve'); 36 if(!$approve) return; 37 38 if ($approve['dynamic_approver']) { 39 $cache->_nocache = true; 40 } elseif ($approve['approve_table']) { 41 try { 42 /** @var \helper_plugin_approve_db $db_helper */ 43 $db_helper = plugin_load('helper', 'approve_db'); 44 $sqlite = $db_helper->getDB(); 45 $cache->depends['files'][] = $sqlite->getAdapter()->getDbFile(); 46 } catch (Exception $e) { 47 msg($e->getMessage(), -1); 48 return; 49 } 50 } 51 } 52} 53