class OgSelection in Organic groups 8
Provide default OG selection handler.
Note that the id is correctly defined as "og:default" and not the other way around, as seen in most other default selection handler (e.g. "default:node") as OG's selection handler is a wrapper around those entity specific default ones. That is, the same selection handler will be returned no matter what is the target type of the reference field. Internally, it will call the original selection handler, and use it for building the queries.
Plugin annotation
@EntityReferenceSelection(
id = "og:default",
label = @Translation("OG selection"),
group = "og",
weight = 1,
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginBase implements ConfigurableInterface, ConfigurablePluginInterface, DependentPluginInterface, SelectionInterface
- class \Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection implements SelectionWithAutocreateInterface, ContainerFactoryPluginInterface uses DeprecatedServicePropertyTrait
- class \Drupal\og\Plugin\EntityReferenceSelection\OgSelection
- class \Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection implements SelectionWithAutocreateInterface, ContainerFactoryPluginInterface uses DeprecatedServicePropertyTrait
- class \Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginBase implements ConfigurableInterface, ConfigurablePluginInterface, DependentPluginInterface, SelectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of OgSelection
File
- src/
Plugin/ EntityReferenceSelection/ OgSelection.php, line 27
Namespace
Drupal\og\Plugin\EntityReferenceSelectionView source
class OgSelection extends DefaultSelection {
/**
* Get the selection handler of the field.
*
* @return \Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection
* Returns the selection handler.
*/
public function getSelectionHandler() {
$options = $this
->getConfiguration();
// The 'handler' key intentionally absent as we want the selection manager
// to choose the best option.
// @see \Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginManager::getInstance()
unset($options['handler']);
// Remove also the backwards compatibility layer because that will be passed
// to the chosen selection handler setter and, as an effect, will trigger a
// deprecation notice.
// @see \Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginBase::resolveBackwardCompatibilityConfiguration()
unset($options['handler_settings']);
return \Drupal::service('plugin.manager.entity_reference_selection')
->getInstance($options);
}
/**
* Overrides ::buildEntityQuery.
*
* Return only group in the matching results.
*
* @param string|null $match
* (Optional) Text to match the label against. Defaults to NULL.
* @param string $match_operator
* (Optional) The operation the matching should be done with. Defaults
* to "CONTAINS".
*
* @return \Drupal\Core\Entity\Query\QueryInterface
* The EntityQuery object with the basic conditions and sorting applied to
* it.
*/
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;
}
/**
* Return all the user's groups.
*
* @return \Drupal\Core\Entity\ContentEntityInterface[]
* Array with the user's group, or an empty array if none found.
*/
protected function getUserGroups() {
/** @var \Drupal\og\MembershipManagerInterface $membership_manager */
$membership_manager = \Drupal::service('og.membership_manager');
$other_groups = $membership_manager
->getUserGroups($this->currentUser
->id());
return isset($other_groups[$this->configuration['target_type']]) ? $other_groups[$this->configuration['target_type']] : [];
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DefaultSelection:: |
protected | property | The current user. | |
DefaultSelection:: |
protected | property | ||
DefaultSelection:: |
protected | property | The entity field manager service. | |
DefaultSelection:: |
protected | property | The entity repository. | |
DefaultSelection:: |
public | property | Entity type bundle info service. | |
DefaultSelection:: |
protected | property | The entity type manager service. | |
DefaultSelection:: |
protected | property | The module handler service. | |
DefaultSelection:: |
public | function |
Form constructor. Overrides SelectionPluginBase:: |
3 |
DefaultSelection:: |
public | function |
Counts entities that are referenceable. Overrides SelectionInterface:: |
2 |
DefaultSelection:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
2 |
DefaultSelection:: |
public | function |
Creates a new entity object that can be used as a valid reference. Overrides SelectionWithAutocreateInterface:: |
6 |
DefaultSelection:: |
public | function |
Gets default configuration for this plugin. Overrides SelectionPluginBase:: |
3 |
DefaultSelection:: |
public static | function | Form element validation handler; Filters the #value property of an element. | |
DefaultSelection:: |
public | function |
Gets the list of referenceable entities. Overrides SelectionInterface:: |
3 |
DefaultSelection:: |
protected | function | Helper method: Passes a query to the alteration system again. | |
DefaultSelection:: |
public | function |
Form validation handler. Overrides SelectionPluginBase:: |
|
DefaultSelection:: |
public | function |
Validates which existing entities can be referenced. Overrides SelectionInterface:: |
|
DefaultSelection:: |
public | function |
Validates which newly created entities can be referenced. Overrides SelectionWithAutocreateInterface:: |
6 |
DefaultSelection:: |
public | function |
Constructs a new DefaultSelection object. Overrides SelectionPluginBase:: |
1 |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
DeprecatedServicePropertyTrait:: |
public | function | Allows to access deprecated/removed properties. | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
OgSelection:: |
protected | function |
Overrides ::buildEntityQuery. Overrides DefaultSelection:: |
|
OgSelection:: |
public | function | Get the selection handler of the field. | |
OgSelection:: |
protected | function | Return all the user's groups. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
SelectionPluginBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
|
SelectionPluginBase:: |
protected | function | Ensures a backward compatibility level configuration. | |
SelectionPluginBase:: |
public | function |
Allows the selection to alter the SelectQuery generated by EntityFieldQuery. Overrides SelectionInterface:: |
2 |
SelectionPluginBase:: |
public | function |
Gets this plugin's configuration. Overrides ConfigurableInterface:: |
|
SelectionPluginBase:: |
protected | function | Moves the backward compatibility level configurations in the right place. | |
SelectionPluginBase:: |
public | function |
Sets the configuration for this plugin instance. Overrides ConfigurableInterface:: |
|
SelectionPluginBase:: |
public | function |
Form submission handler. Overrides PluginFormInterface:: |
|
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |