From ca66f9654eea9c175f240ef2b5e5f308e5f91883 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Fri, 30 Jun 2017 09:32:18 +0800 Subject: [PATCH 1/2] MDL-59262 course: bug - requested course is created without sections --- course/lib.php | 1 + 1 file changed, 1 insertion(+) diff --git a/course/lib.php b/course/lib.php index bc444f81e1d..dbd8b180308 100644 --- a/course/lib.php +++ b/course/lib.php @@ -2942,6 +2942,7 @@ class course_request { $data->visibleold = $data->visible; $data->lang = $courseconfig->lang; $data->enablecompletion = $courseconfig->enablecompletion; + $data->numsections = $courseconfig->numsections; $course = create_course($data); $context = context_course::instance($course->id, MUST_EXIST); From b1ed151f4d17204db20ab615d15c549e0e80780c Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Fri, 30 Jun 2017 10:58:54 +0800 Subject: [PATCH 2/2] MDL-59262 tool_uploadcourse: allow to set numsections --- admin/tool/uploadcourse/classes/course.php | 13 +++++++- admin/tool/uploadcourse/tests/course_test.php | 30 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/admin/tool/uploadcourse/classes/course.php b/admin/tool/uploadcourse/classes/course.php index 75500b2e3ba..da1592e5be1 100644 --- a/admin/tool/uploadcourse/classes/course.php +++ b/admin/tool/uploadcourse/classes/course.php @@ -95,7 +95,7 @@ class tool_uploadcourse_course { /** @var array fields allowed as course data. */ static protected $validfields = array('fullname', 'shortname', 'idnumber', 'category', 'visible', 'startdate', 'enddate', 'summary', 'format', 'theme', 'lang', 'newsitems', 'showgrades', 'showreports', 'legacyfiles', 'maxbytes', - 'groupmode', 'groupmodeforce', 'groupmodeforce', 'enablecompletion'); + 'groupmode', 'groupmodeforce', 'enablecompletion'); /** @var array fields required on course creation. */ static protected $mandatoryfields = array('fullname', 'category'); @@ -676,6 +676,17 @@ class tool_uploadcourse_course { return false; } + // TODO MDL-59259 allow to set course format options for the current course format. + + // Special case, 'numsections' is not a course format option any more but still should apply from defaults. + if (!$exists || !array_key_exists('numsections', $coursedata)) { + if (isset($this->rawdata['numsections']) && is_numeric($this->rawdata['numsections'])) { + $coursedata['numsections'] = (int)$this->rawdata['numsections']; + } else { + $coursedata['numsections'] = get_config('moodlecourse', 'numsections'); + } + } + // Saving data. $this->data = $coursedata; $this->enrolmentdata = tool_uploadcourse_helper::get_enrolment_data($this->rawdata); diff --git a/admin/tool/uploadcourse/tests/course_test.php b/admin/tool/uploadcourse/tests/course_test.php index 3ac9fe07153..33561636c7e 100644 --- a/admin/tool/uploadcourse/tests/course_test.php +++ b/admin/tool/uploadcourse/tests/course_test.php @@ -120,6 +120,36 @@ class tool_uploadcourse_course_testcase extends advanced_testcase { $this->assertTrue($DB->record_exists('course', array('shortname' => 'c2'))); } + public function test_create_with_sections() { + global $DB; + $this->resetAfterTest(true); + $updatemode = tool_uploadcourse_processor::UPDATE_NOTHING; + $defaultnumsections = get_config('moodlecourse', 'numsections'); + + // Add new course, make sure default number of sections is created. + $mode = tool_uploadcourse_processor::MODE_CREATE_NEW; + $data = array('shortname' => 'newcourse1', 'fullname' => 'New course1', 'format' => 'topics', 'category' => 1); + $co = new tool_uploadcourse_course($mode, $updatemode, $data); + $this->assertTrue($co->prepare()); + $co->proceed(); + $courseid = $DB->get_field('course', 'id', array('shortname' => 'newcourse1')); + $this->assertNotEmpty($courseid); + $this->assertEquals($defaultnumsections + 1, + $DB->count_records('course_sections', ['course' => $courseid])); + + // Add new course specifying number of sections. + $mode = tool_uploadcourse_processor::MODE_CREATE_NEW; + $data = array('shortname' => 'newcourse2', 'fullname' => 'New course2', 'format' => 'topics', 'category' => 1, + 'numsections' => 15); + $co = new tool_uploadcourse_course($mode, $updatemode, $data); + $this->assertTrue($co->prepare()); + $co->proceed(); + $courseid = $DB->get_field('course', 'id', array('shortname' => 'newcourse2')); + $this->assertNotEmpty($courseid); + $this->assertEquals(15 + 1, + $DB->count_records('course_sections', ['course' => $courseid])); + } + public function test_delete() { global $DB; $this->resetAfterTest(true);