From c2f08942d9eaa145f07da9a4a2634d46a5980326 Mon Sep 17 00:00:00 2001 From: Tim Lock Date: Thu, 11 May 2017 15:21:18 +0930 Subject: [PATCH] MDL-58813 webservice: create_courses() initialise all section records --- course/externallib.php | 5 +++++ course/tests/externallib_test.php | 34 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/course/externallib.php b/course/externallib.php index bb4f0eee1b0..619129741f6 100644 --- a/course/externallib.php +++ b/course/externallib.php @@ -724,6 +724,11 @@ class core_course_external extends external_api { //Note: create_course() core function check shortname, idnumber, category $course['id'] = create_course((object) $course)->id; + // Create sections that aren't created by core create_course(). + if (!empty($course['numsections']) && $course['numsections'] > 0) { + course_create_sections_if_missing((object)$course, range(0, $course['numsections'])); + } + $resultcourses[] = array('id' => $course['id'], 'shortname' => $course['shortname']); } diff --git a/course/tests/externallib_test.php b/course/tests/externallib_test.php index 5c709de4536..c82d0626393 100644 --- a/course/tests/externallib_test.php +++ b/course/tests/externallib_test.php @@ -361,6 +361,40 @@ class core_course_externallib_testcase extends externallib_advanced_testcase { core_course_external::update_categories($categories); } + /** + * Test create_course_numsections + */ + public function test_create_course_numsections() { + global $DB; + + $this->resetAfterTest(true); + + // Set the required capabilities by the external function. + $contextid = context_system::instance()->id; + $roleid = $this->assignUserCapability('moodle/course:create', $contextid); + $this->assignUserCapability('moodle/course:visibility', $contextid, $roleid); + + $numsections = 10; + $category = self::getDataGenerator()->create_category(); + + // Create base categories. + $course1['fullname'] = 'Test course 1'; + $course1['shortname'] = 'Testcourse1'; + $course1['categoryid'] = $category->id; + $course1['courseformatoptions'][] = array('name' => 'numsections', 'value' => $numsections); + + $courses = array($course1); + + $createdcourses = core_course_external::create_courses($courses); + foreach ($createdcourses as $createdcourse) { + $existingsections = $DB->get_records('course_sections', array('course' => $createdcourse['id'])); + $modinfo = get_fast_modinfo($createdcourse['id']); + $sections = $modinfo->get_section_info_all(); + $this->assertEquals(count($sections), $numsections + 1); // Includes generic section. + $this->assertEquals(count($existingsections), $numsections + 1); // Includes generic section. + } + } + /** * Test create_courses */