. /** * Upgrade code for install * * @package mod_assign * @copyright 2012 NetSpot {@link http://www.netspot.com.au} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); /** * upgrade this assignment instance - this function could be skipped but it will be needed later * @param int $oldversion The old version of the assign module * @return bool */ function xmldb_assign_upgrade($oldversion) { global $CFG, $DB; $dbman = $DB->get_manager(); if ($oldversion < 2017021500) { // Fix event types of assign events. $params = [ 'modulename' => 'assign', 'eventtype' => 'close' ]; $select = "modulename = :modulename AND eventtype = :eventtype"; $DB->set_field_select('event', 'eventtype', 'due', $select, $params); // Delete 'open' events. $params = [ 'modulename' => 'assign', 'eventtype' => 'open' ]; $DB->delete_records('event', $params); // Assign savepoint reached. upgrade_mod_savepoint(true, 2017021500, 'assign'); } if ($oldversion < 2017031300) { // Add a 'gradingduedate' field to the 'assign' table. $table = new xmldb_table('assign'); $field = new xmldb_field('gradingduedate', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, 0, 'cutoffdate'); // Conditionally launch add field. if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Assign savepoint reached. upgrade_mod_savepoint(true, 2017031300, 'assign'); } if ($oldversion < 2017042800) { // Update query to set the grading due date one week after the due date. // Only assign instances with grading due date not set and with a due date of not older than 3 weeks will be updated. $sql = "UPDATE {assign} SET gradingduedate = duedate + :weeksecs WHERE gradingduedate = 0 AND duedate > :timelimit"; // Calculate the time limit, which is 3 weeks before the current date. $interval = new DateInterval('P3W'); $timelimit = new DateTime(); $timelimit->sub($interval); // Update query params. $params = [ 'weeksecs' => WEEKSECS, 'timelimit' => $timelimit->getTimestamp() ]; // Execute DB update for assign instances. $DB->execute($sql, $params); // Assign savepoint reached. upgrade_mod_savepoint(true, 2017042800, 'assign'); } // Automatically generated Moodle v3.3.0 release upgrade line. // Put any upgrade step following this. if ($oldversion < 2017061200) { // Data fix any assign group override event priorities which may have been accidentally nulled due to a bug on the group // overrides edit form. // First, find all assign group override events having null priority (and join their corresponding assign_overrides entry). $sql = "SELECT e.id AS id, o.sortorder AS priority FROM {assign_overrides} o JOIN {event} e ON (e.modulename = 'assign' AND o.assignid = e.instance AND e.groupid = o.groupid) WHERE o.groupid IS NOT NULL AND e.priority IS NULL ORDER BY o.id"; $affectedrs = $DB->get_recordset_sql($sql); // Now update the event's priority based on the assign_overrides sortorder we found. This uses similar logic to // assign_refresh_events(), except we've restricted the set of assignments and overrides we're dealing with here. foreach ($affectedrs as $record) { $DB->set_field('event', 'priority', $record->priority, ['id' => $record->id]); } $affectedrs->close(); // Main savepoint reached. upgrade_mod_savepoint(true, 2017061200, 'assign'); } if ($oldversion < 2017061205) { require_once($CFG->dirroot.'/mod/assign/upgradelib.php'); $brokenassigns = get_assignments_with_rescaled_null_grades(); // Set config value. foreach ($brokenassigns as $assign) { set_config('has_rescaled_null_grades_' . $assign, 1, 'assign'); } // Main savepoint reached. upgrade_mod_savepoint(true, 2017061205, 'assign'); } // Automatically generated Moodle v3.4.0 release upgrade line. // Put any upgrade step following this. // Automatically generated Moodle v3.5.0 release upgrade line. // Put any upgrade step following this. // Automatically generated Moodle v3.6.0 release upgrade line. // Put any upgrade step following this. if ($oldversion < 2018120500) { // Define field hidegrader to be added to assign. $table = new xmldb_table('assign'); $field = new xmldb_field('hidegrader', XMLDB_TYPE_INTEGER, '2', null, XMLDB_NOTNULL, null, '0', 'blindmarking'); if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Assignment savepoint reached. upgrade_mod_savepoint(true, 2018120500, 'assign'); } return true; }