protected function OgSelection::buildEntityQuery in Organic groups 8
Overrides ::buildEntityQuery.
Return only group in the matching results.
Parameters
string|null $match: (Optional) Text to match the label against. Defaults to NULL.
string $match_operator: (Optional) The operation the matching should be done with. Defaults to "CONTAINS".
Return value
\Drupal\Core\Entity\Query\QueryInterface The EntityQuery object with the basic conditions and sorting applied to it.
Overrides DefaultSelection::buildEntityQuery
File
- src/
Plugin/ EntityReferenceSelection/ OgSelection.php, line 64
Class
- OgSelection
- Provide default OG selection handler.
Namespace
Drupal\og\Plugin\EntityReferenceSelectionCode
protected function buildEntityQuery($match = NULL, $match_operator = 'CONTAINS') {
// Getting the original entity selection handler. OG selection handler using
// the default selection handler of the entity, which the field reference
// to, and add another logic to the query object i.e. check if the entities
// bundle defined as group.
$query = $this
->getSelectionHandler()
->buildEntityQuery($match, $match_operator);
$target_type = $this->configuration['target_type'];
$definition = \Drupal::entityTypeManager()
->getDefinition($target_type);
if ($bundle_key = $definition
->getKey('bundle')) {
$bundles = Og::groupTypeManager()
->getGroupBundleIdsByEntityType($target_type);
if (!$bundles) {
// If there are no bundles defined, we can return early.
return $query;
}
$query
->condition($bundle_key, $bundles, 'IN');
}
$user_groups = $this
->getUserGroups();
if (!$user_groups) {
return $query;
}
$identifier_key = $definition
->getKey('id');
$ids = [];
if (!empty($this
->getConfiguration()['field_mode']) && $this
->getConfiguration()['field_mode'] === 'admin') {
// Don't include the groups, the user doesn't have create permission.
foreach ($user_groups as $group) {
$ids[] = $group
->id();
}
if ($ids) {
$query
->condition($identifier_key, $ids, 'NOT IN');
}
}
else {
// Determine which groups should be selectable.
foreach ($user_groups as $group) {
$ids[] = $group
->id();
}
if ($ids) {
$query
->condition($identifier_key, $ids, 'IN');
}
else {
// User doesn't have permission to select any group so falsify this
// query.
$query
->condition($identifier_key, -1, '=');
}
}
return $query;
}