Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

MDL-27880

1. moodle_user_get_course_participants_by_id web service to get user details in course context
2. Fixed the proformance issues of get_users_by_id web service
  • Loading branch information...
commit ea4e96c248442ca940f74e38512bf7d0dfc0f265 1 parent 7a7d34f
@dcai dcai authored
Showing with 510 additions and 184 deletions.
  1. +10 −0 lib/db/services.php
  2. +499 −183 user/externallib.php
  3. +1 −1  version.php
View
10 lib/db/services.php
@@ -129,6 +129,15 @@
'capabilities'=> 'moodle/user:viewdetails, moodle/user:viewhiddendetails, moodle/course:useremail, moodle/user:update',
),
+ 'moodle_user_get_course_participants_by_id' => array(
+ 'classname' => 'moodle_user_external',
+ 'methodname' => 'get_course_participants_by_id',
+ 'classpath' => 'user/externallib.php',
+ 'description' => 'Get course user profiles by id.',
+ 'type' => 'read',
+ 'capabilities'=> 'moodle/user:viewdetails, moodle/user:viewhiddendetails, moodle/course:useremail, moodle/user:update, moodle/site:accessallgroups',
+ ),
+
'moodle_user_delete_users' => array(
'classname' => 'moodle_user_external',
'methodname' => 'delete_users',
@@ -248,6 +257,7 @@
'moodle_user_get_users_by_id',
'moodle_webservice_get_siteinfo',
'moodle_notes_create_notes',
+ 'moodle_user_get_course_participants_by_id',
'moodle_message_send_messages'),
'enabled' => 0,
'restrictedusers' => 0,
View
682 user/externallib.php
@@ -363,13 +363,21 @@ public static function get_users_by_id($userids) {
$params = self::validate_parameters(self::get_users_by_id_parameters(),
array('userids'=>$userids));
- $userscontexts = get_context_instance(CONTEXT_USER, $params['userids']);
+ list($uselect, $ujoin) = context_instance_preload_sql('u.id', CONTEXT_USER, 'ctx');
+ list($sqluserids, $params) = $DB->get_in_or_equal($userids);
+ $usersql = "SELECT u.* $uselect
+ FROM {user} u $ujoin
+ WHERE u.id $sqluserids";
+ $users = $DB->get_recordset_sql($usersql, $params);
- $users = user_get_users_by_id($params['userids']);
$result = array();
foreach ($users as $user) {
-
- $context = $userscontexts[$user->id];
+ if (!empty($user->deleted)) {
+ continue;
+ }
+ context_instance_preload($user);
+ // cached
+ $context = get_context_instance(CONTEXT_USER, $user->id);
$hasviewdetailscap = has_capability('moodle/user:viewdetails', $context);
$hasuserupdatecap = has_capability('moodle/user:update', get_system_context());
@@ -377,197 +385,193 @@ public static function get_users_by_id($userids) {
$currentuser = ($user->id == $USER->id);
- if (empty($user->deleted)) {
+ if (!$currentuser && !$hasviewdetailscap && !has_coursecontact_role($user->id)) {
+ throw new moodle_exception('usernotavailable', 'error');
+ }
- if (!$currentuser && !$hasviewdetailscap && !has_coursecontact_role($user->id)) {
- throw new moodle_exception('usernotavailable', 'error');
- }
+ $userarray = array();
- $userarray = array();
+ //basic fields
+ $userarray['id'] = $user->id;
+ if ($isadmin) {
+ $userarray['username'] = $user->username;
+ }
+ if ($isadmin or has_capability('moodle/site:viewfullnames', $context)) {
+ $userarray['firstname'] = $user->firstname;
+ $userarray['lastname'] = $user->lastname;
+ }
+ $userarray['fullname'] = fullname($user);
+
+ //fields matching permissions from /user/editadvanced.php
+ if ($currentuser or $hasuserupdatecap) {
+ $userarray['auth'] = $user->auth;
+ $userarray['confirmed'] = $user->confirmed;
+ $userarray['idnumber'] = $user->idnumber;
+ $userarray['lang'] = $user->lang;
+ $userarray['theme'] = $user->theme;
+ $userarray['timezone'] = $user->timezone;
+ $userarray['mailformat'] = $user->mailformat;
+ }
- //basic fields
- $userarray['id'] = $user->id;
- if ($isadmin) {
- $userarray['username'] = $user->username;
- }
- if ($isadmin or has_capability('moodle/site:viewfullnames', $context)) {
- $userarray['firstname'] = $user->firstname;
- $userarray['lastname'] = $user->lastname;
- }
- $userarray['fullname'] = fullname($user);
-
- //fields matching permissions from /user/editadvanced.php
- if ($currentuser or $hasuserupdatecap) {
- $userarray['auth'] = $user->auth;
- $userarray['confirmed'] = $user->confirmed;
- $userarray['idnumber'] = $user->idnumber;
- $userarray['lang'] = $user->lang;
- $userarray['theme'] = $user->theme;
- $userarray['timezone'] = $user->timezone;
- $userarray['mailformat'] = $user->mailformat;
+ //Custom fields (matching /user/profil/lib.php - profile_display_fields code logic)
+ $fields = $DB->get_recordset_sql("SELECT f.*
+ FROM {user_info_field} f
+ JOIN {user_info_category} c
+ ON f.categoryid=c.id
+ ORDER BY c.sortorder ASC, f.sortorder ASC");
+ foreach ($fields as $field) {
+ require_once($CFG->dirroot.'/user/profile/field/'.$field->datatype.'/field.class.php');
+ $newfield = 'profile_field_'.$field->datatype;
+ $formfield = new $newfield($field->id, $user->id);
+ if ($formfield->is_visible() and !$formfield->is_empty()) {
+ $userarray['customfields'][] =
+ array('name' => $formfield->field->name, 'value' => $formfield->data,
+ 'type' => $field->datatype, 'shortname' => $formfield->field->shortname);
}
+ }
+ $fields->close();
+
+ //image profiles urls (public, no permission required in fact)
+ $profileimageurl = moodle_url::make_pluginfile_url($context->id, 'user', 'icon', NULL, '/', 'f1');
+ $userarray['profileimageurl'] = $profileimageurl->out(false);
+ $profileimageurlsmall = moodle_url::make_pluginfile_url($context->id, 'user', 'icon', NULL, '/', 'f2');
+ $userarray['profileimageurlsmall'] = $profileimageurlsmall->out(false);
+
+ //hidden user field
+ if (has_capability('moodle/user:viewhiddendetails', $context)) {
+ $hiddenfields = array();
+ } else {
+ $hiddenfields = array_flip(explode(',', $CFG->hiddenuserfields));
+ }
- //Custom fields (matching /user/profil/lib.php - profile_display_fields code logic)
- $userarray['customfields'] = array();
- if ($categories = $DB->get_records('user_info_category', null, 'sortorder ASC')) {
- foreach ($categories as $category) {
- if ($fields = $DB->get_records('user_info_field', array('categoryid'=>$category->id), 'sortorder ASC')) {
- foreach ($fields as $field) {
- require_once($CFG->dirroot.'/user/profile/field/'.$field->datatype.'/field.class.php');
- $newfield = 'profile_field_'.$field->datatype;
- $formfield = new $newfield($field->id, $user->id);
- if ($formfield->is_visible() and !$formfield->is_empty()) {
- $userarray['customfields'][] =
- array('name' => $formfield->field->name, 'value' => $formfield->data,
- 'type' => $field->datatype, 'shortname' => $formfield->field->shortname);
- }
- }
- }
- }
+ if (isset($user->description) && (!isset($hiddenfields['description']) or $isadmin)) {
+ if (empty($CFG->profilesforenrolledusersonly) || $currentuser) {
+ $user->description = file_rewrite_pluginfile_urls($user->description, 'pluginfile.php', $context->id, 'user', 'profile', null);
+ $userarray['description'] = $user->description;
+ $userarray['descriptionformat'] = $user->descriptionformat;
}
+ }
- //image profiles urls (public, no permission required in fact)
- $profileimageurl = moodle_url::make_pluginfile_url($context->id, 'user', 'icon', NULL, '/', 'f1');
- $userarray['profileimageurl'] = $profileimageurl->out(false);
- $profileimageurlsmall = moodle_url::make_pluginfile_url($context->id, 'user', 'icon', NULL, '/', 'f2');
- $userarray['profileimageurlsmall'] = $profileimageurlsmall->out(false);
+ if ((! isset($hiddenfields['country']) or $isadmin) && $user->country) {
+ $userarray['country'] = $user->country;
+ }
- //hidden user field
- if (has_capability('moodle/user:viewhiddendetails', $context)) {
- $hiddenfields = array();
- } else {
- $hiddenfields = array_flip(explode(',', $CFG->hiddenuserfields));
- }
+ if ((! isset($hiddenfields['city']) or $isadmin) && $user->city) {
+ $userarray['city'] = $user->city;
+ }
- if (isset($user->description) && (!isset($hiddenfields['description']) or $isadmin)) {
- if (empty($CFG->profilesforenrolledusersonly) || $currentuser) {
- $user->description = file_rewrite_pluginfile_urls($user->description, 'pluginfile.php', $context->id, 'user', 'profile', null);
- $userarray['description'] = $user->description;
- $userarray['descriptionformat'] = $user->descriptionformat;
- }
+ if (has_capability('moodle/user:viewhiddendetails', $context)) {
+ if ($user->address) {
+ $userarray['address'] = $user->address;
}
-
- if ((! isset($hiddenfields['country']) or $isadmin) && $user->country) {
- $userarray['country'] = $user->country;
+ if ($user->phone1) {
+ $userarray['phone1'] = $user->phone1;
}
-
- if ((! isset($hiddenfields['city']) or $isadmin) && $user->city) {
- $userarray['city'] = $user->city;
+ if ($user->phone2) {
+ $userarray['phone2'] = $user->phone2;
}
+ }
- if (has_capability('moodle/user:viewhiddendetails', $context)) {
- if ($user->address) {
- $userarray['address'] = $user->address;
- }
- if ($user->phone1) {
- $userarray['phone1'] = $user->phone1;
- }
- if ($user->phone2) {
- $userarray['phone2'] = $user->phone2;
- }
- }
+ if ($currentuser
+ or $user->maildisplay == 1
+ or has_capability('moodle/course:useremail', $context)
+ or ($user->maildisplay == 2 and enrol_sharing_course($user, $USER))) {
+ $userarray['email'] = $user->email;;
+ }
- if ($currentuser
- or $user->maildisplay == 1
- or has_capability('moodle/course:useremail', $context)
- or ($user->maildisplay == 2 and enrol_sharing_course($user, $USER))) {
- $userarray['email'] = $user->email;;
+ if ($user->url && (!isset($hiddenfields['webpage']) or $isadmin)) {
+ $url = $user->url;
+ if (strpos($user->url, '://') === false) {
+ $url = 'http://'. $url;
}
+ $user->url = clean_param($user->url, PARAM_URL);
+ $userarray['url'] = $user->url;
+ }
- if ($user->url && (!isset($hiddenfields['webpage']) or $isadmin)) {
- $url = $user->url;
- if (strpos($user->url, '://') === false) {
- $url = 'http://'. $url;
- }
- $user->url = clean_param($user->url, PARAM_URL);
- $userarray['url'] = $user->url;
- }
+ if ($user->icq && (!isset($hiddenfields['icqnumber']) or $isadmin)) {
+ $userarray['icq'] = $user->icq;
+ }
- if ($user->icq && (!isset($hiddenfields['icqnumber']) or $isadmin)) {
- $userarray['icq'] = $user->icq;
- }
+ if ($user->skype && (!isset($hiddenfields['skypeid']) or $isadmin)) {
+ $userarray['skype'] = $user->skype;
+ }
+ if ($user->yahoo && (!isset($hiddenfields['yahooid']) or $isadmin)) {
+ $userarray['yahoo'] = $user->yahoo;
+ }
+ if ($user->aim && (!isset($hiddenfields['aimid']) or $isadmin)) {
+ $userarray['aim'] = $user->aim;
+ }
+ if ($user->msn && (!isset($hiddenfields['msnid']) or $isadmin)) {
+ $userarray['msn'] = $user->msn;
+ }
- if ($user->skype && (!isset($hiddenfields['skypeid']) or $isadmin)) {
- $userarray['skype'] = $user->skype;
- }
- if ($user->yahoo && (!isset($hiddenfields['yahooid']) or $isadmin)) {
- $userarray['yahoo'] = $user->yahoo;
+ if ((!isset($hiddenfields['firstaccess'])) or $isadmin) {
+ if ($user->firstaccess) {
+ $userarray['firstaccess'] = $user->firstaccess;
+ } else {
+ $userarray['firstaccess'] = 0;
}
- if ($user->aim && (!isset($hiddenfields['aimid']) or $isadmin)) {
- $userarray['aim'] = $user->aim;
+ }
+ if ((!isset($hiddenfields['lastaccess'])) or $isadmin) {
+ if ($user->lastaccess) {
+ $userarray['lastaccess'] = $user->lastaccess;
+ } else {
+ $userarray['lastaccess'] = 0;
}
- if ($user->msn && (!isset($hiddenfields['msnid']) or $isadmin)) {
- $userarray['msn'] = $user->msn;
+ }
+ /// Printing tagged interests
+ if (!empty($CFG->usetags)) {
+ require_once($CFG->dirroot . '/tag/lib.php');
+ if ($interests = tag_get_tags_csv('user', $user->id, TAG_RETURN_TEXT) ) {
+ $userarray['interests'] = $interests;
}
+ }
- if ((!isset($hiddenfields['firstaccess'])) or $isadmin) {
- if ($user->firstaccess) {
- $userarray['firstaccess'] = $user->firstaccess;
- } else {
- $userarray['firstaccess'] = 0;
- }
- }
- if ((!isset($hiddenfields['lastaccess'])) or $isadmin) {
- if ($user->lastaccess) {
- $userarray['lastaccess'] = $user->lastaccess;
- } else {
- $userarray['lastaccess'] = 0;
- }
+ //Departement/Institution are not displayed on any profile, however you can get them from editing profile.
+ if ($isadmin or $currentuser) {
+ if ($user->institution) {
+ $userarray['institution'] = $user->institution;
}
- /// Printing tagged interests
- if (!empty($CFG->usetags)) {
- require_once($CFG->dirroot . '/tag/lib.php');
- if ($interests = tag_get_tags_csv('user', $user->id, TAG_RETURN_TEXT) ) {
- $userarray['interests'] = $interests;
- }
- }
-
- //Departement/Institution are not displayed on any profile, however you can get them from editing profile.
- if ($isadmin or $currentuser) {
- if ($user->institution) {
- $userarray['institution'] = $user->institution;
- }
- if (isset($user->department)) { //isset because it's ok to have department 0
- $userarray['department'] = $user->department;
- }
+ if (isset($user->department)) { //isset because it's ok to have department 0
+ $userarray['department'] = $user->department;
}
+ }
- //list of courses where the user is enrolled
- $enrolledcourses = array();
- if (!isset($hiddenfields['mycourses'])) {
- if ($mycourses = enrol_get_users_courses($user->id, true, NULL, 'visible DESC,sortorder ASC')) {
- $courselisting = '';
- foreach ($mycourses as $mycourse) {
- if ($mycourse->category) {
- if ($mycourse->visible == 0) {
- $ccontext = get_context_instance(CONTEXT_COURSE, $mycourse->id);
- if (!has_capability('moodle/course:viewhiddencourses', $ccontext)) {
- continue;
- }
+ //list of courses where the user is enrolled
+ $enrolledcourses = array();
+ if (!isset($hiddenfields['mycourses'])) {
+ if ($mycourses = enrol_get_users_courses($user->id, true, NULL, 'visible DESC,sortorder ASC')) {
+ $courselisting = '';
+ foreach ($mycourses as $mycourse) {
+ if ($mycourse->category) {
+ if ($mycourse->visible == 0) {
+ $ccontext = get_context_instance(CONTEXT_COURSE, $mycourse->id);
+ if (!has_capability('moodle/course:viewhiddencourses', $ccontext)) {
+ continue;
}
- $enrolledcourse = array();
- $enrolledcourse['id'] = $mycourse->id;
- $enrolledcourse['fullname'] = $mycourse->fullname;
- $enrolledcourses[] = $enrolledcourse;
}
+ $enrolledcourse = array();
+ $enrolledcourse['id'] = $mycourse->id;
+ $enrolledcourse['fullname'] = $mycourse->fullname;
+ $enrolledcourses[] = $enrolledcourse;
}
- $userarray['enrolledcourses'] = $enrolledcourses;
}
- }
-
- //user preferences
- if ($currentuser) {
- $preferences = array();
- $userpreferences = get_user_preferences();
- foreach($userpreferences as $prefname => $prefvalue) {
- $preferences[] = array('name' => $prefname, 'value' => $prefvalue);
- }
- $userarray['preferences'] = $preferences;
+ $userarray['enrolledcourses'] = $enrolledcourses;
}
}
+ //user preferences
+ if ($currentuser) {
+ $preferences = array();
+ $userpreferences = get_user_preferences();
+ foreach($userpreferences as $prefname => $prefvalue) {
+ $preferences[] = array('name' => $prefname, 'value' => $prefvalue);
+ }
+ $userarray['preferences'] = $preferences;
+ }
$result[] = $userarray;
}
+ $users->close();
return $result;
}
@@ -578,8 +582,8 @@ public static function get_users_by_id($userids) {
*/
public static function get_users_by_id_returns() {
return new external_multiple_structure(
- new external_single_structure(
- array(
+ new external_single_structure(
+ array(
'id' => new external_value(PARAM_NUMBER, 'ID of the user'),
'username' => new external_value(PARAM_RAW, 'Username policy is defined in Moodle security config', VALUE_OPTIONAL),
'firstname' => new external_value(PARAM_NOTAGS, 'The first name(s) of the user', VALUE_OPTIONAL),
@@ -614,30 +618,342 @@ public static function get_users_by_id_returns() {
'profileimageurlsmall' => new external_value(PARAM_URL, 'User image profile URL - small version'),
'profileimageurl' => new external_value(PARAM_URL, 'User image profile URL - big version'),
'customfields' => new external_multiple_structure(
- new external_single_structure(
- array(
- 'type' => new external_value(PARAM_ALPHANUMEXT, 'The type of the custom field - text field, checkbox...'),
- 'value' => new external_value(PARAM_RAW, 'The value of the custom field'),
- 'name' => new external_value(PARAM_RAW, 'The name of the custom field'),
- 'shortname' => new external_value(PARAM_RAW, 'The shortname of the custom field - to be able to build the field class in the code'),
- )
- ), 'User custom fields (also known as user profil fields)', VALUE_OPTIONAL),
+ new external_single_structure(
+ array(
+ 'type' => new external_value(PARAM_ALPHANUMEXT, 'The type of the custom field - text field, checkbox...'),
+ 'value' => new external_value(PARAM_RAW, 'The value of the custom field'),
+ 'name' => new external_value(PARAM_RAW, 'The name of the custom field'),
+ 'shortname' => new external_value(PARAM_RAW, 'The shortname of the custom field - to be able to build the field class in the code'),
+ )
+ ), 'User custom fields (also known as user profil fields)', VALUE_OPTIONAL),
'preferences' => new external_multiple_structure(
- new external_single_structure(
- array(
- 'name' => new external_value(PARAM_ALPHANUMEXT, 'The name of the preferences'),
- 'value' => new external_value(PARAM_RAW, 'The value of the custom field'),
- )
- ), 'User preferences', VALUE_OPTIONAL),
+ new external_single_structure(
+ array(
+ 'name' => new external_value(PARAM_ALPHANUMEXT, 'The name of the preferences'),
+ 'value' => new external_value(PARAM_RAW, 'The value of the custom field'),
+ )
+ ), 'User preferences', VALUE_OPTIONAL),
'enrolledcourses' => new external_multiple_structure(
- new external_single_structure(
- array(
- 'id' => new external_value(PARAM_INT, 'Id of the course'),
- 'fullname' => new external_value(PARAM_RAW, 'Fullname of the course')
- )
- ), 'Courses where the user is enrolled - limited by which courses the user is able to see', VALUE_OPTIONAL)
+ new external_single_structure(
+ array(
+ 'id' => new external_value(PARAM_INT, 'Id of the course'),
+ 'fullname' => new external_value(PARAM_RAW, 'Fullname of the course')
+ )
+ ), 'Courses where the user is enrolled - limited by which courses the user is able to see', VALUE_OPTIONAL)
+ )
+ )
+ );
+ }
+ /**
+ * Returns description of method parameters
+ * @return external_function_parameters
+ */
+ public static function get_course_participants_by_id_parameters() {
+ return new external_function_parameters(
+ array(
+ 'userlist' => new external_multiple_structure(
+ new external_single_structure(
+ array(
+ 'userid' => new external_value(PARAM_INT, 'userid'),
+ 'courseid' => new external_value(PARAM_INT, 'courseid'),
)
+ )
)
+ )
+ );
+ }
+
+ /**
+ * Get course participant's details
+ * @param array $userlist array of user ids and according course ids
+ * @return array An array of arrays describing course participants
+ */
+ public static function get_course_participants_by_id($userlist) {
+ global $CFG, $USER, $DB;
+ require_once($CFG->dirroot . "/user/lib.php");
+ require_once($CFG->dirroot . "/user/profile/lib.php"); //custom field library
+ require_once($CFG->dirroot . "/lib/filelib.php"); // file handling on description and friends
+
+ $isadmin = is_siteadmin($USER);
+
+ $params = self::validate_parameters(self::get_course_participants_by_id_parameters(), array('userlist'=>$userlist));
+
+ $userids = array();
+ $courseids = array();
+ foreach ($params['userlist'] as $value) {
+ $userids[] = $value['userid'];
+ $courseids[$value['userid']] = $value['courseid'];
+ }
+
+ // cache all courses
+ $courses = array();
+ list($cselect, $cjoin) = context_instance_preload_sql('c.id', CONTEXT_COURSE, 'ctx');
+ list($sqlcourseids, $params) = $DB->get_in_or_equal(array_unique($courseids));
+ $coursesql = "SELECT c.* $uselect
+ FROM {course} c $cjoin
+ WHERE c.id $sqlcourseids";
+ $rs = $DB->get_recordset_sql($coursesql, $params);
+ foreach ($rs as $course) {
+ // adding course contexts to cache
+ context_instance_preload($course);
+ // cache courses
+ $courses[$course->id] = $course;
+ }
+ $rs->close();
+
+ list($uselect, $ujoin) = context_instance_preload_sql('u.id', CONTEXT_USER, 'ctx');
+ list($sqluserids, $params) = $DB->get_in_or_equal($userids);
+ $usersql = "SELECT u.* $uselect
+ FROM {user} u $ujoin
+ WHERE u.id $sqluserids";
+ $users = $DB->get_recordset_sql($usersql, $params);
+ $result = array();
+ foreach ($users as $user) {
+ if (!empty($user->deleted)) {
+ continue;
+ }
+ context_instance_preload($user);
+ $usercontext = get_context_instance(CONTEXT_USER, $user->id);
+ $course = $courses[$courseids[$user->id]];
+ $context = get_context_instance(CONTEXT_COURSE, $courseids[$user->id]);
+ $hasviewdetailscap = has_capability('moodle/user:viewdetails', $context) || has_capability('moodle/user:viewdetails', $usercontext);
+
+ self::validate_context($context);
+
+ $currentuser = ($user->id == $USER->id);
+
+ if (!$currentuser && !$hasviewdetailscap && !has_coursecontact_role($user->id)) {
+ throw new moodle_exception('usernotavailable', 'error');
+ }
+ $userarray = array();
+
+ //basic fields
+ $userarray['id'] = $user->id;
+ if ($isadmin) {
+ $userarray['username'] = $user->username;
+ }
+ if ($isadmin or has_capability('moodle/site:viewfullnames', $context)) {
+ $userarray['firstname'] = $user->firstname;
+ $userarray['lastname'] = $user->lastname;
+ }
+ $userarray['fullname'] = fullname($user);
+
+ //Custom fields (matching /user/profile/lib.php - profile_display_fields code logic)
+ $userarray['customfields'] = array();
+
+ $fields = $DB->get_recordset_sql("SELECT f.*
+ FROM {user_info_field} f
+ JOIN {user_info_category} c
+ ON f.categoryid=c.id
+ ORDER BY c.sortorder ASC, f.sortorder ASC");
+ foreach ($fields as $field) {
+ require_once($CFG->dirroot.'/user/profile/field/'.$field->datatype.'/field.class.php');
+ $newfield = 'profile_field_'.$field->datatype;
+ $formfield = new $newfield($field->id, $user->id);
+ if ($formfield->is_visible() and !$formfield->is_empty()) {
+ $userarray['customfields'][] =
+ array('name' => $formfield->field->name, 'value' => $formfield->data,
+ 'type' => $field->datatype, 'shortname' => $formfield->field->shortname);
+ }
+ }
+ $fields->close();
+
+ //image profiles urls (public, no permission required in fact)
+ $profileimageurl = moodle_url::make_pluginfile_url($usercontext->id, 'user', 'icon', NULL, '/', 'f1');
+ $userarray['profileimageurl'] = $profileimageurl->out(false);
+ $profileimageurlsmall = moodle_url::make_pluginfile_url($usercontext->id, 'user', 'icon', NULL, '/', 'f2');
+ $userarray['profileimageurlsmall'] = $profileimageurlsmall->out(false);
+
+ //hidden user field
+ if (has_capability('moodle/course:viewhiddenuserfields', $context)) {
+ $hiddenfields = array();
+ } else {
+ $hiddenfields = array_flip(explode(',', $CFG->hiddenuserfields));
+ }
+
+ if (isset($user->description) && (!isset($hiddenfields['description']) or $isadmin)) {
+ if (empty($CFG->profilesforenrolledusersonly) || $currentuser) {
+ $user->description = file_rewrite_pluginfile_urls($user->description, 'pluginfile.php', $context->id, 'user', 'profile', null);
+ $userarray['description'] = $user->description;
+ $userarray['descriptionformat'] = $user->descriptionformat;
+ }
+ }
+
+ if ((! isset($hiddenfields['country']) or $isadmin) && $user->country) {
+ $userarray['country'] = $user->country;
+ }
+
+ if ((! isset($hiddenfields['city']) or $isadmin) && $user->city) {
+ $userarray['city'] = $user->city;
+ }
+
+ if (has_capability('moodle/course:viewhiddenuserfields', $context)) {
+ if ($user->address) {
+ $userarray['address'] = $user->address;
+ }
+ if ($user->phone1) {
+ $userarray['phone1'] = $user->phone1;
+ }
+ if ($user->phone2) {
+ $userarray['phone2'] = $user->phone2;
+ }
+ }
+
+ if ($currentuser
+ or $user->maildisplay == 1
+ or has_capability('moodle/course:useremail', $context)
+ or ($user->maildisplay == 2 and enrol_sharing_course($user, $USER))) {
+ $userarray['email'] = $user->email;;
+ }
+
+ if ($user->url && (!isset($hiddenfields['webpage']) or $isadmin)) {
+ $url = $user->url;
+ if (strpos($user->url, '://') === false) {
+ $url = 'http://'. $url;
+ }
+ $user->url = clean_param($user->url, PARAM_URL);
+ $userarray['url'] = $user->url;
+ }
+
+ if ($user->icq && (!isset($hiddenfields['icqnumber']) or $isadmin)) {
+ $userarray['icq'] = $user->icq;
+ }
+
+ if ($user->skype && (!isset($hiddenfields['skypeid']) or $isadmin)) {
+ $userarray['skype'] = $user->skype;
+ }
+ if ($user->yahoo && (!isset($hiddenfields['yahooid']) or $isadmin)) {
+ $userarray['yahoo'] = $user->yahoo;
+ }
+ if ($user->aim && (!isset($hiddenfields['aimid']) or $isadmin)) {
+ $userarray['aim'] = $user->aim;
+ }
+ if ($user->msn && (!isset($hiddenfields['msnid']) or $isadmin)) {
+ $userarray['msn'] = $user->msn;
+ }
+
+ if ((!isset($hiddenfields['firstaccess'])) or $isadmin) {
+ if ($user->firstaccess) {
+ $userarray['firstaccess'] = $user->firstaccess;
+ } else {
+ $userarray['firstaccess'] = 0;
+ }
+ }
+ if ((!isset($hiddenfields['lastaccess'])) or $isadmin) {
+ if ($user->lastaccess) {
+ $userarray['lastaccess'] = $user->lastaccess;
+ } else {
+ $userarray['lastaccess'] = 0;
+ }
+ }
+ /// Printing tagged interests
+ if (!empty($CFG->usetags)) {
+ require_once($CFG->dirroot . '/tag/lib.php');
+ if ($interests = tag_get_tags_csv('user', $user->id, TAG_RETURN_TEXT) ) {
+ $userarray['interests'] = $interests;
+ }
+ }
+
+ //Departement/Institution are not displayed on any profile, however you can get them from editing profile.
+ if ($isadmin or $currentuser) {
+ if ($user->institution) {
+ $userarray['institution'] = $user->institution;
+ }
+ if (isset($user->department)) { //isset because it's ok to have department 0
+ $userarray['department'] = $user->department;
+ }
+ }
+
+ // not a big secret
+ $userarray['roles'] = array();
+ $roles = get_user_roles($context, $user->id, false);
+ foreach ($roles as $role) {
+ $userarray['roles'][] = array(
+ 'roleid' => $role->roleid,
+ 'name' => $role->name,
+ 'shortname' => $role->shortname,
+ 'sortorder' => $role->sortorder
+ );
+ }
+
+ // If groups are in use and enforced throughout the course, then make sure we can meet in at least one course level group
+ if (has_capability('moodle/site:accessallgroups', $context)) {
+ $usergroups = groups_get_all_groups($course->id, $user->id, $course->defaultgroupingid, 'g.id, g.name,g.description');
+ foreach ($usergroups as $group) {
+ $group->description = file_rewrite_pluginfile_urls($group->description, 'pluginfile.php', $context->id, 'group', 'description', $group->id);
+ $userarray['groups'][] = array('id'=>$group->id, 'name'=>$group->name, 'description'=>$group->description);
+ }
+ }
+ $result[] = $userarray;
+ }
+
+ $users->close();
+
+ return $result;
+ }
+
+ /**
+ * Returns description of method result value
+ * @return external_description
+ */
+ public static function get_course_participants_by_id_returns() {
+ return new external_multiple_structure(
+ new external_single_structure(
+ array(
+ 'id' => new external_value(PARAM_NUMBER, 'ID of the user'),
+ 'username' => new external_value(PARAM_RAW, 'Username policy is defined in Moodle security config', VALUE_OPTIONAL),
+ 'firstname' => new external_value(PARAM_NOTAGS, 'The first name(s) of the user', VALUE_OPTIONAL),
+ 'lastname' => new external_value(PARAM_NOTAGS, 'The family name of the user', VALUE_OPTIONAL),
+ 'fullname' => new external_value(PARAM_NOTAGS, 'The fullname of the user'),
+ 'email' => new external_value(PARAM_TEXT, 'An email address - allow email as root@localhost', VALUE_OPTIONAL),
+ 'address' => new external_value(PARAM_MULTILANG, 'Postal address', VALUE_OPTIONAL),
+ 'phone1' => new external_value(PARAM_NOTAGS, 'Phone 1', VALUE_OPTIONAL),
+ 'phone2' => new external_value(PARAM_NOTAGS, 'Phone 2', VALUE_OPTIONAL),
+ 'icq' => new external_value(PARAM_NOTAGS, 'icq number', VALUE_OPTIONAL),
+ 'skype' => new external_value(PARAM_NOTAGS, 'skype id', VALUE_OPTIONAL),
+ 'yahoo' => new external_value(PARAM_NOTAGS, 'yahoo id', VALUE_OPTIONAL),
+ 'aim' => new external_value(PARAM_NOTAGS, 'aim id', VALUE_OPTIONAL),
+ 'msn' => new external_value(PARAM_NOTAGS, 'msn number', VALUE_OPTIONAL),
+ 'department' => new external_value(PARAM_TEXT, 'department', VALUE_OPTIONAL),
+ 'institution' => new external_value(PARAM_TEXT, 'institution', VALUE_OPTIONAL),
+ 'interests' => new external_value(PARAM_TEXT, 'user interests (separated by commas)', VALUE_OPTIONAL),
+ 'firstaccess' => new external_value(PARAM_INT, 'first access to the site (0 if never)', VALUE_OPTIONAL),
+ 'lastaccess' => new external_value(PARAM_INT, 'last access to the site (0 if never)', VALUE_OPTIONAL),
+ 'description' => new external_value(PARAM_RAW, 'User profile description', VALUE_OPTIONAL),
+ 'descriptionformat' => new external_value(PARAM_INT, 'User profile description format', VALUE_OPTIONAL),
+ 'city' => new external_value(PARAM_NOTAGS, 'Home city of the user', VALUE_OPTIONAL),
+ 'url' => new external_value(PARAM_URL, 'URL of the user', VALUE_OPTIONAL),
+ 'country' => new external_value(PARAM_ALPHA, 'Home country code of the user, such as AU or CZ', VALUE_OPTIONAL),
+ 'profileimageurlsmall' => new external_value(PARAM_URL, 'User image profile URL - small version'),
+ 'profileimageurl' => new external_value(PARAM_URL, 'User image profile URL - big version'),
+ 'customfields' => new external_multiple_structure(
+ new external_single_structure(
+ array(
+ 'type' => new external_value(PARAM_ALPHANUMEXT, 'The type of the custom field - text field, checkbox...'),
+ 'value' => new external_value(PARAM_RAW, 'The value of the custom field'),
+ 'name' => new external_value(PARAM_RAW, 'The name of the custom field'),
+ 'shortname' => new external_value(PARAM_RAW, 'The shortname of the custom field - to be able to build the field class in the code'),
+ )
+ ), 'User custom fields (also known as user profil fields)', VALUE_OPTIONAL),
+ 'groups' => new external_multiple_structure(
+ new external_single_structure(
+ array(
+ 'id' => new external_value(PARAM_INT, 'group id'),
+ 'name' => new external_value(PARAM_RAW, 'group name'),
+ 'description' => new external_value(PARAM_RAW, 'group description'),
+ )
+ ), 'user groups', VALUE_OPTIONAL),
+ 'roles' => new external_multiple_structure(
+ new external_single_structure(
+ array(
+ 'roleid' => new external_value(PARAM_INT, 'role id'),
+ 'name' => new external_value(PARAM_RAW, 'role name'),
+ 'shortname' => new external_value(PARAM_ALPHANUMEXT, 'role shortname'),
+ 'sortorder' => new external_value(PARAM_INT, 'role sortorder')
+ )
+ ), 'user roles', VALUE_OPTIONAL),
+ )
+ )
);
}
}
View
2  version.php
@@ -31,7 +31,7 @@
-$version = 2011061700.01; // YYYYMMDD = weekly release date of this DEV branch
+$version = 2011061700.02; // YYYYMMDD = weekly release date of this DEV branch
// RR = release increments - 00 in DEV branches
// .XX = incremental changes
Please sign in to comment.
Something went wrong with that request. Please try again.