/action.php |
@@ -5,54 +5,53 @@ |
* Action plugin component, for cache validity determination |
* |
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html) |
* @author Wizardry and Steamworks office@grimore.org |
* original: Christopher Smith <chris@jalakai.co.uk> |
* @author Christopher Smith <chris@jalakai.co.uk> |
*/ |
if(!defined('DOKU_INC')) die(); // no Dokuwiki, no go |
|
if(!defined('DOKU_INC')) die(); // no DokuWiki, no go |
|
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); |
require_once(DOKU_PLUGIN.'action.php'); |
|
|
/** |
* All DokuWiki plugins to extend the parser/rendering mechanism |
* need to inherit from this class |
*/ |
class action_plugin_source extends DokuWiki_Action_Plugin { |
|
|
/** |
* return some info |
*/ |
function getInfo(){ |
return array( |
'author' => 'Wizardry and Steamworks', |
'email' => 'office@grimore.org', |
'date' => '2016-11-19', |
'author' => 'Christopher Smith', |
'email' => 'chris@jalakai.co.uk', |
'date' => '2008-08-13', |
'name' => 'Source Plugin', |
'desc' => 'Include a remote source file', |
'url' => 'http://grimore.org/dokuwiki/plugins/source', |
'url' => 'http://www.dokuwiki.org/plugin:source', |
); |
} |
|
|
/** |
* plugin should use this method to register its handlers with the dokuwiki's event controller |
* plugin should use this method to register its handlers with the DokuWiki's event controller |
*/ |
function register(Doku_Event_Handler $controller) { |
$controller->register_hook('PARSER_CACHE_USE','BEFORE', $this, '_cache_prepare'); |
} |
|
|
/** |
* prepare the cache object for default _useCache action |
*/ |
function _cache_prepare(&$event, $param) { |
$cache =& $event->data; |
|
|
// we're only interested in wiki pages and supported render modes |
if (!isset($cache->page)) return; |
if (!isset($cache->mode) || in_array($cache->mode,array('i','metadata'))) return; |
|
|
$max_age = $this->_cache_maxage($cache->page); |
if (is_null($max_age)) return; |
|
|
if ($max_age <= 0) { |
// expire the cache |
$event->preventDefault(); |
@@ -60,10 +59,10 @@ |
$event->result = false; |
return; |
} |
|
|
$cache->depends['age'] = !empty($cache->depends['age']) ? min($cache->depends['age'],$max_age): $max_age; |
} |
|
|
/** |
* determine the max allowable age of the cache |
* |
@@ -75,28 +74,29 @@ |
function _cache_maxage($id) { |
$hasPart = p_get_metadata($id, 'relation haspart'); |
if (empty($hasPart) || !is_array($hasPart)) return null; |
|
|
$location = $this->getConf('location'); |
|
|
$age = 0; |
foreach ($hasPart as $file => $data) { |
// ensure the metadata entry was created by or for this plugin |
if (empty($data['owner']) || $data['owner'] != $this->getPluginName()) continue; |
|
|
$file = $this->getConf['location'].$file; |
|
|
// determine max allowable age for the cache |
// if filemtime can't be determined, either for a non-existent $file or for a $file using |
// an unsupported scheme, expire the cache immediately/always |
$mtime = @filemtime($file); |
if (!$mtime) { return 0; } |
|
|
$age = max($age,$mtime); |
} |
|
|
return $age ? time()-$age : null; |
} |
|
|
} |
|
//Setup VIM: ex: et ts=4 enc=utf-8 : |
|
//Setup VIM: ex: et ts=4 enc=utf-8 : |