You are here

abstract class GroupRelationBase in Group 2.0.x

Provides a base class for GroupContentEnabler plugins.

Hierarchy

Expanded class hierarchy of GroupRelationBase

See also

\Drupal\group\Annotation\GroupRelation

\Drupal\group\Plugin\Group\Relation\GroupRelationManager

\Drupal\group\Plugin\Group\Relation\GroupRelationInterface

Plugin API

5 files declare their use of GroupRelationBase
EntityTestAsContent.php in tests/modules/group_test_plugin/src/Plugin/Group/Relation/EntityTestAsContent.php
GroupAsContent.php in tests/modules/group_test_plugin/src/Plugin/Group/Relation/GroupAsContent.php
GroupNode.php in modules/gnode/src/Plugin/Group/Relation/GroupNode.php
NodeAsContent.php in tests/modules/group_test_plugin/src/Plugin/Group/Relation/NodeAsContent.php
UserAsContent.php in tests/modules/group_test_plugin/src/Plugin/Group/Relation/UserAsContent.php

File

src/Plugin/Group/Relation/GroupRelationBase.php, line 22

Namespace

Drupal\group\Plugin\Group\Relation
View source
abstract class GroupRelationBase extends PluginBase implements GroupRelationInterface {

  /**
   * The ID of group type this plugin was instantiated for.
   *
   * @var string
   */
  protected $groupTypeId;

  /**
   * Backwards compatible permission array.
   *
   * @var array
   */
  private $_permissions;

  /**
   * {@inheritdoc}
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);

    // Only support setting the group type ID during construction.
    if (!empty($configuration['group_type_id'])) {
      $this->groupTypeId = $configuration['group_type_id'];
    }

    // Include the default configuration by calling ::setConfiguration().
    $this
      ->setConfiguration($configuration);
  }

  /**
   * {@inheritdoc}
   */
  public function getProvider() {
    return $this->pluginDefinition['provider'];
  }

  /**
   * {@inheritdoc}
   */
  public function getLabel() {
    return $this->pluginDefinition['label'];
  }

  /**
   * {@inheritdoc}
   */
  public function getDescription() {
    return $this->pluginDefinition['description'];
  }

  /**
   * {@inheritdoc}
   */
  public function getEntityTypeId() {
    return $this->pluginDefinition['entity_type_id'];
  }

  /**
   * Returns the entity type definition the plugin supports.
   *
   * @return \Drupal\Core\Entity\EntityTypeInterface
   *   The entity type definition.
   */
  protected function getEntityType() {
    return \Drupal::entityTypeManager()
      ->getDefinition($this
      ->getEntityTypeId());
  }

  /**
   * {@inheritdoc}
   */
  public function getEntityBundle() {
    return $this->pluginDefinition['entity_bundle'];
  }

  /**
   * {@inheritdoc}
   */
  public function getPrettyPathKey() {
    return $this->pluginDefinition['pretty_path_key'];
  }

  /**
   * {@inheritdoc}
   */
  public function getGroupCardinality() {
    return $this->configuration['group_cardinality'];
  }

  /**
   * {@inheritdoc}
   */
  public function getEntityCardinality() {
    return $this->configuration['entity_cardinality'];
  }

  /**
   * {@inheritdoc}
   */
  public function getGroupType() {
    if ($id = $this
      ->getGroupTypeId()) {
      return GroupType::load($id);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getGroupTypeId() {
    return $this->groupTypeId;
  }

  /**
   * {@inheritdoc}
   */
  public function definesEntityAccess() {
    return $this->pluginDefinition['entity_access'];
  }

  /**
   * {@inheritdoc}
   */
  public function isEnforced() {
    return $this->pluginDefinition['enforced'];
  }

  /**
   * {@inheritdoc}
   */
  public function isCodeOnly() {
    return $this->pluginDefinition['code_only'];
  }

  /**
   * {@inheritdoc}
   */
  public function getContentLabel(GroupContentInterface $group_content) {
    return $group_content
      ->getEntity()
      ->label();
  }

  /**
   * {@inheritdoc}
   */
  public function getContentTypeConfigId() {
    $preferred_id = $this
      ->getGroupTypeId() . '-' . str_replace(':', '-', $this
      ->getPluginId());

    // Return a hashed ID if the readable ID would exceed the maximum length.
    if (strlen($preferred_id) > EntityTypeInterface::BUNDLE_MAX_LENGTH) {
      $hashed_id = 'group_content_type_' . md5($preferred_id);
      $preferred_id = substr($hashed_id, 0, EntityTypeInterface::BUNDLE_MAX_LENGTH);
    }
    return $preferred_id;
  }

  /**
   * {@inheritdoc}
   */
  public function getContentTypeLabel() {
    return $this
      ->getGroupType()
      ->label() . ': ' . $this
      ->getLabel();
  }

  /**
   * {@inheritdoc}
   */
  public function getContentTypeDescription() {
    return $this
      ->getDescription();
  }

  /**
   * {@inheritdoc}
   */
  public function getGroupOperations(GroupInterface $group) {
    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function getGroupOperationsCacheableMetadata() {
    return new CacheableMetadata();
  }

  /**
   * {@inheritdoc}
   */
  public function getOperations() {
    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function getEntityReferenceLabel() {
    return isset($this->pluginDefinition['reference_label']) ? $this->pluginDefinition['reference_label'] : NULL;
  }

  /**
   * {@inheritdoc}
   */
  public function getEntityReferenceDescription() {
    return isset($this->pluginDefinition['reference_description']) ? $this->pluginDefinition['reference_description'] : NULL;
  }

  /**
   * {@inheritdoc}
   */
  public function getEntityReferenceSettings() {
    $settings['target_type'] = $this
      ->getEntityTypeId();
    if ($bundle = $this
      ->getEntityBundle()) {
      $settings['handler_settings']['target_bundles'] = [
        $bundle,
      ];
    }
    return $settings;
  }

  /**
   * {@inheritdoc}
   */
  public function getConfiguration() {
    return $this->configuration;
  }

  /**
   * {@inheritdoc}
   */
  public function setConfiguration(array $configuration) {

    // Do not allow the changing of the group type ID after construction.
    unset($configuration['group_type_id']);

    // Merge in the default configuration.
    $this->configuration = NestedArray::mergeDeep($this
      ->defaultConfiguration(), $configuration);
    return $this;
  }

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {

    // Warning: For every key defined here you need to have a matching config
    // schema entry following the pattern group_relation.config.MY_KEY!
    // @see group.schema.yml
    return [
      'group_cardinality' => 0,
      'entity_cardinality' => 0,
      'use_creation_wizard' => 0,
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {

    /** @var \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager */
    $entity_type_manager = \Drupal::service('entity_type.manager');
    $replace = [
      '%entity_type' => $entity_type_manager
        ->getDefinition($this
        ->getEntityTypeId())
        ->getLabel(),
      '%group_type' => $this
        ->getGroupType()
        ->label(),
      '%plugin' => $this
        ->getLabel(),
    ];
    $form['group_cardinality'] = [
      '#type' => 'number',
      '#title' => $this
        ->t('Group cardinality'),
      '#description' => $this
        ->t('The amount of %group_type groups a single %entity_type entity can be added to as a %plugin. Set to 0 for unlimited.', $replace),
      '#default_value' => $this->configuration['group_cardinality'],
      '#min' => 0,
      '#required' => TRUE,
    ];
    $form['entity_cardinality'] = [
      '#type' => 'number',
      '#title' => $this
        ->t('Entity cardinality'),
      '#description' => $this
        ->t('The amount of times a single %entity_type entity can be added to the same %group_type group as a %plugin. Set to 0 for unlimited.', $replace),
      '#default_value' => $this->configuration['entity_cardinality'],
      '#min' => 0,
      '#required' => TRUE,
    ];
    if ($this
      ->definesEntityAccess()) {
      $form['use_creation_wizard'] = [
        '#type' => 'checkbox',
        '#title' => $this
          ->t('Use 2-step wizard when creating a new %entity_type entity within a %group_type group', $replace),
        '#description' => $this
          ->t('This will first show you the form to create the actual entity and then a form to create the relationship between the entity and the group.<br />You can choose to disable this wizard if you did not or will not add any fields to the relationship (i.e. this plugin).<br /><strong>Warning:</strong> If you do have fields on the relationship and do not use the wizard, you may end up with required fields not being filled out.'),
        '#default_value' => $this->configuration['use_creation_wizard'],
      ];
    }
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
  }

  /**
   * {@inheritdoc}
   *
   * Only override this function if you need to do something specific to the
   * submitted data before it is saved as configuration on the plugin. The data
   * gets saved on the plugin in \Drupal\group\Entity\Form\GroupContentTypeForm.
   */
  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
  }

  /**
   * {@inheritdoc}
   */
  public function calculateDependencies() {
    $dependencies['module'][] = $this
      ->getProvider();
    $dependencies['module'][] = $this
      ->getEntityType()
      ->getProvider();
    return $dependencies;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 2
DependencySerializationTrait::__wakeup public function 2
GroupRelationBase::$groupTypeId protected property The ID of group type this plugin was instantiated for.
GroupRelationBase::$_permissions private property Backwards compatible permission array.
GroupRelationBase::buildConfigurationForm public function Form constructor. Overrides PluginFormInterface::buildConfigurationForm 2
GroupRelationBase::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides DependentPluginInterface::calculateDependencies 1
GroupRelationBase::defaultConfiguration public function Gets default configuration for this plugin. Overrides ConfigurableInterface::defaultConfiguration 2
GroupRelationBase::definesEntityAccess public function Returns whether this plugin defines entity access. Overrides GroupRelationInterface::definesEntityAccess
GroupRelationBase::getConfiguration public function Gets this plugin's configuration. Overrides ConfigurableInterface::getConfiguration
GroupRelationBase::getContentLabel public function Retrieves the label for a piece of group content. Overrides GroupRelationInterface::getContentLabel
GroupRelationBase::getContentTypeConfigId public function Returns a safe, unique configuration ID for a group content type. Overrides GroupRelationInterface::getContentTypeConfigId
GroupRelationBase::getContentTypeDescription public function Returns the administrative description for a group content type. Overrides GroupRelationInterface::getContentTypeDescription
GroupRelationBase::getContentTypeLabel public function Returns the administrative label for a group content type. Overrides GroupRelationInterface::getContentTypeLabel
GroupRelationBase::getDescription public function Returns the administrative description for the plugin. Overrides GroupRelationInterface::getDescription
GroupRelationBase::getEntityBundle public function Returns the entity bundle the plugin supports. Overrides GroupRelationInterface::getEntityBundle
GroupRelationBase::getEntityCardinality public function Returns the amount of times the same content can be added to a group. Overrides GroupRelationInterface::getEntityCardinality
GroupRelationBase::getEntityReferenceDescription public function Returns the description for the entity reference field. Overrides GroupRelationInterface::getEntityReferenceDescription
GroupRelationBase::getEntityReferenceLabel public function Returns the label for the entity reference field. Overrides GroupRelationInterface::getEntityReferenceLabel
GroupRelationBase::getEntityReferenceSettings public function Returns a list of entity reference field settings. Overrides GroupRelationInterface::getEntityReferenceSettings 1
GroupRelationBase::getEntityType protected function Returns the entity type definition the plugin supports.
GroupRelationBase::getEntityTypeId public function Returns the entity type ID the plugin supports. Overrides GroupRelationInterface::getEntityTypeId
GroupRelationBase::getGroupCardinality public function Returns the amount of groups the same content can be added to. Overrides GroupRelationInterface::getGroupCardinality
GroupRelationBase::getGroupOperations public function Provides a list of operations for a group. Overrides GroupRelationInterface::getGroupOperations 2
GroupRelationBase::getGroupOperationsCacheableMetadata public function Provides the cacheable metadata for this plugin's group operations. Overrides GroupRelationInterface::getGroupOperationsCacheableMetadata 1
GroupRelationBase::getGroupType public function Returns the group type the plugin was instantiated for. Overrides GroupRelationInterface::getGroupType
GroupRelationBase::getGroupTypeId public function Returns the ID of the group type the plugin was instantiated for. Overrides GroupRelationInterface::getGroupTypeId
GroupRelationBase::getLabel public function Returns the administrative label for the plugin. Overrides GroupRelationInterface::getLabel
GroupRelationBase::getOperations public function Provides a list of operations for the group relation plugin. Overrides GroupRelationInterface::getOperations
GroupRelationBase::getPrettyPathKey public function Returns the pretty path key for use in path aliases. Overrides GroupRelationInterface::getPrettyPathKey
GroupRelationBase::getProvider public function Returns the plugin provider. Overrides GroupRelationInterface::getProvider
GroupRelationBase::isCodeOnly public function Returns whether this plugin can only be (un)installed through code. Overrides GroupRelationInterface::isCodeOnly
GroupRelationBase::isEnforced public function Returns whether this plugin is always on. Overrides GroupRelationInterface::isEnforced
GroupRelationBase::setConfiguration public function Sets the configuration for this plugin instance. Overrides ConfigurableInterface::setConfiguration
GroupRelationBase::submitConfigurationForm public function Only override this function if you need to do something specific to the submitted data before it is saved as configuration on the plugin. The data gets saved on the plugin in \Drupal\group\Entity\Form\GroupContentTypeForm. Overrides PluginFormInterface::submitConfigurationForm
GroupRelationBase::validateConfigurationForm public function Form validation handler. Overrides PluginFormInterface::validateConfigurationForm
GroupRelationBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase::__construct
MessengerTrait::$messenger protected property The messenger. 27
MessengerTrait::messenger public function Gets the messenger. 27
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 2
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.