66 lines
1.7 KiB
PHP
66 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace dokuwiki\Action;
|
|
|
|
use dokuwiki\Action\Exception\ActionAbort;
|
|
use dokuwiki\Extension\Event;
|
|
|
|
/**
|
|
* Class Redirect
|
|
*
|
|
* Used to redirect to the current page with the last edited section as a target if found
|
|
*
|
|
* @package dokuwiki\Action
|
|
*/
|
|
class Redirect extends AbstractAliasAction {
|
|
|
|
/**
|
|
* Redirect to the show action, trying to jump to the previously edited section
|
|
*
|
|
* @triggers ACTION_SHOW_REDIRECT
|
|
* @throws ActionAbort
|
|
*/
|
|
public function preProcess() {
|
|
global $PRE;
|
|
global $TEXT;
|
|
global $INPUT;
|
|
global $ID;
|
|
global $ACT;
|
|
|
|
$opts = array(
|
|
'id' => $ID,
|
|
'preact' => $ACT
|
|
);
|
|
//get section name when coming from section edit
|
|
if($INPUT->has('hid')) {
|
|
// Use explicitly transmitted header id
|
|
$opts['fragment'] = $INPUT->str('hid');
|
|
} else if($PRE && preg_match('/^\s*==+([^=\n]+)/', $TEXT, $match)) {
|
|
// Fallback to old mechanism
|
|
$check = false; //Byref
|
|
$opts['fragment'] = sectionID($match[0], $check);
|
|
}
|
|
|
|
// execute the redirect
|
|
Event::createAndTrigger('ACTION_SHOW_REDIRECT', $opts, array($this, 'redirect'));
|
|
|
|
// should never be reached
|
|
throw new ActionAbort('show');
|
|
}
|
|
|
|
/**
|
|
* Execute the redirect
|
|
*
|
|
* Default action for ACTION_SHOW_REDIRECT
|
|
*
|
|
* @param array $opts id and fragment for the redirect and the preact
|
|
*/
|
|
public function redirect($opts) {
|
|
$go = wl($opts['id'], '', true, '&');
|
|
if(isset($opts['fragment'])) $go .= '#' . $opts['fragment'];
|
|
|
|
//show it
|
|
send_redirect($go);
|
|
}
|
|
}
|