From f54c49ccf02198bf8793e4e655f933a37567057b Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Mon, 1 Jul 2013 13:47:50 +0800 Subject: [PATCH] MDL-13114 tool_uploadcourse: ID number errors handling --- admin/tool/uploadcourse/classes/course.php | 9 +++++++ admin/tool/uploadcourse/tests/course_test.php | 26 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/admin/tool/uploadcourse/classes/course.php b/admin/tool/uploadcourse/classes/course.php index 20ff323f1ea..abb3ee06853 100644 --- a/admin/tool/uploadcourse/classes/course.php +++ b/admin/tool/uploadcourse/classes/course.php @@ -374,6 +374,7 @@ class tool_uploadcourse_course { * @return bool false is any error occured. */ public function prepare() { + global $DB; $this->prepared = true; // Validate the shortname. @@ -536,6 +537,14 @@ class tool_uploadcourse_course { } } + // If the course does not exist, ensure that the ID number is not taken. + if (!$exists && isset($coursedata['idnumber'])) { + if ($DB->count_records_select('course', 'idnumber = :idn', array('idn' => $coursedata['idnumber'])) > 0) { + $this->error('idnumberalreadyinuse', new lang_string('idnumberalreadyinuse', 'tool_uploadcourse')); + return false; + } + } + // Ultimate check mode vs. existence. switch ($mode) { case tool_uploadcourse_processor::MODE_CREATE_NEW: diff --git a/admin/tool/uploadcourse/tests/course_test.php b/admin/tool/uploadcourse/tests/course_test.php index 42dd5c821d5..c1af49e2b37 100644 --- a/admin/tool/uploadcourse/tests/course_test.php +++ b/admin/tool/uploadcourse/tests/course_test.php @@ -779,4 +779,30 @@ class tool_uploadcourse_course_testcase extends advanced_testcase { $this->assertEquals(strtotime('1970-01-01 GMT + ' . $data['enrolment_1_enrolperiod']), $enroldata['manual']->enrolperiod); $this->assertEquals(strtotime('12th July 2013'), $enroldata['manual']->enrolenddate); } + + public function test_idnumber_problems() { + $this->resetAfterTest(true); + + $c1 = $this->getDataGenerator()->create_course(array('idnumber' => 'Taken')); + $c2 = $this->getDataGenerator()->create_course(); + + // Create with existing ID number. + $mode = tool_uploadcourse_processor::MODE_CREATE_NEW; + $updatemode = tool_uploadcourse_processor::UPDATE_ALL_WITH_DATA_ONLY; + $data = array('shortname' => 'c2', 'summary' => 'summary', 'fullname' => 'FN', 'category' => '1', + 'idnumber' => $c1->idnumber); + $co = new tool_uploadcourse_course($mode, $updatemode, $data); + $this->assertFalse($co->prepare()); + $this->assertArrayHasKey('idnumberalreadyinuse', $co->get_errors()); + + // Rename to existing ID number. + $mode = tool_uploadcourse_processor::MODE_UPDATE_ONLY; + $updatemode = tool_uploadcourse_processor::UPDATE_ALL_WITH_DATA_ONLY; + $data = array('shortname' => $c2->shortname, 'rename' => 'SN', 'idnumber' => $c1->idnumber); + $importoptions = array('canrename' => true); + $co = new tool_uploadcourse_course($mode, $updatemode, $data, array(), $importoptions); + $this->assertFalse($co->prepare()); + $this->assertArrayHasKey('cannotrenameidnumberconflict', $co->get_errors()); + } + }