From bbeba0756df44d0af44f643d75a741c060e1f8a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mudr=C3=A1k?= Date: Fri, 24 Apr 2020 18:33:36 +0200 Subject: [PATCH] MDL-67748 admin: Show user identity fields on the manage tokens page On sites with many users, the fullname itself may not be unique identifier of users. Display the user identity fields below the token owner's name. --- webservice/classes/token_table.php | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/webservice/classes/token_table.php b/webservice/classes/token_table.php index b80e0dda587..2ffaebc8836 100644 --- a/webservice/classes/token_table.php +++ b/webservice/classes/token_table.php @@ -47,6 +47,9 @@ class token_table extends \table_sql { /** @var bool $hasviewfullnames Does the user have the viewfullnames capability. */ protected $hasviewfullnames; + /** @var array */ + protected $userextrafields; + /** @var object */ protected $filterdata; @@ -66,6 +69,9 @@ class token_table extends \table_sql { $this->showalltokens = has_capability('moodle/webservice:managealltokens', $context); $this->hasviewfullnames = has_capability('moodle/site:viewfullnames', $context); + // List of user identity fields. + $this->userextrafields = \core\user_fields::get_identity_fields(\context_system::instance(), false); + // Filter form values. $this->filterdata = $filterdata; @@ -142,9 +148,19 @@ class token_table extends \table_sql { public function col_fullname($data) { global $OUTPUT; + $identity = []; + + foreach ($this->userextrafields as $userextrafield) { + $identity[] = $data->$userextrafield; + } + $userprofilurl = new \moodle_url('/user/profile.php', ['id' => $data->userid]); $content = \html_writer::link($userprofilurl, fullname($data, $this->hasviewfullnames)); + if ($identity) { + $content .= \html_writer::div('' . implode(', ', $identity) . '', 'useridentity text-muted'); + } + // Make up list of capabilities that the user is missing for the given webservice. $webservicemanager = new \webservice(); $usermissingcaps = $webservicemanager->get_missing_capabilities_by_users([['id' => $data->userid]], $data->serviceid); @@ -156,7 +172,7 @@ class token_table extends \table_sql { }, $usermissingcaps[$data->userid]); $list = \html_writer::alist($links); $help = $OUTPUT->help_icon('missingcaps', 'webservice'); - $content .= print_collapsible_region(\html_writer::div($list . $help, 'missingcaps'), 'small', + $content .= print_collapsible_region(\html_writer::div($list . $help, 'missingcaps'), 'small mt-2', \html_writer::random_id('usermissingcaps'), get_string('usermissingcaps', 'webservice', $count), '', true, true); } @@ -235,6 +251,10 @@ class token_table extends \table_sql { $usernamefields = $userfieldsapi->get_sql('u', false, '', '', false)->selects; $creatorfields = $userfieldsapi->get_sql('c', false, 'creator', '', false)->selects; + if (!empty($this->userextrafields)) { + $usernamefields .= ',u.' . implode(',u.', $this->userextrafields); + } + $params = ['tokenmode' => EXTERNAL_TOKEN_PERMANENT]; $selectfields = "SELECT t.id, t.token, t.iprestriction, t.validuntil, t.creatorid,