From 0653d6b67e5d1337ac9f0afc9263631a8e6dab0c Mon Sep 17 00:00:00 2001
From: Nathaniel Catchpole <catch@35733.no-reply.drupal.org>
Date: Tue, 2 May 2017 12:18:55 +0100
Subject: [PATCH] Issue #2868841 by erozqba, Sam152, kristiaanvandeneynde,
 mikeker: \Drupal\user\Plugin\views\filter\Roles::calculateDependencies breaks
 when using the empty/not empty operators

---
 .../user/src/Plugin/views/filter/Roles.php    |  3 ++
 .../Kernel/Views/HandlerFilterRolesTest.php   | 32 +++++++++++++++++--
 2 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/core/modules/user/src/Plugin/views/filter/Roles.php b/core/modules/user/src/Plugin/views/filter/Roles.php
index d84e3240949b..47adafb8b698 100644
--- a/core/modules/user/src/Plugin/views/filter/Roles.php
+++ b/core/modules/user/src/Plugin/views/filter/Roles.php
@@ -74,6 +74,9 @@ public function operators() {
    */
   public function calculateDependencies() {
     $dependencies = [];
+    if (in_array($this->operator, ['empty', 'not empty'])) {
+      return $dependencies;
+    }
     foreach ($this->value as $role_id) {
       $role = $this->roleStorage->load($role_id);
       $dependencies[$role->getConfigDependencyKey()][] = $role->getConfigDependencyName();
diff --git a/core/modules/user/tests/src/Kernel/Views/HandlerFilterRolesTest.php b/core/modules/user/tests/src/Kernel/Views/HandlerFilterRolesTest.php
index 306e813323f6..ec5a06bf1cb0 100644
--- a/core/modules/user/tests/src/Kernel/Views/HandlerFilterRolesTest.php
+++ b/core/modules/user/tests/src/Kernel/Views/HandlerFilterRolesTest.php
@@ -34,6 +34,19 @@ public function testDependencies() {
     ];
     $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',
@@ -42,10 +55,26 @@ public function testDependencies() {
       'value' => [
         'test_user_role' => 'test_user_role',
       ],
+      'operator' => 'empty',
+      'plugin_id' => 'user_roles',
+    ];
+    $view->save();
+    unset($expected['config']);
+    $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' => [
+        'test_user_role' => 'test_user_role',
+      ],
+      'operator' => 'not empty',
       'plugin_id' => 'user_roles',
     ];
     $view->save();
-    $expected['config'][] = 'user.role.test_user_role';
     $this->assertEqual($expected, $view->getDependencies());
 
     $view = Views::getView('test_user_name');
@@ -63,7 +92,6 @@ public function testDependencies() {
       'plugin_id' => 'user_roles',
     ];
     $view->save();
-    unset($expected['config']);
     $this->assertEqual($expected, $view->getDependencies());
   }
 
-- 
GitLab