From: tjhunt <tjhunt> Date: Fri, 10 Jul 2009 08:44:01 +0000 (+0000) Subject: upgrade: MDL-19763 Improve the redirect that forces a DB upgrade when there are major... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=5e39d7aa094f0b80f0544ef73634ff1c33aa066c;p=moodle.git upgrade: MDL-19763 Improve the redirect that forces a DB upgrade when there are major changes Also fix redirect, so 303 redirects don't need to fully initialise $OUTPUT. --- diff --git a/index.php b/index.php index 0b244e0c68..bad1b72d4e 100644 --- a/index.php +++ b/index.php @@ -34,14 +34,7 @@ require_once($CFG->dirroot .'/course/lib.php'); require_once($CFG->libdir .'/filelib.php'); - // check if major upgrade needed - also present in login/index.php - if (empty($CFG->version) or (int)$CFG->version < 2009071000 or !empty($CFG->adminsetuppending)) { //1.9 or older - try { - @require_logout(); - } catch (Exception $e) { - } - redirect("$CFG->wwwroot/$CFG->admin/"); - } + redirect_if_major_upgrade_required(); if ($CFG->forcelogin) { require_login(); diff --git a/lang/en_utf8/moodle.php b/lang/en_utf8/moodle.php index 19bf6a56c2..c32233df69 100644 --- a/lang/en_utf8/moodle.php +++ b/lang/en_utf8/moodle.php @@ -1284,6 +1284,7 @@ $string['recentactivity'] = 'Recent Activity'; $string['recentactivityreport'] = 'Full report of recent activity...'; $string['recipientslist'] = 'Recipients list'; $string['recreatedcategory'] = 'Recreated category $a'; +$string['redirect'] = 'Redirect'; $string['refreshingevents'] = 'Refreshing events'; $string['refresh'] = 'Refresh'; $string['registration'] = 'Moodle Registration'; diff --git a/lib/setuplib.php b/lib/setuplib.php index d73a8c74fe..ab2a3a42b8 100644 --- a/lib/setuplib.php +++ b/lib/setuplib.php @@ -655,6 +655,29 @@ function get_real_size($size=0) { return $size; } +/** + * Check whether a major upgrade is needed. That is defined as an upgrade that + * changes something really fundamental in the database, so nothing can possibly + * work until the database has been updated, and that is defined by the hard-coded + * version number in this function. + */ +function redirect_if_major_upgrade_required() { + global $CFG; + $lastmajordbchanges = 2009071000; + if (empty($CFG->version) or (int)$CFG->version < $lastmajordbchanges or + during_initial_install() or !empty($CFG->adminsetuppending)) { + try { + @session_get_instance()->terminate_current(); + } catch (Exception $e) { + // Ignore any errors, redirect to upgrade anyway. + } + @header($_SERVER['SERVER_PROTOCOL'] . ' 303 See Other'); + @header('Location: ' . $CFG->wwwroot . '/' . $CFG->admin . '/index.php'); + echo bootstrap_renderer::plain_redirect_message($encodedurl); + exit; + } +} + /** * Create a directory. * @@ -839,39 +862,51 @@ class bootstrap_renderer { @header('Expires: Mon, 20 Aug 1969 09:23:00 GMT'); @header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); - if (function_exists('get_string') && function_exists('get_html_lang')) { - $htmllang = get_html_lang(); + if (function_exists('get_string')) { $strerror = get_string('error'); } else { - $htmllang = ''; $strerror = 'Error'; } - $output = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" ' . $htmllang . '> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<title>' . $strerror . '</title> -</head><body> -<div style="margin-top: 6em; margin-left:auto; margin-right:auto; color:#990000; text-align:center; font-size:large; border-width:1px; + $content = '<div style="margin-top: 6em; margin-left:auto; margin-right:auto; color:#990000; text-align:center; font-size:large; border-width:1px; border-color:black; background-color:#ffffee; border-style:solid; border-radius: 20px; border-collapse: collapse; width: 80%; -moz-border-radius: 20px; padding: 15px"> ' . $message . ' </div>'; if (!empty($CFG->debug) && $CFG->debug >= DEBUG_DEVELOPER) { if (!empty($debuginfo)) { - $output .= '<div class="notifytiny">' . $debuginfo . '</div>'; + $content .= '<div class="notifytiny">' . $debuginfo . '</div>'; } if (!empty($backtrace)) { - $output .= '<div class="notifytiny">Stack trace: ' . format_backtrace($backtrace, false) . '</div>'; + $content .= '<div class="notifytiny">Stack trace: ' . format_backtrace($backtrace, false) . '</div>'; } } - - $output .= '</body></html>'; - return $output; + + return self::plain_page($strerror, $content); } public static function early_notification($message, $classes = 'notifyproblem') { return '<div class="' . $classes . '">' . $message . '</div>'; } + + public static function plain_redirect_message($encodedurl) { + $message = '<p>' . get_string('pageshouldredirect') . '</p><p><a href="'. + $encodedurl .'">'. get_string('continue') .'</a></p>'; + return plain_page(get_string('redirect'), $message); + } + + protected static function plain_page($title, $content) { + if (function_exists('get_string') && function_exists('get_html_lang')) { + $htmllang = get_html_lang(); + } else { + $htmllang = ''; + } + + return '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" ' . $htmllang . '> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<title>' . $title . '</title> +</head><body>' . $content . '</body></html>'; + } } diff --git a/lib/weblib.php b/lib/weblib.php index 81032bcff0..c61c4fe92c 100644 --- a/lib/weblib.php +++ b/lib/weblib.php @@ -4941,6 +4941,8 @@ function redirect($url, $message='', $delay=-1) { //302 might not work for POST requests, 303 is ignored by obsolete clients. @header($_SERVER['SERVER_PROTOCOL'] . ' 303 See Other'); @header('Location: '.$url); + echo bootstrap_renderer::plain_redirect_message($encodedurl); + exit; } // Include a redirect message, even with a HTTP redirect, because that is recommended practice. diff --git a/login/index.php b/login/index.php index d6105c3b2c..8ec7ac2cee 100644 --- a/login/index.php +++ b/login/index.php @@ -3,14 +3,7 @@ require_once("../config.php"); -/// check if major upgrade needed - also present in /index.php - if ((int)$CFG->version < 2009071000) { //1.9 or older - try { - @require_logout(); - } catch (Exception $e) { - } - redirect("$CFG->wwwroot/$CFG->admin/"); - } + redirect_if_major_upgrade_required(); $loginguest = optional_param('loginguest', 0, PARAM_BOOL); // determines whether visitors are logged in as guest automatically $testcookies = optional_param('testcookies', 0, PARAM_BOOL); // request cookie test