diff --git a/enrol/externallib.php b/enrol/externallib.php index ddfb976b384..619cea0d9c7 100644 --- a/enrol/externallib.php +++ b/enrol/externallib.php @@ -113,6 +113,7 @@ class core_enrol_external extends external_api { foreach ($thefields as $f) { $userfields[] = clean_param($f, PARAM_ALPHANUMEXT); } + break; case 'limitfrom' : $limitfrom = clean_param($option['value'], PARAM_INT); break; @@ -414,6 +415,7 @@ class core_enrol_external extends external_api { foreach ($thefields as $f) { $userfields[] = clean_param($f, PARAM_ALPHANUMEXT); } + break; case 'limitfrom' : $limitfrom = clean_param($option['value'], PARAM_INT); break; diff --git a/enrol/tests/externallib_test.php b/enrol/tests/externallib_test.php index 073448e87f7..5273bbb8d3d 100644 --- a/enrol/tests/externallib_test.php +++ b/enrol/tests/externallib_test.php @@ -43,6 +43,8 @@ class core_enrol_externallib_testcase extends externallib_advanced_testcase { $course = self::getDataGenerator()->create_course(); $user1 = self::getDataGenerator()->create_user(); $user2 = self::getDataGenerator()->create_user(); + $user3 = self::getDataGenerator()->create_user(); + $this->setUser($user3); // Set the required capabilities by the external function. $context = context_course::instance($course->id); @@ -52,7 +54,7 @@ class core_enrol_externallib_testcase extends externallib_advanced_testcase { // Enrol the users in the course. $this->getDataGenerator()->enrol_user($user1->id, $course->id, $roleid, 'manual'); $this->getDataGenerator()->enrol_user($user2->id, $course->id, $roleid, 'manual'); - $this->getDataGenerator()->enrol_user($USER->id, $course->id, $roleid, 'manual'); + $this->getDataGenerator()->enrol_user($user3->id, $course->id, $roleid, 'manual'); // Call the external function. $enrolledusers = core_enrol_external::get_enrolled_users($course->id); @@ -60,8 +62,25 @@ class core_enrol_externallib_testcase extends externallib_advanced_testcase { // We need to execute the return values cleaning process to simulate the web service server. $enrolledusers = external_api::clean_returnvalue(core_enrol_external::get_enrolled_users_returns(), $enrolledusers); - // Check we retrieve the good total number of enrolled users. + // Check the result set. $this->assertEquals(3, count($enrolledusers)); + $this->assertArrayHasKey('email', $enrolledusers[0]); + + // Call the function with some parameters set. + $enrolledusers = core_enrol_external::get_enrolled_users($course->id, array( + array('name' => 'limitfrom', 'value' => 2), + array('name' => 'limitnumber', 'value' => 1), + array('name' => 'userfields', 'value' => 'id') + )); + + // We need to execute the return values cleaning process to simulate the web service server. + $enrolledusers = external_api::clean_returnvalue(core_enrol_external::get_enrolled_users_returns(), $enrolledusers); + + // Check the result set, we should only get the 3rd result, which is $user3. + $this->assertCount(1, $enrolledusers); + $this->assertEquals($user3->id, $enrolledusers[0]['id']); + $this->assertArrayHasKey('id', $enrolledusers[0]); + $this->assertArrayNotHasKey('email', $enrolledusers[0]); // Call without required capability. $this->unassignUserCapability('moodle/course:viewparticipants', $context->id, $roleid); @@ -110,6 +129,8 @@ class core_enrol_externallib_testcase extends externallib_advanced_testcase { $this->resetAfterTest(true); + $user1 = $this->getDataGenerator()->create_user(); + $coursedata['idnumber'] = 'idnumbercourse1'; $coursedata['fullname'] = 'Lightwork Course 1'; $coursedata['summary'] = 'Lightwork Course 1 description'; @@ -122,14 +143,20 @@ class core_enrol_externallib_testcase extends externallib_advanced_testcase { $manual_enrol_data['courseid'] = $course1->id; $enrolid = $DB->insert_record('enrol', $manual_enrol_data); - // Create the user and give them capabilities in the course context. + // Create the users and give them capabilities in the course context. $context = context_course::instance($course1->id); $roleid = $this->assignUserCapability('moodle/course:viewparticipants', $context->id, 3); - // Create a student. - $student1 = self::getDataGenerator()->create_user(); + // Create 2 students. + $student1 = self::getDataGenerator()->create_user(); + $student2 = self::getDataGenerator()->create_user(); - // Enrol both the user and the student in the course. + // Give the capability to student2. + assign_capability('moodle/course:viewparticipants', CAP_ALLOW, 3, $context->id); + role_assign(3, $student2->id, $context->id); + accesslib_clear_all_caches_for_unit_testing(); + + // Enrol both the user and the students in the course. $user_enrolment_data['status'] = 0; $user_enrolment_data['enrolid'] = $enrolid; $user_enrolment_data['userid'] = $USER->id; @@ -140,8 +167,13 @@ class core_enrol_externallib_testcase extends externallib_advanced_testcase { $user_enrolment_data['userid'] = $student1->id; $DB->insert_record('user_enrolments', $user_enrolment_data); - $params = array("coursecapabilities" =>array - ('courseid' => $course1->id, 'capabilities' => array('moodle/course:viewparticipants'))); + $user_enrolment_data['status'] = 0; + $user_enrolment_data['enrolid'] = $enrolid; + $user_enrolment_data['userid'] = $student2->id; + $DB->insert_record('user_enrolments', $user_enrolment_data); + + $params = array("coursecapabilities" => array('courseid' => $course1->id, + 'capabilities' => array('moodle/course:viewparticipants'))); $options = array(); $result = core_enrol_external::get_enrolled_users_with_capability($params, $options); @@ -152,8 +184,31 @@ class core_enrol_externallib_testcase extends externallib_advanced_testcase { $expecteduserlist = $result[0]; $this->assertEquals($course1->id, $expecteduserlist['courseid']); $this->assertEquals('moodle/course:viewparticipants', $expecteduserlist['capability']); - $this->assertEquals(1, count($expecteduserlist['users'])); + $this->assertEquals(2, count($expecteduserlist['users'])); + // Now doing the query again with options. + $params = array( + "coursecapabilities" => array( + 'courseid' => $course1->id, + 'capabilities' => array('moodle/course:viewparticipants') + ) + ); + $options = array( + array('name' => 'limitfrom', 'value' => 1), + array('name' => 'limitnumber', 'value' => 1), + array('name' => 'userfields', 'value' => 'id') + ); + + $result = core_enrol_external::get_enrolled_users_with_capability($params, $options); + + // We need to execute the return values cleaning process to simulate the web service server. + $result = external_api::clean_returnvalue(core_enrol_external::get_enrolled_users_with_capability_returns(), $result); + + // Check an array containing the expected user for the course capability is returned. + $expecteduserlist = $result[0]['users']; + $expecteduser = reset($expecteduserlist); + $this->assertEquals(1, count($expecteduserlist)); + $this->assertEquals($student2->id, $expecteduser['id']); } /**