From aeacefdb197a5c471310d2c7c2c5e73419f8cc5b Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Wed, 10 Apr 2013 08:34:04 +0800 Subject: [PATCH] MDL-29877 core_grade:add some upgrade code to fix broken grade items introduced by bad restores --- lib/db/upgrade.php | 10 ++++++++++ lib/grade/grade_category.php | 8 ++++++-- version.php | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index 6233a521b82..5ff29f772cc 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -1142,5 +1142,15 @@ function xmldb_main_upgrade($oldversion) { upgrade_main_savepoint(true, 2012062506.02); } + if ($oldversion < 2012062506.04) { + // MDL-29877 Some bad restores created grade items with no category information. + $sql = "UPDATE mdl_grade_items + SET categoryid = courseid + WHERE itemtype <> 'course' and itemtype <> 'category' + AND categoryid IS NULL"; + $DB->execute($sql); + upgrade_main_savepoint(true, 2012062506.04); + } + return true; } diff --git a/lib/grade/grade_category.php b/lib/grade/grade_category.php index 6f3deff5864..183c5647cd3 100644 --- a/lib/grade/grade_category.php +++ b/lib/grade/grade_category.php @@ -1152,13 +1152,17 @@ class grade_category extends grade_object { } else { $categoryid = $item->categoryid; + if (empty($categoryid)) { + debugging('Found a grade item that isnt in a category'); + } } // prevent problems with duplicate sortorders in db $sortorder = $item->sortorder; - while (array_key_exists($sortorder, $cats[$categoryid]->children)) { - //debugging("$sortorder exists in item loop"); + while (array_key_exists($categoryid, $cats) + && array_key_exists($sortorder, $cats[$categoryid]->children)) { + $sortorder++; } diff --git a/version.php b/version.php index d744a254c1e..ffa1c184488 100644 --- a/version.php +++ b/version.php @@ -30,7 +30,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2012062506.03; // YYYYMMDD = weekly release date of this DEV branch +$version = 2012062506.04; // YYYYMMDD = weekly release date of this DEV branch // RR = release increments - 00 in DEV branches // .XX = incremental changes -- 2.43.0