diff --git a/course/externallib.php b/course/externallib.php index 62e868fb4be..6b00cccea27 100644 --- a/course/externallib.php +++ b/course/externallib.php @@ -2458,6 +2458,15 @@ class core_course_external extends external_api { ), 'Course filters', VALUE_OPTIONAL ), + 'courseformatoptions' => new external_multiple_structure( + new external_single_structure( + array( + 'name' => new external_value(PARAM_RAW, 'Course format option name.'), + 'value' => new external_value(PARAM_RAW, 'Course format option value.'), + ) + ), + 'Additional options for particular course format.', VALUE_OPTIONAL + ), ); $coursestructure = array_merge($coursestructure, $extra); } @@ -3084,6 +3093,14 @@ class core_course_external extends external_api { if (isset($coursesdata[$course->id]['lang'])) { $coursesdata[$course->id]['lang'] = clean_param($coursesdata[$course->id]['lang'], PARAM_LANG); } + + $courseformatoptions = course_get_format($course)->get_config_for_external(); + foreach ($courseformatoptions as $key => $value) { + $coursesdata[$course->id]['courseformatoptions'][] = array( + 'name' => $key, + 'value' => $value + ); + } } return array( diff --git a/course/tests/externallib_test.php b/course/tests/externallib_test.php index ba36ab0d53f..49636b4e05b 100644 --- a/course/tests/externallib_test.php +++ b/course/tests/externallib_test.php @@ -2045,7 +2045,8 @@ class core_course_externallib_testcase extends externallib_advanced_testcase { $category1 = self::getDataGenerator()->create_category(); $category2 = self::getDataGenerator()->create_category(array('parent' => $category1->id)); - $course1 = self::getDataGenerator()->create_course(array('category' => $category1->id, 'shortname' => 'c1')); + $course1 = self::getDataGenerator()->create_course( + array('category' => $category1->id, 'shortname' => 'c1', 'format' => 'topics')); $course2 = self::getDataGenerator()->create_course(array('visible' => 0, 'category' => $category2->id, 'idnumber' => 'i2')); $student1 = self::getDataGenerator()->create_user(); @@ -2061,15 +2062,25 @@ class core_course_externallib_testcase extends externallib_advanced_testcase { $this->assertCount(3, $result['courses']); // Expect to receive all the fields. $this->assertCount(37, $result['courses'][0]); - $this->assertCount(37, $result['courses'][1]); - $this->assertCount(37, $result['courses'][2]); + $this->assertCount(38, $result['courses'][1]); // One more field because is not the site course. + $this->assertCount(38, $result['courses'][2]); // One more field because is not the site course. $result = core_course_external::get_courses_by_field('id', $course1->id); $result = external_api::clean_returnvalue(core_course_external::get_courses_by_field_returns(), $result); $this->assertCount(1, $result['courses']); $this->assertEquals($course1->id, $result['courses'][0]['id']); // Expect to receive all the fields. - $this->assertCount(37, $result['courses'][0]); + $this->assertCount(38, $result['courses'][0]); + // Check default values for course format topics. + $this->assertCount(2, $result['courses'][0]['courseformatoptions']); + foreach ($result['courses'][0]['courseformatoptions'] as $option) { + if ($option['name'] == 'hiddensections') { + $this->assertEquals(0, $option['value']); + } else { + $this->assertEquals('coursedisplay', $option['name']); + $this->assertEquals(0, $option['value']); + } + } $result = core_course_external::get_courses_by_field('id', $course2->id); $result = external_api::clean_returnvalue(core_course_external::get_courses_by_field_returns(), $result); @@ -2112,14 +2123,14 @@ class core_course_externallib_testcase extends externallib_advanced_testcase { $result = external_api::clean_returnvalue(core_course_external::get_courses_by_field_returns(), $result); $this->assertCount(2, $result['courses']); $this->assertCount(30, $result['courses'][0]); - $this->assertCount(30, $result['courses'][1]); + $this->assertCount(31, $result['courses'][1]); // One field more (course format options), not present in site course. $result = core_course_external::get_courses_by_field('id', $course1->id); $result = external_api::clean_returnvalue(core_course_external::get_courses_by_field_returns(), $result); $this->assertCount(1, $result['courses']); $this->assertEquals($course1->id, $result['courses'][0]['id']); // Expect to receive all the files that a student can see. - $this->assertCount(30, $result['courses'][0]); + $this->assertCount(31, $result['courses'][0]); // Check default filters. $filters = $result['courses'][0]['filters'];