<?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 = ['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'); } elseif ($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, [$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); } }