Issue #2407107 by jan.stoeckler: Drupal\user\Plugin\views\filter\Roles should implement calculateDependencies()
parent
c1005af384
commit
0a38107ea0
|
@ -7,7 +7,9 @@
|
||||||
|
|
||||||
namespace Drupal\user\Plugin\views\filter;
|
namespace Drupal\user\Plugin\views\filter;
|
||||||
|
|
||||||
|
use Drupal\user\RoleStorageInterface;
|
||||||
use Drupal\views\Plugin\views\filter\ManyToOne;
|
use Drupal\views\Plugin\views\filter\ManyToOne;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filter handler for user roles.
|
* Filter handler for user roles.
|
||||||
|
@ -18,6 +20,42 @@ use Drupal\views\Plugin\views\filter\ManyToOne;
|
||||||
*/
|
*/
|
||||||
class Roles extends ManyToOne {
|
class Roles extends ManyToOne {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The role storage.
|
||||||
|
*
|
||||||
|
* @var \Drupal\user\RoleStorageInterface
|
||||||
|
*/
|
||||||
|
protected $roleStorage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a Roles object.
|
||||||
|
*
|
||||||
|
* @param array $configuration
|
||||||
|
* A configuration array containing information about the plugin instance.
|
||||||
|
* @param string $plugin_id
|
||||||
|
* The plugin_id for the plugin instance.
|
||||||
|
* @param mixed $plugin_definition
|
||||||
|
* The plugin implementation definition.
|
||||||
|
* @param \Drupal\user\RoleStorageInterface $role_storage
|
||||||
|
* The role storage.
|
||||||
|
*/
|
||||||
|
public function __construct(array $configuration, $plugin_id, $plugin_definition, RoleStorageInterface $role_storage) {
|
||||||
|
parent::__construct($configuration, $plugin_id, $plugin_definition);
|
||||||
|
$this->roleStorage = $role_storage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
|
||||||
|
return new static(
|
||||||
|
$configuration,
|
||||||
|
$plugin_id,
|
||||||
|
$plugin_definition,
|
||||||
|
$container->get('entity.manager')->getStorage('user_role')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public function getValueOptions() {
|
public function getValueOptions() {
|
||||||
$this->valueOptions = user_role_names(TRUE);
|
$this->valueOptions = user_role_names(TRUE);
|
||||||
unset($this->valueOptions[DRUPAL_AUTHENTICATED_RID]);
|
unset($this->valueOptions[DRUPAL_AUTHENTICATED_RID]);
|
||||||
|
@ -33,4 +71,16 @@ class Roles extends ManyToOne {
|
||||||
return $operators;
|
return $operators;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function calculateDependencies() {
|
||||||
|
$dependencies = array();
|
||||||
|
foreach ($this->value as $role_id) {
|
||||||
|
$role = $this->roleStorage->load($role_id);
|
||||||
|
$dependencies[$role->getConfigDependencyKey()][] = $role->getConfigDependencyName();
|
||||||
|
}
|
||||||
|
return $dependencies;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Contains \Drupal\user\Tests\Views\HandlerFilterRolesTest.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Drupal\user\Tests\Views;
|
||||||
|
|
||||||
|
use Drupal\Component\Utility\String;
|
||||||
|
use Drupal\user\Entity\Role;
|
||||||
|
use Drupal\user\Tests\Views\UserUnitTestBase;
|
||||||
|
use Drupal\views\Entity\View;
|
||||||
|
use Drupal\views\Views;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the roles filter handler.
|
||||||
|
*
|
||||||
|
* @group user
|
||||||
|
*
|
||||||
|
* @see \Drupal\user\Plugin\views\filter\Roles
|
||||||
|
*/
|
||||||
|
class HandlerFilterRolesTest extends UserUnitTestBase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Views used by this test.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public static $testViews = array('test_user_name');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests that role filter dependencies are calculated correctly.
|
||||||
|
*/
|
||||||
|
public function testDependencies() {
|
||||||
|
$role = Role::create(['id' => 'test_user_role']);
|
||||||
|
$role->save();
|
||||||
|
$view = View::load('test_user_name');
|
||||||
|
$expected = [
|
||||||
|
'module' => ['user'],
|
||||||
|
];
|
||||||
|
$this->assertEqual($expected, $view->getDependencies());
|
||||||
|
|
||||||
|
$display = &$view->getDisplay('default');
|
||||||
|
$display['display_options']['filters']['roles_target_id'] = [
|
||||||
|
'id' => 'roles_target_id',
|
||||||
|
'table' => 'user__roles',
|
||||||
|
'field' => 'roles_target_id',
|
||||||
|
'value' => [
|
||||||
|
'test_user_role' => 'test_user_role',
|
||||||
|
],
|
||||||
|
'plugin_id' => 'user_roles',
|
||||||
|
];
|
||||||
|
$view->save();
|
||||||
|
$expected['config'][] = 'user.role.test_user_role';
|
||||||
|
$this->assertEqual($expected, $view->getDependencies());
|
||||||
|
|
||||||
|
$view = View::load('test_user_name');
|
||||||
|
$display = &$view->getDisplay('default');
|
||||||
|
$display['display_options']['filters']['roles_target_id'] = [
|
||||||
|
'id' => 'roles_target_id',
|
||||||
|
'table' => 'user__roles',
|
||||||
|
'field' => 'roles_target_id',
|
||||||
|
'value' => [],
|
||||||
|
'plugin_id' => 'user_roles',
|
||||||
|
];
|
||||||
|
$view->save();
|
||||||
|
unset($expected['config']);
|
||||||
|
$this->assertEqual($expected, $view->getDependencies());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue