1<?php 2/** 3 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 4 * @author Jonas Fourquier <jonas@tuxfamily.org> 5 */ 6 7if(!defined('DOKU_INC')) die(); 8 9if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 10require_once(DOKU_PLUGIN.'action.php'); 11 12class action_plugin_page4release extends DokuWiki_Action_Plugin { 13 14 function getInfo() { 15 return confToHash(dirname(__FILE__).'/info.txt'); 16 } 17 18 function register(&$contr) { 19 $contr->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'indexer', array()); 20 } 21 22 function indexer(&$event, $param) { 23 global $conf, $ACT, $ID; 24 if ($ACT != 'preview' && !$REV) { 25 $page4release = unserialize(io_readFile($conf['indexdir'].'/page4release.idx', false)); 26 $filename = array_pop(explode(':',$ID)); 27 $release = p_get_metadata($ID, 'page4release',True); 28 if ((is_array($page4release)) && (array_key_exists($filename, $page4release))) { 29 // Le nom de page se trouve déjà dans l'index 30 if ( (array_key_exists($ID,$page4release[$filename]) && ($page4release[$filename][$ID] != $release)) 31 || (!array_key_exists($ID,$page4release[$filename]) && ($release)) 32 ) { 33 // La page qu'on modifie se trouve déjà dans l'index et release à été modifié. 34 // OU 35 // La page qu'on modifie ne se trouve pas dans l'index et une release est spécifié. 36 // Parcours l'ensemble des ID avec le même filename pour purger leur cache. 37 foreach ($page4release[$filename] as $otherId=>$otherRelease) { 38 if ($otherId != $ID) 39 p_set_metadata($otherId, array('cache' => 'expire'), False, False); 40 } 41 } 42 if ($release) 43 // contient une chaine, ajout / met a jour l'index 44 $page4release[$filename][$ID] = $release; 45 else 46 // ne contient plus de chaine, y supprime de l'index 47 unset($page4release[$filename][$ID]); 48 } elseif ($release) { 49 // Ne se trouve pas encore dans l'index mais contient une chaine, y ajoute 50 $page4release[$filename] = array($ID => $release); 51 } 52 io_saveFile($conf['indexdir'].'/page4release.idx', serialize($page4release)); 53 } 54 } 55} 56