MDL-29938 get_users - search users external function
This commit is contained in:
@@ -273,6 +273,15 @@ $functions = array(
|
||||
'capabilities'=> 'moodle/user:create',
|
||||
),
|
||||
|
||||
'core_user_get_users' => array(
|
||||
'classname' => 'core_user_external',
|
||||
'methodname' => 'get_users',
|
||||
'classpath' => 'user/externallib.php',
|
||||
'description' => 'search for users matching the parameters',
|
||||
'type' => 'read',
|
||||
'capabilities'=> 'moodle/user:viewdetails, moodle/user:viewhiddendetails, moodle/course:useremail, moodle/user:update',
|
||||
),
|
||||
|
||||
'moodle_user_get_users_by_id' => array(
|
||||
'classname' => 'core_user_external',
|
||||
'methodname' => 'get_users_by_id',
|
||||
|
||||
+247
-166
@@ -458,63 +458,173 @@ class core_user_external extends external_api {
|
||||
* @since Moodle 2.4
|
||||
*/
|
||||
public static function get_users_by_field_returns() {
|
||||
return new external_multiple_structure(
|
||||
new external_single_structure(
|
||||
array(
|
||||
'id' => new external_value(PARAM_INT, 'ID of the user'),
|
||||
'username' => new external_value(PARAM_USERNAME, '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_EMAIL, 'An email address', VALUE_OPTIONAL),
|
||||
'address' => new external_value(PARAM_TEXT, '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),
|
||||
'idnumber' => new external_value(PARAM_RAW, 'An arbitrary ID code number perhaps from the 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),
|
||||
'auth' => new external_value(PARAM_PLUGIN, 'Auth plugins include manual, ldap, imap, etc', VALUE_OPTIONAL),
|
||||
'confirmed' => new external_value(PARAM_INT, 'Active user: 1 if confirmed, 0 otherwise', VALUE_OPTIONAL),
|
||||
'lang' => new external_value(PARAM_SAFEDIR, 'Language code such as "en", must exist on server', VALUE_OPTIONAL),
|
||||
'theme' => new external_value(PARAM_PLUGIN, 'Theme name such as "standard", must exist on server', VALUE_OPTIONAL),
|
||||
'timezone' => new external_value(PARAM_TIMEZONE, 'Timezone code such as Australia/Perth, or 99 for default', VALUE_OPTIONAL),
|
||||
'mailformat' => new external_value(PARAM_INT, 'Mail format code is 0 for plain text, 1 for HTML etc', VALUE_OPTIONAL),
|
||||
'description' => new external_value(PARAM_RAW, 'User profile description', VALUE_OPTIONAL),
|
||||
'descriptionformat' => new external_format_value('description', 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),
|
||||
'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)
|
||||
return new external_multiple_structure(core_user_external::user_description());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns description of get_users() parameters
|
||||
*
|
||||
* @return external_function_parameters
|
||||
* @since Moodle 2.4
|
||||
*/
|
||||
public static function get_users_parameters() {
|
||||
return new external_function_parameters(
|
||||
array(
|
||||
'criteria' => new external_multiple_structure(
|
||||
new external_single_structure(
|
||||
array(
|
||||
'key' => new external_value(PARAM_ALPHA, 'the user column to search, expected keys (value format) are:
|
||||
"id" (int) matching user id,
|
||||
"lastname" (string) user last name (Note: you can use % for searching but it can be slow!),
|
||||
"firstname" (string) user first name (Note: you can use % for searching but it can be slow!),
|
||||
"idnumber" (string) matching user idnumber,
|
||||
"username" (string) matching user username,
|
||||
"email" (string) user email (Note: you can use % for searching but it can be slow!),
|
||||
"auth" (plugin) matching user auth plugin'),
|
||||
'value' => new external_value(PARAM_RAW, 'the value to search')
|
||||
)
|
||||
), 'the key/value pairs to be considered in user search. Values can not be empty.
|
||||
Specifiy different keys only once (fullname => \'user1\', auth => \'manual\', ...) -
|
||||
key occurences are ignored, only the last occurence is considered.
|
||||
The search is executed with AND operator on the criterias.'
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve matching user
|
||||
*
|
||||
* @param string $field
|
||||
* @param array $values
|
||||
* @return array An array of arrays containg user profiles.
|
||||
* @since Moodle 2.4
|
||||
*/
|
||||
public static function get_users($criteria = array()) {
|
||||
global $CFG, $USER, $DB;
|
||||
|
||||
require_once($CFG->dirroot . "/user/lib.php");
|
||||
|
||||
$params = self::validate_parameters(self::get_users_parameters(),
|
||||
array('criteria' => $criteria));
|
||||
|
||||
// Validate the criteria and retrieve the users
|
||||
$cleanedvalues = array();
|
||||
$firstcriteria = true;
|
||||
$users = array();
|
||||
$warnings = array();
|
||||
$sql = '';
|
||||
$sqlparams = array();
|
||||
|
||||
foreach ($params['criteria'] as $criteria) {
|
||||
|
||||
// Clean the parameters
|
||||
$paramtype = PARAM_RAW;
|
||||
switch ($criteria['key']) {
|
||||
case 'id':
|
||||
$paramtype = PARAM_INT;
|
||||
break;
|
||||
case 'idnumber':
|
||||
$paramtype = PARAM_RAW;
|
||||
break;
|
||||
case 'username':
|
||||
$paramtype = PARAM_USERNAME;
|
||||
break;
|
||||
case 'email':
|
||||
// we use PARAM_RAW to allow searches with %
|
||||
$paramtype = PARAM_RAW;
|
||||
break;
|
||||
case 'auth':
|
||||
$paramtype = PARAM_AUTH;
|
||||
break;
|
||||
case 'lastname':
|
||||
case 'firstname':
|
||||
$paramtype = PARAM_TEXT;
|
||||
break;
|
||||
default:
|
||||
// Send back a warning that this search key is not supported in this version
|
||||
// This warning will make the function extandable without breaking clients
|
||||
$warnings[] = array(
|
||||
'item' => 'key',
|
||||
'itemid' => $criteria['key'],
|
||||
'warningcode' => 'invalidfieldparameter',
|
||||
'message' => 'The search key \'' . $$criteria['key'] . '\' is not supported, look at the web service documentation'
|
||||
);
|
||||
}
|
||||
$cleanedvalue = clean_param($criteria['value'], $paramtype);
|
||||
|
||||
// If first criteria do not add AND to the query
|
||||
if ($firstcriteria) {
|
||||
$firstcriteria = false;
|
||||
} else {
|
||||
$sql .= ' AND ';
|
||||
}
|
||||
|
||||
// Create the SQL
|
||||
switch ($criteria['key']) {
|
||||
case 'id':
|
||||
case 'idnumber':
|
||||
case 'username':
|
||||
case 'auth':
|
||||
$sql .= $criteria['key'] . ' = :' . $criteria['key'];
|
||||
$sqlparams[$criteria['key']] = $cleanedvalue;
|
||||
break;
|
||||
case 'email':
|
||||
case 'lastname':
|
||||
case 'firstname':
|
||||
$sql .= $DB->sql_like($criteria['key'], ':'.$criteria['key'], false);
|
||||
$sqlparams[$criteria['key']] = $cleanedvalue;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$users = $DB->get_records_select('user', $sql, $sqlparams, 'id ASC');
|
||||
|
||||
// Finally retrieve each users information
|
||||
$returnedusers = array();
|
||||
foreach ($users as $user) {
|
||||
|
||||
$userdetails = user_get_user_details_courses($user);
|
||||
|
||||
// Return the user only if all the searched fields are returned.
|
||||
// Otherwise it means that the $USER was not allowed to search the returned user.
|
||||
if (!empty($userdetails)) {
|
||||
$validuser = true;
|
||||
|
||||
foreach($params['criteria'] as $criteria) {
|
||||
if (empty($userdetails[$criteria['key']])) {
|
||||
$validuser = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($validuser) {
|
||||
$returnedusers[] = $userdetails;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return array('users' => $returnedusers, 'warnings' => $warnings);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns description of get_users result value
|
||||
*
|
||||
* @return external_description
|
||||
* @since Moodle 2.3
|
||||
*/
|
||||
public static function get_users_returns() {
|
||||
return new external_single_structure(
|
||||
array('users' => new external_multiple_structure(
|
||||
core_user_external::user_description()
|
||||
),
|
||||
'warnings' => new external_warnings()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns description of method parameters
|
||||
*
|
||||
@@ -583,6 +693,8 @@ class core_user_external extends external_api {
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Returns description of method result value
|
||||
*
|
||||
@@ -591,67 +703,7 @@ class core_user_external extends external_api {
|
||||
*/
|
||||
public static function get_users_by_id_returns() {
|
||||
return new external_multiple_structure(
|
||||
new external_single_structure(
|
||||
array(
|
||||
'id' => new external_value(PARAM_INT, '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_TEXT, '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),
|
||||
'auth' => new external_value(PARAM_PLUGIN, 'Auth plugins include manual, ldap, imap, etc', VALUE_OPTIONAL),
|
||||
'confirmed' => new external_value(PARAM_INT, 'Active user: 1 if confirmed, 0 otherwise', VALUE_OPTIONAL),
|
||||
'idnumber' => new external_value(PARAM_RAW, 'An arbitrary ID code number perhaps from the institution', VALUE_OPTIONAL),
|
||||
'lang' => new external_value(PARAM_SAFEDIR, 'Language code such as "en", must exist on server', VALUE_OPTIONAL),
|
||||
'theme' => new external_value(PARAM_PLUGIN, 'Theme name such as "standard", must exist on server', VALUE_OPTIONAL),
|
||||
'timezone' => new external_value(PARAM_TIMEZONE, 'Timezone code such as Australia/Perth, or 99 for default', VALUE_OPTIONAL),
|
||||
'mailformat' => new external_value(PARAM_INT, 'Mail format code is 0 for plain text, 1 for HTML etc', VALUE_OPTIONAL),
|
||||
'description' => new external_value(PARAM_RAW, 'User profile description', VALUE_OPTIONAL),
|
||||
'descriptionformat' => new external_format_value('description', 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),
|
||||
'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),
|
||||
'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'),
|
||||
'shortname' => new external_value(PARAM_RAW, 'Shortname of the course')
|
||||
)
|
||||
), 'Courses where the user is enrolled - limited by which courses the user is able to see', VALUE_OPTIONAL)
|
||||
)
|
||||
)
|
||||
core_user_external::user_description()
|
||||
);
|
||||
}
|
||||
/**
|
||||
@@ -742,45 +794,7 @@ class core_user_external extends external_api {
|
||||
* @since Moodle 2.2
|
||||
*/
|
||||
public static function get_course_user_profiles_returns() {
|
||||
return new external_multiple_structure(
|
||||
new external_single_structure(
|
||||
array(
|
||||
'id' => new external_value(PARAM_INT, '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_TEXT, '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),
|
||||
'idnumber' => new external_value(PARAM_RAW, 'An arbitrary ID code number perhaps from the 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_format_value('description', 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),
|
||||
$additionalfields = array(
|
||||
'groups' => new external_multiple_structure(
|
||||
new external_single_structure(
|
||||
array(
|
||||
@@ -799,25 +813,83 @@ class core_user_external extends external_api {
|
||||
'sortorder' => new external_value(PARAM_INT, 'role sortorder')
|
||||
)
|
||||
), 'user roles', 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'),
|
||||
'shortname' => new external_value(PARAM_RAW, 'Shortname of the course')
|
||||
)
|
||||
), 'Courses where the user is enrolled - limited by which courses the user is able to see', VALUE_OPTIONAL)
|
||||
);
|
||||
|
||||
return new external_multiple_structure(core_user_external::user_description($additionalfields));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create user return value description.
|
||||
*
|
||||
* @param array $additionalfiels some additional field
|
||||
* @return single_structure_description
|
||||
*/
|
||||
public static function user_description($additionalfiels = array()) {
|
||||
$userfields = array(
|
||||
'id' => new external_value(PARAM_INT, 'ID of the user'),
|
||||
'username' => new external_value(PARAM_USERNAME, '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_TEXT, '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),
|
||||
'idnumber' => new external_value(PARAM_RAW, 'An arbitrary ID code number perhaps from the 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),
|
||||
'auth' => new external_value(PARAM_PLUGIN, 'Auth plugins include manual, ldap, imap, etc', VALUE_OPTIONAL),
|
||||
'confirmed' => new external_value(PARAM_INT, 'Active user: 1 if confirmed, 0 otherwise', VALUE_OPTIONAL),
|
||||
'lang' => new external_value(PARAM_SAFEDIR, 'Language code such as "en", must exist on server', VALUE_OPTIONAL),
|
||||
'theme' => new external_value(PARAM_PLUGIN, 'Theme name such as "standard", must exist on server', VALUE_OPTIONAL),
|
||||
'timezone' => new external_value(PARAM_TIMEZONE, 'Timezone code such as Australia/Perth, or 99 for default', VALUE_OPTIONAL),
|
||||
'mailformat' => new external_value(PARAM_INT, 'Mail format code is 0 for plain text, 1 for HTML etc', VALUE_OPTIONAL),
|
||||
'description' => new external_value(PARAM_RAW, 'User profile description', VALUE_OPTIONAL),
|
||||
'descriptionformat' => new external_format_value('description', 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),
|
||||
'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),
|
||||
'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'),
|
||||
'shortname' => new external_value(PARAM_RAW, 'Shortname of the course')
|
||||
)
|
||||
), 'Courses where the user is enrolled - limited by which courses the user is able to see', VALUE_OPTIONAL)
|
||||
)
|
||||
)
|
||||
);
|
||||
), 'Users preferences', VALUE_OPTIONAL)
|
||||
);
|
||||
if (!empty($additionalfields)) {
|
||||
$userfields = array_merge($userfields, $additionalfields);
|
||||
}
|
||||
return new external_single_structure($userfields);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -995,7 +1067,16 @@ class moodle_user_external extends external_api {
|
||||
* @see core_user_external::get_users_by_id_returns()
|
||||
*/
|
||||
public static function get_users_by_id_returns() {
|
||||
return core_user_external::get_users_by_id_returns();
|
||||
$additionalfields = array (
|
||||
'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'),
|
||||
'shortname' => new external_value(PARAM_RAW, 'Shortname of the course')
|
||||
)
|
||||
), 'Courses where the user is enrolled - limited by which courses the user is able to see', VALUE_OPTIONAL));
|
||||
return core_user_external::get_users_by_id_returns($additionalfields);
|
||||
}
|
||||
/**
|
||||
* Returns description of method parameters
|
||||
@@ -1085,4 +1166,4 @@ class moodle_user_external extends external_api {
|
||||
require_once($CFG->dirroot . '/enrol/externallib.php');
|
||||
return core_enrol_external::get_enrolled_users_returns();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,156 @@ require_once($CFG->dirroot . '/user/externallib.php');
|
||||
|
||||
class core_user_external_testcase extends externallib_advanced_testcase {
|
||||
|
||||
/**
|
||||
* Test get_users
|
||||
*/
|
||||
public function test_get_users() {
|
||||
global $USER, $CFG;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$course = self::getDataGenerator()->create_course();
|
||||
$user1 = array(
|
||||
'username' => 'usernametest1',
|
||||
'idnumber' => 'idnumbertest1',
|
||||
'firstname' => 'First Name User Test 1',
|
||||
'lastname' => 'Last Name User Test 1',
|
||||
'email' => '[email protected]',
|
||||
'address' => '2 Test Street Perth 6000 WA',
|
||||
'phone1' => '01010101010',
|
||||
'phone2' => '02020203',
|
||||
'icq' => 'testuser1',
|
||||
'skype' => 'testuser1',
|
||||
'yahoo' => 'testuser1',
|
||||
'aim' => 'testuser1',
|
||||
'msn' => 'testuser1',
|
||||
'department' => 'Department of user 1',
|
||||
'institution' => 'Institution of user 1',
|
||||
'description' => 'This is a description for user 1',
|
||||
'descriptionformat' => FORMAT_MOODLE,
|
||||
'city' => 'Perth',
|
||||
'url' => 'http://moodle.org',
|
||||
'country' => 'au'
|
||||
);
|
||||
$user1 = self::getDataGenerator()->create_user($user1);
|
||||
if (!empty($CFG->usetags)) {
|
||||
require_once($CFG->dirroot . '/user/editlib.php');
|
||||
require_once($CFG->dirroot . '/tag/lib.php');
|
||||
$user1->interests = array('Cinema', 'Tennis', 'Dance', 'Guitar', 'Cooking');
|
||||
useredit_update_interests($user1, $user1->interests);
|
||||
}
|
||||
$user2 = self::getDataGenerator()->create_user(
|
||||
array('username' => 'usernametest2', 'idnumber' => 'idnumbertest2'));
|
||||
|
||||
$generatedusers = array();
|
||||
$generatedusers[$user1->id] = $user1;
|
||||
$generatedusers[$user2->id] = $user2;
|
||||
|
||||
$context = context_course::instance($course->id);
|
||||
$roleid = $this->assignUserCapability('moodle/user:viewdetails', $context->id);
|
||||
|
||||
// Enrol the users in the course.
|
||||
// We use the manual plugin.
|
||||
$enrol = enrol_get_plugin('manual');
|
||||
$enrolinstances = enrol_get_instances($course->id, true);
|
||||
foreach ($enrolinstances as $courseenrolinstance) {
|
||||
if ($courseenrolinstance->enrol == "manual") {
|
||||
$instance = $courseenrolinstance;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$enrol->enrol_user($instance, $user1->id, $roleid);
|
||||
$enrol->enrol_user($instance, $user2->id, $roleid);
|
||||
$enrol->enrol_user($instance, $USER->id, $roleid);
|
||||
|
||||
// call as admin and receive all possible fields.
|
||||
$this->setAdminUser();
|
||||
|
||||
$searchparams = array(
|
||||
array('key' => 'email', 'value' => $user1->email),
|
||||
array('key' => 'firstname', 'value' => $user1->firstname));
|
||||
|
||||
// Call the external function.
|
||||
$result = core_user_external::get_users($searchparams);
|
||||
|
||||
// Check we retrieve the good total number of enrolled users + no error on capability.
|
||||
$expectedreturnedusers = 1;
|
||||
$returnedusers = $result['users'];
|
||||
$this->assertEquals($expectedreturnedusers, count($returnedusers));
|
||||
|
||||
foreach($returnedusers as $returneduser) {
|
||||
$generateduser = ($returneduser['id'] == $USER->id) ?
|
||||
$USER : $generatedusers[$returneduser['id']];
|
||||
$this->assertEquals($generateduser->username, $returneduser['username']);
|
||||
if (!empty($generateduser->idnumber)) {
|
||||
$this->assertEquals($generateduser->idnumber, $returneduser['idnumber']);
|
||||
}
|
||||
$this->assertEquals($generateduser->firstname, $returneduser['firstname']);
|
||||
$this->assertEquals($generateduser->lastname, $returneduser['lastname']);
|
||||
if ($generateduser->email != $USER->email) { //don't check the tmp modified $USER email
|
||||
$this->assertEquals($generateduser->email, $returneduser['email']);
|
||||
}
|
||||
if (!empty($generateduser->address)) {
|
||||
$this->assertEquals($generateduser->address, $returneduser['address']);
|
||||
}
|
||||
if (!empty($generateduser->phone1)) {
|
||||
$this->assertEquals($generateduser->phone1, $returneduser['phone1']);
|
||||
}
|
||||
if (!empty($generateduser->phone2)) {
|
||||
$this->assertEquals($generateduser->phone2, $returneduser['phone2']);
|
||||
}
|
||||
if (!empty($generateduser->icq)) {
|
||||
$this->assertEquals($generateduser->icq, $returneduser['icq']);
|
||||
}
|
||||
if (!empty($generateduser->skype)) {
|
||||
$this->assertEquals($generateduser->skype, $returneduser['skype']);
|
||||
}
|
||||
if (!empty($generateduser->yahoo)) {
|
||||
$this->assertEquals($generateduser->yahoo, $returneduser['yahoo']);
|
||||
}
|
||||
if (!empty($generateduser->aim)) {
|
||||
$this->assertEquals($generateduser->aim, $returneduser['aim']);
|
||||
}
|
||||
if (!empty($generateduser->msn)) {
|
||||
$this->assertEquals($generateduser->msn, $returneduser['msn']);
|
||||
}
|
||||
if (!empty($generateduser->department)) {
|
||||
$this->assertEquals($generateduser->department, $returneduser['department']);
|
||||
}
|
||||
if (!empty($generateduser->institution)) {
|
||||
$this->assertEquals($generateduser->institution, $returneduser['institution']);
|
||||
}
|
||||
if (!empty($generateduser->description)) {
|
||||
$this->assertEquals($generateduser->description, $returneduser['description']);
|
||||
}
|
||||
if (!empty($generateduser->descriptionformat)) {
|
||||
$this->assertEquals(FORMAT_HTML, $returneduser['descriptionformat']);
|
||||
}
|
||||
if (!empty($generateduser->city)) {
|
||||
$this->assertEquals($generateduser->city, $returneduser['city']);
|
||||
}
|
||||
if (!empty($generateduser->country)) {
|
||||
$this->assertEquals($generateduser->country, $returneduser['country']);
|
||||
}
|
||||
if (!empty($generateduser->url)) {
|
||||
$this->assertEquals($generateduser->url, $returneduser['url']);
|
||||
}
|
||||
if (!empty($CFG->usetags) and !empty($generateduser->interests)) {
|
||||
$this->assertEquals(implode(', ', $generateduser->interests), $returneduser['interests']);
|
||||
}
|
||||
}
|
||||
|
||||
// Test that no result are returned for search by username if we are not admin
|
||||
$this->setGuestUser();
|
||||
|
||||
// Call the external function.
|
||||
$returnedusers = core_user_external::get_users_by_field('username',
|
||||
array($USER->username, $user1->username, $user2->username));
|
||||
|
||||
// Only the own $USER username should be returned
|
||||
$this->assertEquals(1, count($returnedusers));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get_users_by_field
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user