From 0bd734bddafb5ff0898267fec1a8e0be875fe5d3 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Fri, 14 Jul 2023 15:07:15 +0100 Subject: [PATCH] MDL-78716 course: fix category idnumber updating logic. Where only the case of the idnumber field was being updated, we triggered an exception because checking for an exising idnumber was not excluding the current category (i.e. the one being updated). --- course/classes/category.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/course/classes/category.php b/course/classes/category.php index 30cc36e0acf..04c7381dd4d 100644 --- a/course/classes/category.php +++ b/course/classes/category.php @@ -596,7 +596,11 @@ class core_course_category implements renderable, cacheable_object, IteratorAggr if (core_text::strlen($data->idnumber) > 100) { throw new moodle_exception('idnumbertoolong'); } - if (strval($data->idnumber) !== '' && $DB->record_exists('course_categories', array('idnumber' => $data->idnumber))) { + + // Ensure there are no other categories with the same idnumber. + if (strval($data->idnumber) !== '' && + $DB->record_exists_select('course_categories', 'idnumber = ? AND id != ?', [$data->idnumber, $this->id])) { + throw new moodle_exception('categoryidnumbertaken'); } $newcategory->idnumber = $data->idnumber;