1 EntityReferenceSelectionHandlerGeneric.inc | public EntityReferenceSelectionHandlerGeneric_user::entityFieldQueryAlter(SelectQueryInterface $query) |
Implements EntityReferenceHandler::entityFieldQueryAlter().
Overrides EntityReferenceSelectionHandlerGeneric::entityFieldQueryAlter
File
- core/
modules/ entityreference/ plugins/ selection/ EntityReferenceSelectionHandlerGeneric.inc, line 407 - Generic Entity handler.
Class
- EntityReferenceSelectionHandlerGeneric_user
- Override for the User entity type.
Code
public function entityFieldQueryAlter(SelectQueryInterface $query) {
if (user_access('administer users')) {
// In addition, if the user is administrator, need to make sure to
// match the anonymous user, which 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']);
// 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 workaround, 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);
}
}
}
}