From 63354ab50d5ecd97228a609a24c0a3bb4b915bcc Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 5 Apr 2013 09:52:08 +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 52a0839b527..e047b99cebd 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -1990,5 +1990,15 @@ function xmldb_main_upgrade($oldversion) { upgrade_main_savepoint(true, 2013040300.01); } + if ($oldversion < 2013040500.01) { + // 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, 2013040500.01); + } + return true; } diff --git a/lib/grade/grade_category.php b/lib/grade/grade_category.php index 87c494ffe26..93d0185762b 100644 --- a/lib/grade/grade_category.php +++ b/lib/grade/grade_category.php @@ -1154,13 +1154,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 142ce5bf32e..fd42f029938 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2013040500.00; // YYYYMMDD = weekly release date of this DEV branch +$version = 2013040500.01; // YYYYMMDD = weekly release date of this DEV branch // RR = release increments - 00 in DEV branches // .XX = incremental changes