eca-1.0.x-dev/modules/content/src/Plugin/ECA/Condition/EntityTypeAndBundle.php
modules/content/src/Plugin/ECA/Condition/EntityTypeAndBundle.php
<?php namespace Drupal\eca_content\Plugin\ECA\Condition; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\eca\Plugin\ECA\Condition\ConditionBase; use Drupal\eca\Plugin\ECA\PluginFormTrait; use Drupal\eca\Service\ContentEntityTypes; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Plugin implementation of the ECA condition for entity type and bundle. * * @EcaCondition( * id = "eca_entity_type_bundle", * label = "Entity type and bundle", * description = @Translation("Evaluates against the entity type and bundle."), * eca_version_introduced = "1.0.0", * context_definitions = { * "entity" = @ContextDefinition("entity", label = @Translation("Entity")) * } * ) */ class EntityTypeAndBundle extends ConditionBase { use PluginFormTrait; /** * The entity types service. * * @var \Drupal\eca\Service\ContentEntityTypes */ protected ContentEntityTypes $entityTypes; /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition): static { $plugin = parent::create($container, $configuration, $plugin_id, $plugin_definition); $plugin->entityTypes = $container->get('eca.service.content_entity_types'); return $plugin; } /** * {@inheritdoc} */ public function evaluate(): bool { $entity = $this->getValueFromContext('entity'); if ($entity instanceof EntityInterface) { $type = $this->configuration['type']; if ($type === '_eca_token') { $type = $this->getTokenValue('type', ''); } $result = $this->entityTypes->bundleFieldApplies($entity, $type); return $this->negationCheck($result); } return FALSE; } /** * {@inheritdoc} */ public function defaultConfiguration(): array { return [ 'type' => '', ] + parent::defaultConfiguration(); } /** * {@inheritdoc} */ public function buildConfigurationForm(array $form, FormStateInterface $form_state): array { $form['type'] = [ '#type' => 'select', '#title' => $this->t('Entity type (and bundle)'), '#default_value' => $this->configuration['type'], '#options' => $this->entityTypes->getTypesAndBundles(), '#weight' => -10, '#eca_token_select_option' => TRUE, ]; return parent::buildConfigurationForm($form, $form_state); } /** * {@inheritdoc} */ public function submitConfigurationForm(array &$form, FormStateInterface $form_state): void { $this->configuration['type'] = $form_state->getValue('type'); parent::submitConfigurationForm($form, $form_state); } }