Need Moodle User Enrollment ID

Re: Need Moodle User Enrollment ID

by Chris C -
Number of replies: 0

I figured out a way to do this based on the deprecated external function"get_enrolled_users".  I basically just added the userid param, and modified the $sql to include user_enrolments.id, and added it to my custom web service:

 

// * Returns description of method parameters
// * @return external_function_parameters
public static function get_users_enrolments_parameters() {
return new external_function_parameters(
array(
'userid' => new external_value(PARAM_INT, 'user id'),
'courseid' => new external_value(PARAM_INT, 'course id'),
'options' => new external_multiple_structure(
new external_single_structure(
array(
'name' => new external_value(PARAM_ALPHANUMEXT, 'option name'),
'value' => new external_value(PARAM_RAW, 'option value')
)
), 'Option names:
* withcapability (string) return only users with this capability. This option requires \'moodle/role:review\' on the course context.
* groupid (integer) return only users in this group id. This option requires \'moodle/site:accessallgroups\' on the course context.
* onlyactive (integer) return only users with active enrolments and matching time restrictions. This option requires \'moodle/course:enrolreview\' on the course context.
* userfields (\'string, string, ...\') return only the values of these user fields.
* limitfrom (integer) sql limit from.
* limitnumber (integer) maximum number of returned users.', VALUE_DEFAULT, array()),
)
);
}



// * Get list of course participants.
// * @deprecated since Moodle 2.2 please use core_enrol_external::get_enrolled_users() instead
// * @param int $userid
// * @param int $courseid
// * @param text $withcapability
// * @param int $groupid
// * @param bool $onlyactive
// * @return array of course participants

//public static function get_users_enrolments($courseid, $withcapability = null, $groupid = null, $onlyactive = false) {
public static function get_users_enrolments($userid, $courseid) {
global $DB, $CFG, $USER;

// Do basic automatic PARAM checks on incoming data, using params description
// If any problems are found then exceptions are thrown with helpful error messages
$params = self::validate_parameters(self::get_users_enrolments_parameters(), array(
'userid'=>$userid,
'courseid'=>$courseid
//'withcapability'=>$withcapability,
//'groupid'=>$groupid,
//'onlyactive'=>$onlyactive
)
);

$coursecontext = get_context_instance(CONTEXT_COURSE, $params['courseid']);
if ($courseid == SITEID) {
$context = get_context_instance(CONTEXT_SYSTEM);
} else {
$context = $coursecontext;
}

try {
self::validate_context($context);
} catch (Exception $e) {
$exceptionparam = new stdClass();
$exceptionparam->message = $e->getMessage();
$exceptionparam->courseid = $params['courseid'];
throw new moodle_exception(get_string('errorcoursecontextnotvalid' , 'webservice', $exceptionparam));
}

if ($courseid == SITEID) {
require_capability('moodle/site:viewparticipants', $context);
} else {
require_capability('moodle/course:viewparticipants', $context);
}
/*
if ($withcapability) {
require_capability('moodle/role:review', $coursecontext);
}
if ($groupid && groups_is_member($groupid)) {
require_capability('moodle/site:accessallgroups', $coursecontext);
}
if ($onlyactive) {
require_capability('moodle/course:enrolreview', $coursecontext);
}
*/
//list($sqlparams, $params) = get_enrolled_sql($coursecontext, $withcapability, $groupid, $onlyactive);
list($sqlparams, $params) = get_enrolled_sql($coursecontext);
$sql = "SELECT ue.id, ue.userid, e.courseid, u.firstname, u.lastname, u.username, c.id as usercontextid
FROM {user_enrolments} ue
JOIN {enrol} e ON (e.id = ue.enrolid)
JOIN {user} u ON (ue.userid = u.id)
JOIN {context} c ON (u.id = c.instanceid AND contextlevel = " . CONTEXT_USER . ")
WHERE e.courseid = :courseid AND u.id = :userid AND ue.userid IN ($sqlparams)
GROUP BY ue.id, ue.userid, e.courseid, u.firstname, u.lastname, u.username, c.id";
$params['userid'] = $userid;
$params['courseid'] = $courseid;
$enrolledusers = $DB->get_records_sql($sql, $params);
$result = array();
$isadmin = is_siteadmin($USER);
$canviewfullnames = has_capability('moodle/site:viewfullnames', $context);
foreach ($enrolledusers as $enrolleduser) {
$profilimgurl = moodle_url::make_pluginfile_url($enrolleduser->usercontextid, 'user', 'icon', NULL, '/', 'f1');
$profilimgurlsmall = moodle_url::make_pluginfile_url($enrolleduser->usercontextid, 'user', 'icon', NULL, '/', 'f2');
$resultuser = array(
'id' => $enrolleduser->id,
'courseid' => $enrolleduser->courseid,
'userid' => $enrolleduser->userid,
'fullname' => fullname($enrolleduser),
'profileimgurl' => $profilimgurl->out(false),
'profileimgurlsmall' => $profilimgurlsmall->out(false)
);
// check if we can return username
if ($isadmin) {
$resultuser['username'] = $enrolleduser->username;
}
// check if we can return first and last name
if ($isadmin or $canviewfullnames) {
$resultuser['firstname'] = $enrolleduser->firstname;
$resultuser['lastname'] = $enrolleduser->lastname;
}
$result[] = $resultuser;
}

return $result;
}

// * Returns description of method result value
// * @deprecated since Moodle 2.2 please use core_enrol_external::get_users_enrolments_returns() instead
// * @return external_description
public static function get_users_enrolments_returns() {
return new external_multiple_structure(
new external_single_structure(
array(
'id' => new external_value(PARAM_INT, 'id of user enrolment'),
'courseid' => new external_value(PARAM_INT, 'id of course'),
'userid' => new external_value(PARAM_INT, 'id of user'),
'firstname' => new external_value(PARAM_RAW, 'first name of user', VALUE_OPTIONAL),
'lastname' => new external_value(PARAM_RAW, 'last name of user', VALUE_OPTIONAL),
'fullname' => new external_value(PARAM_RAW, 'fullname of user'),
'username' => new external_value(PARAM_RAW, 'username of user', VALUE_OPTIONAL),
'profileimgurl' => new external_value(PARAM_URL, 'url of the profile image'),
'profileimgurlsmall' => new external_value(PARAM_URL, 'url of the profile image (small version)')
)
)
);
}