diff --git a/core/modules/user/lib/Drupal/user/Plugin/entity_reference/selection/UserSelection.php b/core/modules/user/lib/Drupal/user/Plugin/entity_reference/selection/UserSelection.php index 71f0c3f3c98e9a0130a03603394885d92458d413..2c3fd93ddaa1220cafec91aa595b58fb9379d91f 100644 --- a/core/modules/user/lib/Drupal/user/Plugin/entity_reference/selection/UserSelection.php +++ b/core/modules/user/lib/Drupal/user/Plugin/entity_reference/selection/UserSelection.php @@ -133,8 +133,8 @@ public function entityQueryAlter(SelectInterface $query) { } // Add the filter by role option. - if (!empty($this->instance['settings']['handler_settings']['filter'])) { - $filter_settings = $this->instance['settings']['handler_settings']['filter']; + if (!empty($this->fieldDefinition->getSetting('handler_settings')['filter'])) { + $filter_settings = $this->fieldDefinition->getSetting('handler_settings')['filter']; if ($filter_settings['type'] == 'role') { $tables = $query->getTables(); $base_table = $tables['base_table']['alias']; diff --git a/core/modules/user/lib/Drupal/user/Tests/UserEntityReferenceTest.php b/core/modules/user/lib/Drupal/user/Tests/UserEntityReferenceTest.php new file mode 100644 index 0000000000000000000000000000000000000000..c5e8ae92beb4839f4976d9e2e7e88052b476564e --- /dev/null +++ b/core/modules/user/lib/Drupal/user/Tests/UserEntityReferenceTest.php @@ -0,0 +1,106 @@ + 'User entity reference', + 'description' => 'Tests the user reference field functionality.', + 'group' => 'User', + ); + } + + /** + * {@inheritdoc} + */ + function setUp() { + parent::setUp(); + + $this->role1 = entity_create('user_role', array( + 'id' => strtolower($this->randomName(8)), + 'label' => $this->randomName(8), + )); + $this->role1->save(); + + $this->role2 = entity_create('user_role', array( + 'id' => strtolower($this->randomName(8)), + 'label' => $this->randomName(8), + )); + $this->role2->save(); + + entity_reference_create_instance('user', 'user', 'user_reference', 'User reference', 'user'); + } + + /** + * Tests user selection by roles. + */ + function testUserSelectionByRole() { + $fields = Field::fieldInfo()->getBundleInstances('user', 'user'); + $fields['user_reference']->settings['handler_settings']['filter']['role'] = array( + $this->role1->id() => $this->role1->id(), + $this->role2->id() => 0, + ); + $fields['user_reference']->settings['handler_settings']['filter']['type'] = 'role'; + $fields['user_reference']->save(); + + $user1 = $this->createUser(array('name' => 'aabb')); + $user1->addRole($this->role1->id()); + $user1->save(); + + $user2 = $this->createUser(array('name' => 'aabbb')); + $user2->addRole($this->role1->id()); + $user2->save(); + + $user3 = $this->createUser(array('name' => 'aabbbb')); + $user3->addRole($this->role2->id()); + $user3->save(); + + /** @var \Drupal\entity_reference\EntityReferenceAutocomplete $autocomplete */ + $autocomplete = \Drupal::service('entity_reference.autocomplete'); + + $matches = $autocomplete->getMatches($fields['user_reference'], 'user', 'user', 'NULL', '', 'aabb'); + $this->assertEqual(count($matches), 2); + $users = array(); + foreach ($matches as $match) { + $users[] = $match['label']; + } + $this->assertTrue(in_array($user1->label(), $users)); + $this->assertTrue(in_array($user2->label(), $users)); + $this->assertFalse(in_array($user3->label(), $users)); + + $matches = $autocomplete->getMatches($fields['user_reference'], 'user', 'user', 'NULL', '', 'aabbbb'); + $this->assertEqual(count($matches), 0, ''); + } +}