Merge branch 'MDL-81699-main' of https://github.com/durenadev/moodle

This commit is contained in:
Huong Nguyen 2024-07-18 09:57:18 +07:00
commit 388fb71f51
No known key found for this signature in database
GPG Key ID: 40D88AB693A3E72A
2 changed files with 26 additions and 3 deletions

View File

@ -3232,13 +3232,13 @@ class core_course_external extends external_api {
shortname: course short name
idnumber: course id number
category: category id the course belongs to
sectionid: section id that belongs to a course
', VALUE_DEFAULT, ''),
'value' => new external_value(PARAM_RAW, 'The value to match', VALUE_DEFAULT, '')
)
);
}
/**
* Get courses matching a specific field (id/s, shortname, idnumber, category)
*
@ -3267,6 +3267,7 @@ class core_course_external extends external_api {
switch ($params['field']) {
case 'id':
case 'category':
case 'sectionid':
$value = clean_param($params['value'], PARAM_INT);
break;
case 'ids':
@ -3297,6 +3298,9 @@ class core_course_external extends external_api {
// more efficiently.
list ($courses, $warnings) = util::validate_courses($courseids, [],
false, true);
} else if ($params['field'] === 'sectionid') {
$courseid = $DB->get_field('course_sections', 'course', ['id' => $value]);
$courses = $courseid ? [$DB->get_record('course', ['id' => $courseid])] : [];
} else {
$courses = $DB->get_records('course', array($params['field'] => $value), 'id ASC');
}

View File

@ -2858,8 +2858,13 @@ final class externallib_test extends externallib_advanced_testcase {
$category1 = self::getDataGenerator()->create_category(array('name' => 'Cat 1'));
$category2 = self::getDataGenerator()->create_category(array('parent' => $category1->id));
$course1 = self::getDataGenerator()->create_course(
array('category' => $category1->id, 'shortname' => 'c1', 'format' => 'topics'));
$numsections = 4;
$course1 = self::getDataGenerator()->create_course([
'category' => $category1->id,
'shortname' => 'c1',
'format' => 'topics',
'numsections' => $numsections,
]);
$fieldcategory = self::getDataGenerator()->create_custom_field_category(['name' => 'Other fields']);
$customfield = ['shortname' => 'test', 'name' => 'Custom field', 'type' => 'text',
@ -3065,6 +3070,20 @@ final class externallib_test extends externallib_advanced_testcase {
$result = core_course_external::get_courses_by_field('idnumber', 'x');
$result = external_api::clean_returnvalue(core_course_external::get_courses_by_field_returns(), $result);
$this->assertCount(0, $result['courses']);
$existingsections = $DB->get_records('course_sections', ['course' => $course1->id]);
$this->assertEquals(count($existingsections), $numsections + 1); // Includes generic section.
$section = array_shift($existingsections);
$result = core_course_external::get_courses_by_field('sectionid', $section->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']);
// Wrong section.
$result = core_course_external::get_courses_by_field('sectionid', 1234);
$result = external_api::clean_returnvalue(core_course_external::get_courses_by_field_returns(), $result);
$this->assertCount(0, $result['courses']);
}
/**