Merge branch 'MDL-58857-master' of git://github.com/andrewnicols/moodle

This commit is contained in:
David Monllao 2017-05-10 13:50:10 +08:00
commit 265a1eafc5
2 changed files with 31 additions and 7 deletions

View File

@ -101,6 +101,12 @@ if (function_exists('opcache_invalidate')) {
// indirectly calls the protected init() method is good here.
core_component::get_core_subsystems();
if (is_major_upgrade_required() && isloggedin()) {
// A major upgrade is required.
// Terminate the session and redirect back here before anything DB-related happens.
redirect_if_major_upgrade_required();
}
require_once($CFG->libdir.'/adminlib.php'); // various admin-only functions
require_once($CFG->libdir.'/upgradelib.php'); // general upgrade/install related functions

View File

@ -1388,16 +1388,34 @@ function disable_output_buffering() {
}
/**
* 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.
* 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.
*
* @return bool
*/
function is_major_upgrade_required() {
global $CFG;
$lastmajordbchanges = 2017040403.00;
$required = empty($CFG->version);
$required = $required || (float)$CFG->version < $lastmajordbchanges;
$required = $required || during_initial_install();
$required = $required || !empty($CFG->adminsetuppending);
return $required;
}
/**
* Redirect to the Notifications page if a major upgrade is required, and
* terminate the current user session.
*/
function redirect_if_major_upgrade_required() {
global $CFG;
$lastmajordbchanges = 2017040403.00;
if (empty($CFG->version) or (float)$CFG->version < $lastmajordbchanges or
during_initial_install() or !empty($CFG->adminsetuppending)) {
if (is_major_upgrade_required()) {
try {
@\core\session\manager::terminate_current();
} catch (Exception $e) {