class SelectionEntityTypeUser in Entity reference 8
Hierarchy
- class \Drupal\entityreference\Plugin\entityreference\selection\SelectionBase implements SelectionInterface
- class \Drupal\entityreference\Plugin\Type\Selection\SelectionEntityTypeUser
Expanded class hierarchy of SelectionEntityTypeUser
File
- lib/
Drupal/ entityreference/ Plugin/ Type/ Selection/ SelectionEntityTypeUser.php, line 19 - Definition of Drupal\entityreference\Plugin\entityreference\selection\SelectionEntityTypeNode.
Namespace
Drupal\entityreference\Plugin\Type\SelectionView source
class SelectionEntityTypeUser extends SelectionBase {
public function buildEntityFieldQuery($match = NULL, $match_operator = 'CONTAINS') {
$query = parent::buildEntityFieldQuery($match, $match_operator);
// The user entity doesn't have a label column.
if (isset($match)) {
$query
->propertyCondition('name', $match, $match_operator);
}
// Adding the 'user_access' tag is sadly insufficient for users: core
// requires us to also know about the concept of 'blocked' and
// 'active'.
if (!user_access('administer users')) {
$query
->propertyCondition('status', 1);
}
return $query;
}
public function entityFieldQueryAlter(AlterableInterface $query) {
if (user_access('administer users')) {
// In addition, if the user is administrator, we need to make sure to
// match the anonymous user, that doesn't actually have a name in the
// database.
$conditions =& $query
->conditions();
foreach ($conditions as $key => $condition) {
if ($key !== '#conjunction' && is_string($condition['field']) && $condition['field'] === 'users.name') {
// Remove the condition.
unset($conditions[$key]);
// Re-add the condition and a condition on uid = 0 so that we end up
// with a query in the form:
// WHERE (name LIKE :name) OR (:anonymous_name LIKE :name AND uid = 0)
$or = db_or();
$or
->condition($condition['field'], $condition['value'], $condition['operator']);
// Sadly, the Database layer doesn't allow us to build a condition
// in the form ':placeholder = :placeholder2', because the 'field'
// part of a condition is always escaped.
// As a (cheap) workaround, we separately build a condition with no
// field, and concatenate the field and the condition separately.
$value_part = db_and();
$value_part
->condition('anonymous_name', $condition['value'], $condition['operator']);
$value_part
->compile(Database::getConnection(), $query);
$or
->condition(db_and()
->where(str_replace('anonymous_name', ':anonymous_name', (string) $value_part), $value_part
->arguments() + array(
':anonymous_name' => user_format_name(user_load(0)),
))
->condition('users.uid', 0));
$query
->condition($or);
}
}
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
SelectionBase:: |
public | function |
Implements EntityReferenceHandler::countReferencableEntities(). Overrides SelectionInterface:: |
|
SelectionBase:: |
public | function |
Implements EntityReferenceHandler::getReferencableEntities(). Overrides SelectionInterface:: |
|
SelectionBase:: |
protected | function | Helper method: pass a query to the alteration system again. | |
SelectionBase:: |
public static | function |
Implements EntityReferenceHandler::settingsForm(). Overrides SelectionInterface:: |
|
SelectionBase:: |
public | function |
Implements EntityReferenceHandler::validateAutocompleteInput(). Overrides SelectionInterface:: |
|
SelectionBase:: |
public | function |
Implements EntityReferenceHandler::validateReferencableEntities(). Overrides SelectionInterface:: |
|
SelectionBase:: |
public | function | ||
SelectionEntityTypeUser:: |
public | function |
Build an EntityFieldQuery to get referencable entities. Overrides SelectionBase:: |
|
SelectionEntityTypeUser:: |
public | function |
Implements EntityReferenceHandler::entityFieldQueryAlter(). Overrides SelectionBase:: |