<?php
/**
* Plugin pageredirect: redirect browser to another wiki page
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Christopher Smith <chris@jalakai.co.uk>
*/
if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'syntax.php');
/**
* All DokuWiki plugins to extend the parser/rendering mechanism
* need to inherit from this class
*/
class syntax_plugin_pageredirect extends DokuWiki_Syntax_Plugin {
/**
* return some info
*/
function getInfo(){
return array(
'author' => 'David Lorentsen',
'email' => 'zyberdog@quakenet.org',
'date' => '2006-11-09',
'name' => 'Page Redirector',
'desc' => 'Redirects page requests based on content',
'url' => 'http://wiki.splitbrain.org/plugin:page_redirector',
);
}
function getType(){ return 'substition'; }
function getPType(){ return 'block'; }
function getSort(){ return 1; }
function connectTo($mode) { $this->Lexer->addSpecialPattern('~~REDIRECT>[a-zA-Z0-9_\-:]+~~',$mode,'plugin_pageredirect'); }
/**
* Handle the match
*/
function handle($match, $state, $pos, &$handler){
$page = substr($match,11,-2);
return array($page);
}
/**
* Create output
*/
function render($format, &$renderer, $data) {
switch ($format) {
case 'metadata' :
$renderer->meta['relation']['isreplacedby'] = $data[0];
return true;
case 'xhtml' :
// output a page moved message
$renderer->doc.= '<p class="redirect">'.sprintf($this->getLang('page_moved'),wl($data[0])).'</p>';
// hook into the post render event to allow the page to be redirected
global $EVENT_HANDLER;
$action =& plugin_load('action','pageredirect');
$EVENT_HANDLER->register_hook('TPL_ACT_RENDER','AFTER', $action, 'handle_page_redirect');
return true;
default :
return false;
}
return false;
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :<?php
/**
* Action Plugin: Redirects page requests based on content
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author David Lorentsen <zyberdog@quakenet.org>
*/
if(!defined('DOKU_INC')) die();
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'action.php');
/**
* All DokuWiki action plugins need to inherit from this class
*/
class action_plugin_pageredirect extends DokuWiki_Action_Plugin {
/**
* return some info
*/
function getInfo(){
return array(
'author' => 'David Lorentsen',
'email' => 'zyberdog@quakenet.org',
'date' => '2006-11-09',
'name' => 'Page Redirector',
'desc' => 'Redirects page requests based on content',
'url' => 'http://wiki.splitbrain.org/plugin:page_redirector',
);
}
function register(&$controller) {
$controller->register_hook('DOKUWIKI_STARTED','BEFORE', $this, 'handle_page_redirect');
# $controller->register_hook('PARSER_METADATA_RENDER','BEFORE', $this, 'handle_redirect_metadata');
}
function handle_page_redirect(&$event, $param) {
global $ID, $ACT, $REV;
// only redirect on page show for the current page revision
if (($ACT == 'show' || $ACT == '') && empty($REV)) {
$page = p_get_metadata($ID,'relation isreplacedby');
if (empty($page)) { return; }
if (isset($_GET['redirect']) && $_GET['redirect'] == 'no') { return; }
// verify metadata currency
if (@filemtime(metaFN($ID,'.meta')) < @filemtime(wikiFN($ID))) { return; }
header("Location: ".wl($page));
exit();
}
}
function handle_redirect_metadata(&$event, $param) {
unset($event->data->meta['relation']['isreplacedby']);
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :<?php /** * English language file * * @author Chris Smith <chris@jalakai.co.uk> */ $lang['page_moved'] = 'This page has been moved to a <a href="%s">new location</a>';