mirror of
https://github.com/moodle/moodle.git
synced 2025-04-13 12:32:08 +02:00
Merge branch 'MDL-77726-master' of https://github.com/jleyva/moodle
This commit is contained in:
commit
09171a3c3a
@ -1149,7 +1149,9 @@ class core_user_external extends \core_external\external_api {
|
||||
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'),
|
||||
'value' => new external_value(PARAM_RAW, 'The value of the custom field (as stored in the database)'),
|
||||
'displayvalue' => new external_value(PARAM_RAW, 'The value of the custom field for display',
|
||||
VALUE_OPTIONAL),
|
||||
'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'),
|
||||
)
|
||||
|
20
user/lib.php
20
user/lib.php
@ -361,19 +361,13 @@ function user_get_user_details($user, $course = null, array $userfields = array(
|
||||
foreach ($fields as $formfield) {
|
||||
if ($formfield->is_visible() and !$formfield->is_empty()) {
|
||||
|
||||
// TODO: Part of MDL-50728, this conditional coding must be moved to
|
||||
// proper profile fields API so they are self-contained.
|
||||
// We only use display_data in fields that require text formatting.
|
||||
if ($formfield->field->datatype == 'text' or $formfield->field->datatype == 'textarea') {
|
||||
$fieldvalue = $formfield->display_data();
|
||||
} else {
|
||||
// Cases: datetime, checkbox and menu.
|
||||
$fieldvalue = $formfield->data;
|
||||
}
|
||||
|
||||
$userdetails['customfields'][] =
|
||||
array('name' => $formfield->field->name, 'value' => $fieldvalue,
|
||||
'type' => $formfield->field->datatype, 'shortname' => $formfield->field->shortname);
|
||||
$userdetails['customfields'][] = [
|
||||
'name' => $formfield->field->name,
|
||||
'value' => $formfield->data,
|
||||
'displayvalue' => $formfield->display_data(),
|
||||
'type' => $formfield->field->datatype,
|
||||
'shortname' => $formfield->field->shortname
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -168,6 +168,24 @@ class profile_field_menu extends profile_field_base {
|
||||
public function get_field_properties() {
|
||||
return array(PARAM_TEXT, NULL_NOT_ALLOWED);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the field settings suitable to be exported via an external function.
|
||||
*
|
||||
* @return array all the settings
|
||||
*/
|
||||
public function get_field_config_for_external() {
|
||||
|
||||
if (isset($this->field->param1) && !empty($this->options)) {
|
||||
// Remove "Choose" option to make it consisten with the rest of the data.
|
||||
if (!empty($this->field->required)) {
|
||||
unset($this->options['']);
|
||||
}
|
||||
$this->field->param2 = implode("\n", array_values($this->options));
|
||||
}
|
||||
|
||||
return (array) $this->field;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -184,7 +184,20 @@ class externallib_test extends externallib_advanced_testcase {
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$course = self::getDataGenerator()->create_course();
|
||||
$generator = self::getDataGenerator();
|
||||
|
||||
// Create complex user profile field supporting multi-lang.
|
||||
filter_set_global_state('multilang', TEXTFILTER_ON);
|
||||
$statuses = 'UE\nSE\n<span lang="en" class="multilang">Other</span><span lang="es" class="multilang">Otro</span>';
|
||||
$generator->create_custom_profile_field(
|
||||
[
|
||||
'datatype' => 'menu',
|
||||
'shortname' => 'employmentstatus', 'name' => 'Employment status',
|
||||
'param1' => $statuses
|
||||
]
|
||||
);
|
||||
|
||||
$course = $generator->create_course();
|
||||
$user1 = array(
|
||||
'username' => 'usernametest1',
|
||||
'idnumber' => 'idnumbertest1',
|
||||
@ -200,14 +213,16 @@ class externallib_test extends externallib_advanced_testcase {
|
||||
'descriptionformat' => FORMAT_MOODLE,
|
||||
'city' => 'Perth',
|
||||
'country' => 'AU',
|
||||
'profile_field_jobposition' => 'Manager',
|
||||
'profile_field_employmentstatus' => explode('\n', $statuses)[2],
|
||||
);
|
||||
$user1 = self::getDataGenerator()->create_user($user1);
|
||||
$user1 = $generator->create_user($user1);
|
||||
if (!empty($CFG->usetags)) {
|
||||
require_once($CFG->dirroot . '/user/editlib.php');
|
||||
$user1->interests = array('Cinema', 'Tennis', 'Dance', 'Guitar', 'Cooking');
|
||||
useredit_update_interests($user1, $user1->interests);
|
||||
}
|
||||
$user2 = self::getDataGenerator()->create_user(
|
||||
$user2 = $generator->create_user(
|
||||
array('username' => 'usernametest2', 'idnumber' => 'idnumbertest2'));
|
||||
|
||||
$generatedusers = array();
|
||||
@ -218,9 +233,9 @@ class externallib_test extends externallib_advanced_testcase {
|
||||
$roleid = $this->assignUserCapability('moodle/user:viewdetails', $context->id);
|
||||
|
||||
// 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');
|
||||
$generator->enrol_user($user1->id, $course->id, $roleid, 'manual');
|
||||
$generator->enrol_user($user2->id, $course->id, $roleid, 'manual');
|
||||
$generator->enrol_user($USER->id, $course->id, $roleid, 'manual');
|
||||
|
||||
// call as admin and receive all possible fields.
|
||||
$this->setAdminUser();
|
||||
@ -290,6 +305,13 @@ class externallib_test extends externallib_advanced_testcase {
|
||||
// Default language and no theme were used for the user.
|
||||
$this->assertEquals($CFG->lang, $returneduser['lang']);
|
||||
$this->assertEmpty($returneduser['theme']);
|
||||
|
||||
if ($returneduser['id'] == $user1->id) {
|
||||
$this->assertCount(1, $returneduser['customfields']);
|
||||
$dbvalue = explode('\n', $statuses)[2];
|
||||
$this->assertEquals($dbvalue, $returneduser['customfields'][0]['value']);
|
||||
$this->assertEquals('Other', $returneduser['customfields'][0]['displayvalue']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,10 @@ This files describes API changes for code that uses the user API.
|
||||
* New `profile_get_user_field` method for returning profile field instance of given type
|
||||
* The `profile_field_base::is_visible` method now accepts an optional `$context` argument
|
||||
* External function core_user_external::add_user_private_files() now returns moodle_exception when the user quota is exceeded
|
||||
* The `customfields` structure used for returning user profile fields information has been updated to:
|
||||
* Return in the field `value` the value of the custom field (as stored in the database)
|
||||
* Return in the field `displayvalue` the value of the custom field for display
|
||||
External systems displaying user information should always use `displayvalue`.
|
||||
|
||||
=== 4.1 ===
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user