Merge branch 'MDL-79998' of https://github.com/paulholden/moodle
This commit is contained in:
@@ -21,6 +21,7 @@ namespace core_reportbuilder\local\entities;
|
||||
use context_helper;
|
||||
use context_system;
|
||||
use context_user;
|
||||
use core\context;
|
||||
use core_component;
|
||||
use html_writer;
|
||||
use lang_string;
|
||||
@@ -123,6 +124,19 @@ class user extends base {
|
||||
return $this->get_column($identityfield);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns columns that correspond to the site configured identity fields
|
||||
*
|
||||
* @param context $context
|
||||
* @param string[] $excluding
|
||||
* @return column[]
|
||||
*/
|
||||
public function get_identity_columns(context $context, array $excluding = []): array {
|
||||
$identityfields = fields::for_identity($context)->excluding(...$excluding)->get_required_fields();
|
||||
|
||||
return array_map([$this, 'get_identity_column'], $identityfields);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns filter that corresponds to the given identity field, profile field identifiers will be converted to those
|
||||
* used by the {@see user_profile_fields} helper
|
||||
@@ -138,6 +152,19 @@ class user extends base {
|
||||
return $this->get_filter($identityfield);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns filters that correspond to the site configured identity fields
|
||||
*
|
||||
* @param context $context
|
||||
* @param string[] $excluding
|
||||
* @return filter[]
|
||||
*/
|
||||
public function get_identity_filters(context $context, array $excluding = []): array {
|
||||
$identityfields = fields::for_identity($context)->excluding(...$excluding)->get_required_fields();
|
||||
|
||||
return array_map([$this, 'get_identity_filter'], $identityfields);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return joins necessary for retrieving tags
|
||||
*
|
||||
|
||||
@@ -24,7 +24,6 @@ use core_reportbuilder\permission;
|
||||
use core_reportbuilder\system_report;
|
||||
use core_reportbuilder\local\entities\user;
|
||||
use core_reportbuilder\local\helpers\audience as audience_helper;
|
||||
use core_user\fields;
|
||||
|
||||
/**
|
||||
* Report access list
|
||||
@@ -58,8 +57,8 @@ class report_access_list extends system_report {
|
||||
|
||||
$this->add_base_condition_sql("($allwheres)", $params);
|
||||
|
||||
$this->add_columns();
|
||||
$this->add_filters();
|
||||
$this->add_columns($userentity);
|
||||
$this->add_filters($userentity);
|
||||
|
||||
$this->set_downloadable(false);
|
||||
}
|
||||
@@ -78,15 +77,16 @@ class report_access_list extends system_report {
|
||||
|
||||
/**
|
||||
* Add columns to report
|
||||
*
|
||||
* @param user $userentity
|
||||
*/
|
||||
protected function add_columns(): void {
|
||||
$userentity = $this->get_entity('user');
|
||||
protected function add_columns(user $userentity): void {
|
||||
$this->add_column($userentity->get_column('fullnamewithpicturelink'));
|
||||
|
||||
// Include all identity field columns.
|
||||
$identityfields = fields::for_identity($this->get_context(), true)->get_required_fields();
|
||||
foreach ($identityfields as $identityfield) {
|
||||
$this->add_column($userentity->get_identity_column($identityfield));
|
||||
$identitycolumns = $userentity->get_identity_columns($this->get_context());
|
||||
foreach ($identitycolumns as $identitycolumn) {
|
||||
$this->add_column($identitycolumn);
|
||||
}
|
||||
|
||||
$this->set_initial_sort_column('user:fullnamewithpicturelink', SORT_ASC);
|
||||
@@ -94,15 +94,16 @@ class report_access_list extends system_report {
|
||||
|
||||
/**
|
||||
* Add filters to report
|
||||
*
|
||||
* @param user $userentity
|
||||
*/
|
||||
protected function add_filters(): void {
|
||||
$userentity = $this->get_entity('user');
|
||||
protected function add_filters(user $userentity): void {
|
||||
$this->add_filter($userentity->get_filter('fullname'));
|
||||
|
||||
// Include all identity field filters.
|
||||
$identityfields = fields::for_identity($this->get_context(), true)->get_required_fields();
|
||||
foreach ($identityfields as $identityfield) {
|
||||
$this->add_filter($userentity->get_identity_filter($identityfield));
|
||||
$identityfilters = $userentity->get_identity_filters($this->get_context());
|
||||
foreach ($identityfilters as $identityfilter) {
|
||||
$this->add_filter($identityfilter);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ declare(strict_types=1);
|
||||
namespace core_reportbuilder\local\entities;
|
||||
|
||||
use advanced_testcase;
|
||||
use core\context\system;
|
||||
|
||||
/**
|
||||
* Unit tests for user entity
|
||||
@@ -48,6 +49,35 @@ class user_test extends advanced_testcase {
|
||||
$this->assertEquals('user:profilefield_hi', $columnprofilefield->get_unique_identifier());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test getting all user identity columns
|
||||
*/
|
||||
public function test_get_identity_columns() : void {
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
$this->getDataGenerator()->create_custom_profile_field(['datatype' => 'text', 'name' => 'Hi', 'shortname' => 'hi']);
|
||||
set_config('showuseridentity', 'username,profilefield_hi');
|
||||
$context = system::instance();
|
||||
|
||||
$user = new user();
|
||||
$user->initialise();
|
||||
|
||||
// All columns.
|
||||
$this->assertEqualsCanonicalizing([
|
||||
'user:username',
|
||||
'user:profilefield_hi',
|
||||
], array_map(
|
||||
fn($column) => $column->get_unique_identifier(),
|
||||
$user->get_identity_columns($context),
|
||||
));
|
||||
|
||||
// Exclude username.
|
||||
$columns = $user->get_identity_columns($context, ['username']);
|
||||
$this->assertCount(1, $columns);
|
||||
$this->assertEquals('user:profilefield_hi', reset($columns)->get_unique_identifier());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test getting user identity filter
|
||||
*/
|
||||
@@ -66,6 +96,35 @@ class user_test extends advanced_testcase {
|
||||
$this->assertEquals('user:profilefield_hi', $filterprofilefield->get_unique_identifier());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test getting all user identity filters
|
||||
*/
|
||||
public function test_get_identity_filters() : void {
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
$this->getDataGenerator()->create_custom_profile_field(['datatype' => 'text', 'name' => 'Hi', 'shortname' => 'hi']);
|
||||
set_config('showuseridentity', 'username,profilefield_hi');
|
||||
$context = system::instance();
|
||||
|
||||
$user = new user();
|
||||
$user->initialise();
|
||||
|
||||
// All filters.
|
||||
$this->assertEqualsCanonicalizing([
|
||||
'user:username',
|
||||
'user:profilefield_hi',
|
||||
], array_map(
|
||||
fn($filter) => $filter->get_unique_identifier(),
|
||||
$user->get_identity_columns($context),
|
||||
));
|
||||
|
||||
// Exclude username.
|
||||
$filters = $user->get_identity_filters($context, ['username']);
|
||||
$this->assertCount(1, $filters);
|
||||
$this->assertEquals('user:profilefield_hi', reset($filters)->get_unique_identifier());
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for {@see test_get_name_fields_select}
|
||||
*
|
||||
|
||||
@@ -3,6 +3,7 @@ Information provided here is intended especially for developers.
|
||||
|
||||
=== 4.4 ===
|
||||
|
||||
* New methods `get_identity_[columns|filters]` in user entity, for retrieving all user identity field report elements
|
||||
* The database helper `generate_alias[es]` and `generate_param_name[s]` methods now accept an optional `$suffix` argument for
|
||||
appending additional string to the generated value
|
||||
|
||||
|
||||
Reference in New Issue
Block a user