MDL-68437 course: ws support to optionally fetch only active users

Modifies the 'core_course_get_enrolled_users_by_cmid' webservice and
the generic js methods that call this webservice and enables defining
whether the ws should only return the active users or all enrolled
users in the course.
This commit is contained in:
Mihail Geshoski
2022-09-30 12:02:08 +08:00
parent d708740c3f
commit 7e0b0bc14b
6 changed files with 51 additions and 10 deletions
+1 -1
View File
@@ -5,6 +5,6 @@ define("core_course/repository",["exports","core/ajax"],(function(_exports,_ajax
* @module core_course/repository
* @copyright 2018 Ryan Wyllie <ryan@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_ajax=(obj=_ajax)&&obj.__esModule?obj:{default:obj};var _default={getEnrolledCoursesByTimelineClassification:(classification,limit,offset,sort)=>{const args={classification:classification};void 0!==limit&&(args.limit=limit),void 0!==offset&&(args.offset=offset),void 0!==sort&&(args.sort=sort);const request={methodname:"core_course_get_enrolled_courses_by_timeline_classification",args:args};return _ajax.default.call([request])[0]},getLastAccessedCourses:(userid,limit,offset,sort)=>{const args={};void 0!==userid&&(args.userid=userid),void 0!==limit&&(args.limit=limit),void 0!==offset&&(args.offset=offset),void 0!==sort&&(args.sort=sort);const request={methodname:"core_course_get_recent_courses",args:args};return _ajax.default.call([request])[0]},getUsersFromCourseModuleID:(cmid,groupID)=>{var request={methodname:"core_course_get_enrolled_users_by_cmid",args:{cmid:cmid,groupid:groupID}};return _ajax.default.call([request])[0]},toggleManualCompletion:(cmid,completed)=>{const request={methodname:"core_completion_update_activity_completion_status_manually",args:{cmid:cmid,completed:completed}};return _ajax.default.call([request])[0]},getEnrolledCoursesWithEventsByTimelineClassification:function(classification){let limit=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,offset=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,sort=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,searchValue=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,eventsFrom=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,eventsTo=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null;const args={classification:classification,limit:limit,offset:offset,sort:sort,eventsfrom:eventsFrom,eventsto:eventsTo,searchvalue:searchValue},request={methodname:"core_course_get_enrolled_courses_with_action_events_by_timeline_classification",args:args};return _ajax.default.call([request])[0]}};return _exports.default=_default,_exports.default}));
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_ajax=(obj=_ajax)&&obj.__esModule?obj:{default:obj};var _default={getEnrolledCoursesByTimelineClassification:(classification,limit,offset,sort)=>{const args={classification:classification};void 0!==limit&&(args.limit=limit),void 0!==offset&&(args.offset=offset),void 0!==sort&&(args.sort=sort);const request={methodname:"core_course_get_enrolled_courses_by_timeline_classification",args:args};return _ajax.default.call([request])[0]},getLastAccessedCourses:(userid,limit,offset,sort)=>{const args={};void 0!==userid&&(args.userid=userid),void 0!==limit&&(args.limit=limit),void 0!==offset&&(args.offset=offset),void 0!==sort&&(args.sort=sort);const request={methodname:"core_course_get_recent_courses",args:args};return _ajax.default.call([request])[0]},getUsersFromCourseModuleID:function(cmid,groupID){let onlyActive=arguments.length>2&&void 0!==arguments[2]&&arguments[2];var request={methodname:"core_course_get_enrolled_users_by_cmid",args:{cmid:cmid,groupid:groupID,onlyactive:onlyActive}};return _ajax.default.call([request])[0]},toggleManualCompletion:(cmid,completed)=>{const request={methodname:"core_completion_update_activity_completion_status_manually",args:{cmid:cmid,completed:completed}};return _ajax.default.call([request])[0]},getEnrolledCoursesWithEventsByTimelineClassification:function(classification){let limit=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,offset=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,sort=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,searchValue=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,eventsFrom=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,eventsTo=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null;const args={classification:classification,limit:limit,offset:offset,sort:sort,eventsfrom:eventsFrom,eventsto:eventsTo,searchvalue:searchValue},request={methodname:"core_course_get_enrolled_courses_with_action_events_by_timeline_classification",args:args};return _ajax.default.call([request])[0]}};return _exports.default=_default,_exports.default}));
//# sourceMappingURL=repository.min.js.map
File diff suppressed because one or more lines are too long
+3 -1
View File
@@ -134,14 +134,16 @@ const getLastAccessedCourses = (userid, limit, offset, sort) => {
*
* @param {Number} cmid Course Module from which the users will be obtained
* @param {Number} groupID Group ID from which the users will be obtained
* @param {Boolean} onlyActive Whether to fetch only the active enrolled users or all enrolled users in the course.
* @returns {Promise} Promise containing a list of users
*/
const getEnrolledUsersFromCourseModuleID = (cmid, groupID) => {
const getEnrolledUsersFromCourseModuleID = (cmid, groupID, onlyActive = false) => {
var request = {
methodname: 'core_course_get_enrolled_users_by_cmid',
args: {
cmid: cmid,
groupid: groupID,
onlyactive: onlyActive,
},
};
+7 -6
View File
@@ -4151,6 +4151,8 @@ class core_course_external extends external_api {
return new external_function_parameters([
'cmid' => new external_value(PARAM_INT, 'id of the course module', VALUE_REQUIRED),
'groupid' => new external_value(PARAM_INT, 'id of the group', VALUE_DEFAULT, 0),
'onlyactive' => new external_value(PARAM_BOOL, 'whether to return only active users or all.',
VALUE_DEFAULT, false),
]);
}
@@ -4159,26 +4161,25 @@ class core_course_external extends external_api {
*
* @param int $cmid Course Module id from which the users will be obtained
* @param int $groupid Group id from which the users will be obtained
* @param bool $onlyactive Whether to return only the active enrolled users or all enrolled users in the course.
* @return array List of users
* @throws invalid_parameter_exception
*/
public static function get_enrolled_users_by_cmid(int $cmid, int $groupid = 0) {
public static function get_enrolled_users_by_cmid(int $cmid, int $groupid = 0, bool $onlyactive = false) {
global $PAGE;
$warnings = [];
[
'cmid' => $cmid,
'groupid' => $groupid,
] = self::validate_parameters(self::get_enrolled_users_by_cmid_parameters(), [
self::validate_parameters(self::get_enrolled_users_by_cmid_parameters(), [
'cmid' => $cmid,
'groupid' => $groupid,
'onlyactive' => $onlyactive,
]);
list($course, $cm) = get_course_and_cm_from_cmid($cmid);
$coursecontext = context_course::instance($course->id);
self::validate_context($coursecontext);
$enrolledusers = get_enrolled_users($coursecontext, '', $groupid);
$enrolledusers = get_enrolled_users($coursecontext, '', $groupid, 'u.*', null, 0, 0, $onlyactive);
$users = array_map(function ($user) use ($PAGE) {
$user->fullname = fullname($user);
+38
View File
@@ -3630,6 +3630,7 @@ class externallib_test extends externallib_advanced_testcase {
$user1 = self::getDataGenerator()->create_user();
$user2 = self::getDataGenerator()->create_user();
$user3 = self::getDataGenerator()->create_user();
$user1picture = new user_picture($user1);
$user1picture->size = 1;
@@ -3639,6 +3640,10 @@ class externallib_test extends externallib_advanced_testcase {
$user2picture->size = 1;
$user2->profileimage = $user2picture->get_url($PAGE)->out(false);
$user3picture = new user_picture($user3);
$user3picture->size = 1;
$user3->profileimage = $user3picture->get_url($PAGE)->out(false);
// Set the first created user to the test user.
self::setUser($user1);
@@ -3653,6 +3658,8 @@ class externallib_test extends externallib_advanced_testcase {
// Following lines enrol and assign default role id to the users.
$this->getDataGenerator()->enrol_user($user1->id, $course1->id);
$this->getDataGenerator()->enrol_user($user2->id, $course1->id);
// Enrol a suspended user in the course.
$this->getDataGenerator()->enrol_user($user3->id, $course1->id, null, 'manual', 0, 0, ENROL_USER_SUSPENDED);
// Create what we expect to be returned when querying the course module.
$expectedusers = array(
@@ -3674,11 +3681,42 @@ class externallib_test extends externallib_advanced_testcase {
'lastname' => $user2->lastname,
'profileimage' => $user2->profileimage,
];
$expectedusers['users'][2] = [
'id' => $user3->id,
'fullname' => fullname($user3),
'firstname' => $user3->firstname,
'lastname' => $user3->lastname,
'profileimage' => $user3->profileimage,
];
// Test getting the users in a given context.
$users = core_course_external::get_enrolled_users_by_cmid($forum1->cmid);
$users = external_api::clean_returnvalue(core_course_external::get_enrolled_users_by_cmid_returns(), $users);
$this->assertEquals(3, count($users['users']));
$this->assertEquals($expectedusers, $users);
// Test getting only the active users in a given context.
$users = core_course_external::get_enrolled_users_by_cmid($forum1->cmid, 0, true);
$users = external_api::clean_returnvalue(core_course_external::get_enrolled_users_by_cmid_returns(), $users);
$expectedusers['users'] = [
[
'id' => $user1->id,
'fullname' => fullname($user1),
'firstname' => $user1->firstname,
'lastname' => $user1->lastname,
'profileimage' => $user1->profileimage,
],
[
'id' => $user2->id,
'fullname' => fullname($user2),
'firstname' => $user2->firstname,
'lastname' => $user2->lastname,
'profileimage' => $user2->profileimage,
]
];
$this->assertEquals(2, count($users['users']));
$this->assertEquals($expectedusers, $users);
}
+1 -1
View File
@@ -679,7 +679,7 @@ $functions = array(
'classname' => 'core_course_external',
'methodname' => 'get_enrolled_users_by_cmid',
'classpath' => 'course/externallib.php',
'description' => 'List users by course module id & filter by group id.',
'description' => 'List users by course module id, filter by group and active enrolment status.',
'type' => 'read',
'ajax' => true,
),