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
Alex Pott 2019-11-07 10:20:44 +00:00
parent 212f7254aa
commit 962d2db57e
No known key found for this signature in database
GPG Key ID: 31905460D4A69276
2 changed files with 31 additions and 2 deletions

View File

@ -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;
}

View File

@ -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();
}
}