From ead8ba3b63cf67ddeac784e2bf8933a283347b3f Mon Sep 17 00:00:00 2001 From: David Mudrak Date: Fri, 25 May 2012 11:17:43 +0200 Subject: [PATCH] MDL-32329 improved plugin dependencies check on upgrade Previously, it was the renderer method that actually called all_plugins_ok(). I believe that renderer methods should not be responsible for such an important step in the install/upgrade code flow. So dependencies are now checked by admin/index.php on upgrade, too. --- admin/index.php | 19 +++++++++++++++++++ admin/renderer.php | 18 +++++++----------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/admin/index.php b/admin/index.php index 42fdeb25883..bf3eea52aa6 100644 --- a/admin/index.php +++ b/admin/index.php @@ -252,6 +252,15 @@ if ($version > $CFG->version) { // upgrade $reloadurl = new moodle_url('/admin/index.php', array('confirmupgrade' => 1, 'confirmrelease' => 1)); + // check plugin dependencies first + $failed = array(); + if (!plugin_manager::instance()->all_plugins_ok($version, $failed)) { + $output = $PAGE->get_renderer('core', 'admin'); + echo $output->unsatisfied_dependencies_page($version, $failed, $reloadurl); + die(); + } + unset($failed); + if ($fetchupdates) { // no sesskey support guaranteed here if (empty($CFG->disableupdatenotifications)) { @@ -304,6 +313,16 @@ if (moodle_needs_upgrading()) { } $output = $PAGE->get_renderer('core', 'admin'); + + // check plugin dependencies first + $failed = array(); + if (!plugin_manager::instance()->all_plugins_ok($version, $failed)) { + echo $output->unsatisfied_dependencies_page($version, $failed, $PAGE->url); + die(); + } + unset($failed); + + // dependencies check passed, let's rock! echo $output->upgrade_plugin_check_page(plugin_manager::instance(), available_update_checker::instance(), $version, $showallplugins, new moodle_url($PAGE->url), diff --git a/admin/renderer.php b/admin/renderer.php index a4de04ebab4..d3ac14c6da2 100644 --- a/admin/renderer.php +++ b/admin/renderer.php @@ -219,19 +219,15 @@ class core_admin_renderer extends plugin_renderer_base { $output .= $this->box_end(); $output .= $this->upgrade_reload($reloadurl); - if ($pluginman->all_plugins_ok($version)) { - if ($pluginman->some_plugins_updatable()) { - $output .= $this->container_start('upgradepluginsinfo'); - $output .= $this->help_icon('upgradepluginsinfo', 'core_admin', get_string('upgradepluginsfirst', 'core_admin')); - $output .= $this->container_end(); - } - $button = new single_button($continueurl, get_string('upgradestart', 'admin'), 'get'); - $button->class = 'continuebutton'; - $output .= $this->render($button); - } else { - $output .= $this->box(get_string('pluginschecktodo', 'admin'), 'environmentbox errorbox'); + if ($pluginman->some_plugins_updatable()) { + $output .= $this->container_start('upgradepluginsinfo'); + $output .= $this->help_icon('upgradepluginsinfo', 'core_admin', get_string('upgradepluginsfirst', 'core_admin')); + $output .= $this->container_end(); } + $button = new single_button($continueurl, get_string('upgradestart', 'admin'), 'get'); + $button->class = 'continuebutton'; + $output .= $this->render($button); $output .= $this->footer(); return $output;