diff --git a/mod/assign/upgradelib.php b/mod/assign/upgradelib.php index c34276e70fd..e1e63b9dadd 100644 --- a/mod/assign/upgradelib.php +++ b/mod/assign/upgradelib.php @@ -56,11 +56,6 @@ class assign_upgrade_manager { global $DB, $CFG, $USER; // Steps to upgrade an assignment. - // Is the user the admin? admin check goes here. - if (!is_siteadmin($USER->id)) { - return false; - } - core_php_time_limit::raise(ASSIGN_MAX_UPGRADE_TIME_SECS); // Get the module details. @@ -71,6 +66,14 @@ class assign_upgrade_manager { '*', MUST_EXIST); $oldcontext = context_module::instance($oldcoursemodule->id); + // We used to check for admin capability, but since Moodle 2.7 this is called + // during restore of a mod_assignment module. + // Also note that we do not check for any mod_assignment capabilities, because they can + // be removed so that users don't add new instances of the broken old thing. + if (!has_capability('mod/assign:addinstance', $oldcontext)) { + $log = get_string('couldnotcreatenewassignmentinstance', 'mod_assign'); + return false; + } // First insert an assign instance to get the id. $oldassignment = $DB->get_record('assignment', array('id'=>$oldassignmentid), '*', MUST_EXIST);