From 5dd97119b842e0815e488990af8edc24fe172af9 Mon Sep 17 00:00:00 2001 From: Nathan Mares Date: Wed, 28 Nov 2012 10:21:32 +1100 Subject: [PATCH] MDL-36914: Re-associate all grade_item records when upgrading assignments to prevent data loss --- mod/assign/upgradelib.php | 20 ++++++-------------- 1 files changed, 6 insertions(+), 14 deletions(-) diff --git a/mod/assign/upgradelib.php b/mod/assign/upgradelib.php index e9a7f0f..344cea5 100644 --- a/mod/assign/upgradelib.php +++ b/mod/assign/upgradelib.php @@ -229,14 +229,10 @@ class assign_upgrade_manager { $newassignment->update_calendar($newcoursemodule->id); - // copy the grades from the old assignment to the new one + // reassociate grade_items from the old assignment instance to the new assign instance. This includes outcome linked grade_items + $sql = "UPDATE {grade_items} SET itemmodule = 'assign', iteminstance = ? WHERE itemmodule = 'assignment' AND iteminstance = ?"; + $DB->execute($sql, array($newassignment->get_instance()->id, $oldassignment->id)); - $gradeitem = $DB->get_record('grade_items', array('iteminstance'=>$oldassignment->id, 'itemmodule'=>'assignment'), 'id', IGNORE_MISSING); - if ($gradeitem) { - $gradeitem->iteminstance = $newassignment->get_instance()->id; - $gradeitem->itemmodule = 'assign'; - $DB->update_record('grade_items', $gradeitem); - } $gradesdone = true; } catch (Exception $exception) { @@ -247,13 +243,9 @@ class assign_upgrade_manager { if ($rollback) { // roll back the grades changes if ($gradesdone) { - // copy the grades from the old assignment to the new one - $gradeitem = $DB->get_record('grade_items', array('iteminstance'=>$newassignment->get_instance()->id, 'itemmodule'=>'assign'), 'id', IGNORE_MISSING); - if ($gradeitem) { - $gradeitem->iteminstance = $oldassignment->id; - $gradeitem->itemmodule = 'assignment'; - $DB->update_record('grade_items', $gradeitem); - } + // reassociate grade_items from the new assign instance to the old assignment instance + $sql = "UPDATE {grade_items} SET itemmodule = 'assign', iteminstance = ? WHERE itemmodule = 'assignment' AND iteminstance = ?"; + $DB->execute($sql, array($oldassignment->id, $newassignment->get_instance()->id)); } // roll back the completion changes if ($completiondone) { --