Issue #2917006 by tedbow, amateescu, Wim Leers, sam-elayyoub, Pascal-, jnimchuk, catch, alexpott, kruser, neclimdul, chris5156, Rick Hood: Views referencing missing roles fail views_post_update_revision_metadata_fields()
(cherry picked from commit a90dae47a0
)
merge-requests/64/head
parent
212f7254aa
commit
962d2db57e
|
@ -88,8 +88,12 @@ class Roles extends ManyToOne {
|
|||
}
|
||||
|
||||
foreach ((array) $this->value as $role_id) {
|
||||
$role = $this->roleStorage->load($role_id);
|
||||
$dependencies[$role->getConfigDependencyKey()][] = $role->getConfigDependencyName();
|
||||
if ($role = $this->roleStorage->load($role_id)) {
|
||||
$dependencies[$role->getConfigDependencyKey()][] = $role->getConfigDependencyName();
|
||||
}
|
||||
else {
|
||||
trigger_error("The {$role_id} role does not exist. You should review and fix the configuration of the {$this->view->id()} view.", E_USER_WARNING);
|
||||
}
|
||||
}
|
||||
return $dependencies;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ namespace Drupal\Tests\user\Kernel\Views;
|
|||
use Drupal\user\Entity\Role;
|
||||
use Drupal\views\Entity\View;
|
||||
use Drupal\views\Views;
|
||||
use PHPUnit\Framework\Error\Warning;
|
||||
|
||||
/**
|
||||
* Tests the roles filter handler.
|
||||
|
@ -95,4 +96,28 @@ class HandlerFilterRolesTest extends UserKernelTestBase {
|
|||
$this->assertEqual($expected, $view->getDependencies());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that a warning is triggered if the filter references a missing role.
|
||||
*/
|
||||
public function testMissingRole() {
|
||||
$role = Role::create(['id' => 'test_user_role']);
|
||||
$role->save();
|
||||
/** @var \Drupal\views\Entity\View $view */
|
||||
$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' => ['test_user_role' => 'test_user_role'],
|
||||
'plugin_id' => 'user_roles',
|
||||
];
|
||||
// Ensure no warning is triggered before the role is deleted.
|
||||
$view->calculateDependencies();
|
||||
$role->delete();
|
||||
$this->expectException(Warning::class);
|
||||
$this->expectExceptionMessage('The test_user_role role does not exist. You should review and fix the configuration of the test_user_name view.');
|
||||
$view->calculateDependencies();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue