Skip to content

Commit

Permalink
Merge pull request #40 from alexdraconian/move
Browse files Browse the repository at this point in the history
  • Loading branch information
glensc committed Jan 9, 2022
2 parents 94b9bd6 + 93d5356 commit d85153b
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 1 deletion.
64 changes: 64 additions & 0 deletions action.php
Expand Up @@ -27,6 +27,10 @@ public function register(Doku_Event_Handler $controller) {
$controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, 'handle_tpl_act_render', null, PHP_INT_MIN);

$controller->register_hook('INDEXER_PAGE_ADD', 'BEFORE', $this, 'handle_indexer');

// Handle move plugin
$controller->register_hook('PLUGIN_MOVE_HANDLERS_REGISTER', 'BEFORE', $this, 'handle_move_register');

}

public function handle_dokuwiki_started(&$event, $param) {
Expand Down Expand Up @@ -193,4 +197,64 @@ private function redirect($url) {
header("HTTP/1.1 301 Moved Permanently");
send_redirect($url);
}

public function handle_move_register(Doku_Event $event, $params) {
$event->data['handlers']['pageredirect'] = array($this, 'rewrite_redirect');
}

public function rewrite_redirect($match, $state, $pos, $plugin, helper_plugin_move_handler $handler) {

$metadata = $this->get_metadata($ID);
if ($metadata[1]) return $match; // Fail-safe for external redirection (Do not rewrite)

$match = trim($match);

if (substr($match, 0, 1) == "~") {
// "~~REDIRECT>pagename#anchor~~" pattern

// Strip syntax
$match = substr($match, 2, strlen($match) - 4);

list($syntax, $src, $anchor) = array_pad(preg_split("/>|#/", $match), 3, "");

// Resolve new source.
if (method_exists($handler, 'adaptRelativeId')) {
$new_src = $handler->adaptRelativeId($src);
} else {
$new_src = $handler->resolveMoves($src, 'page');
$new_src = $handler->relativeLink($src, $new_src, 'page');
}

$result = "~~".$syntax.">".$new_src;
if (!empty($anchor)) $result .= "#".$anchor;
$result .= "~~";

return $result;

} else if (substr($match, 0, 1) == "#") {
// "#REDIRECT pagename#anchor" pattern

// Strip syntax
$match = substr($match, 1);

list($syntax, $src, $anchor) = array_pad(preg_split("/ |#/", $match), 3, "");

// Resolve new source.
if (method_exists($handler, 'adaptRelativeId')) {
$new_src = $handler->adaptRelativeId($src);
} else {
$new_src = $handler->resolveMoves($src, 'page');
$new_src = $handler->relativeLink($src, $new_src, 'page');
}

$result = "\n#".$syntax." ".$new_src;
if (!empty($anchor)) $result .= "#".$anchor;

return $result;
}

// Fail-safe
return $match;

}
}
6 changes: 5 additions & 1 deletion syntax.php
Expand Up @@ -124,7 +124,11 @@ public function render($format, Doku_Renderer $renderer, $data) {
if($format == 'metadata') {
// add redirection to metadata
$renderer->meta['relation']['isreplacedby'] = $data;
$renderer->meta['relation']['references'][$data[0]] = page_exists($data[0]);
if (!$data[1]) {
$page = preg_split("/\?|#/", $data[0])[0];
$renderer->meta['relation']['references'][$page] = page_exists($page);
}

return true;
}

Expand Down

0 comments on commit d85153b

Please sign in to comment.