mirror of
https://github.com/moodle/moodle.git
synced 2025-04-15 21:45:37 +02:00
MDL-19696 & MDL-16706 refactor sam's redirect changes, so they can work during initial install.
This commit is contained in:
parent
d436d197d1
commit
ae96b517a2
@ -470,7 +470,7 @@ class theme_config {
|
||||
$this->customcssoutputfunction = 'output_css_for_css_edit';
|
||||
}
|
||||
|
||||
if ($CFG->smartpix) {
|
||||
if (!empty($CFG->smartpix)) {
|
||||
$this->iconfinder = 'smartpix_icon_finder';
|
||||
} else if ($this->custompix) {
|
||||
$this->iconfinder = 'theme_icon_finder';
|
||||
@ -1416,39 +1416,25 @@ class moodle_core_renderer extends moodle_renderer_base {
|
||||
* set this is a requirement and defaults to 3, set to 0 no delay
|
||||
* @param string $messageclass The css class to put on the message that is
|
||||
* being displayed to the user
|
||||
* @param boolean $debugdisableredirect this redirect has been disabled for
|
||||
* debugging purposes. Display a message that explains, and don't
|
||||
* trigger the redirect.
|
||||
* @return string The HTML to display to the user before dying, may contain
|
||||
* meta refresh, javascript refresh, and may have set header redirects
|
||||
*/
|
||||
public function redirect($encodedurl, $message, $delay, $messageclass='notifyproblem') {
|
||||
public function redirect_message($encodedurl, $message, $delay, $debugdisableredirect) {
|
||||
global $CFG;
|
||||
$url = str_replace('&', '&', $encodedurl);
|
||||
|
||||
$disableredirect = false;
|
||||
|
||||
if ($delay!=0) {
|
||||
/// At developer debug level. Don't redirect if errors have been printed on screen.
|
||||
/// Currenly only works in PHP 5.2+; we do not want strict PHP5 errors
|
||||
$lasterror = error_get_last();
|
||||
$error = defined('DEBUGGING_PRINTED') or (!empty($lasterror) && ($lasterror['type'] & DEBUG_DEVELOPER));
|
||||
$errorprinted = debugging('', DEBUG_ALL) && $CFG->debugdisplay && $error;
|
||||
if ($errorprinted) {
|
||||
$disableredirect= true;
|
||||
$message = "<strong>Error output, so disabling automatic redirect.</strong></p><p>" . $message;
|
||||
}
|
||||
}
|
||||
|
||||
switch ($this->page->state) {
|
||||
case moodle_page::STATE_BEFORE_HEADER :
|
||||
// No output yet it is safe to delivery the full arsenol of redirect methods
|
||||
if (!$disableredirect) {
|
||||
@header($_SERVER['SERVER_PROTOCOL'] . ' 303 See Other'); //302 might not work for POST requests, 303 is ignored by obsolete clients
|
||||
@header('Location: '.$url);
|
||||
if (!$debugdisableredirect) {
|
||||
// Don't use exactly the same time here, it can cause problems when both redirects fire at the same time.
|
||||
$this->metarefreshtag = '<meta http-equiv="refresh" content="'. $delay .'; url='. $encodedurl .'" />'."\n";
|
||||
$this->page->requires->js_function_call('document.location.replace', array($url))->after_delay($delay+3);
|
||||
$this->page->requires->js_function_call('document.location.replace', array($url))->after_delay($delay + 3);
|
||||
}
|
||||
$output = $this->header();
|
||||
$output .= $this->notification($message, $messageclass);
|
||||
$output .= $this->footer();
|
||||
break;
|
||||
case moodle_page::STATE_PRINTING_HEADER :
|
||||
// We should hopefully never get here
|
||||
@ -1458,17 +1444,21 @@ class moodle_core_renderer extends moodle_renderer_base {
|
||||
// We really shouldn't be here but we can deal with this
|
||||
debugging("You should really redirect before you start page output");
|
||||
if (!$disableredirect) {
|
||||
$this->page->requires->js_function_call('document.location.replace', array($url))->after_delay($delay+3);
|
||||
$this->page->requires->js_function_call('document.location.replace', array($url))->after_delay($delay);
|
||||
}
|
||||
$output = $this->opencontainers->pop_all_but_last();
|
||||
$output .= $this->notification($message, $messageclass);
|
||||
$output .= $this->footer();
|
||||
break;
|
||||
case moodle_page::STATE_DONE :
|
||||
// Too late to be calling redirect now
|
||||
throw new coding_exception('You cannot redirect after the entire page has been generated');
|
||||
break;
|
||||
}
|
||||
$output .= $this->notification($message, 'redirectmessage');
|
||||
$output .= '<a href="'. $encodedurl .'">'. get_string('continue') .'</a>';
|
||||
if ($debugdisableredirect) {
|
||||
$output .= '<p><strong>Error output, so disabling automatic redirect.</strong></p>';
|
||||
}
|
||||
$output .= $this->footer();
|
||||
return $output;
|
||||
}
|
||||
|
||||
|
@ -4870,16 +4870,20 @@ function redirect($url, $message='', $delay=-1) {
|
||||
$url = $SESSION->sid_process_url($url);
|
||||
}
|
||||
|
||||
$lasterror = error_get_last();
|
||||
$debugdisableredirect = defined('DEBUGGING_PRINTED') ||
|
||||
(!empty($CFG->debugdisplay) && !empty($lasterror) && ($lasterror['type'] & DEBUG_DEVELOPER));
|
||||
|
||||
$usingmsg = false;
|
||||
if ($message!=='') {
|
||||
$usingmsg = true;
|
||||
if ($delay===-1 || !is_numeric($delay)) {
|
||||
if (!empty($message)) {
|
||||
if ($delay === -1 || !is_numeric($delay)) {
|
||||
$delay = 3;
|
||||
}
|
||||
$message = clean_text($message);
|
||||
} else {
|
||||
$message = 'This page should redirect. If nothing is happening please click the continue button below.';
|
||||
$message = get_string('pageshouldredirect');
|
||||
$delay = 0;
|
||||
// We are going to try to use a HTTP redirect, so we need a full URL.
|
||||
if (!preg_match('|^[a-z]+:|', $url)) {
|
||||
// Get host name http://www.wherever.com
|
||||
$hostpart = preg_replace('|^(.*?[^:/])/.*$|', '$1', $CFG->wwwroot);
|
||||
@ -4901,7 +4905,6 @@ function redirect($url, $message='', $delay=-1) {
|
||||
}
|
||||
}
|
||||
|
||||
$performanceinfo = '';
|
||||
if (defined('MDL_PERF') || (!empty($CFG->perfdebug) and $CFG->perfdebug > 7)) {
|
||||
if (defined('MDL_PERFTOLOG') && !function_exists('register_shutdown_function')) {
|
||||
$perf = get_performance_info();
|
||||
@ -4912,11 +4915,16 @@ function redirect($url, $message='', $delay=-1) {
|
||||
$encodedurl = preg_replace("/\&(?![a-zA-Z0-9#]{1,8};)/", "&", $url);
|
||||
$encodedurl = preg_replace('/^.*href="([^"]*)".*$/', "\\1", clean_text('<a href="'.$encodedurl.'" />'));
|
||||
|
||||
$message .= '<a href="'. $encodedurl .'">'. get_string('continue') .'</a>';
|
||||
if ($delay == 0 && !$debugdisableredirect && !headers_sent()) {
|
||||
//302 might not work for POST requests, 303 is ignored by obsolete clients.
|
||||
@header($_SERVER['SERVER_PROTOCOL'] . ' 303 See Other');
|
||||
@header('Location: '.$url);
|
||||
}
|
||||
|
||||
// Include a redirect message, even with a HTTP redirect, because that is recommended practice.
|
||||
$CFG->docroot = false; // to prevent the link to moodle docs from being displayed on redirect page.
|
||||
echo $OUTPUT->redirect($encodedurl, $message, $delay);
|
||||
die();
|
||||
echo $OUTPUT->redirect_message($encodedurl, $message, $delay, $debugdisableredirect);
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user