/core/modules/node/src/Plugin/Condition/NodeType.php
https://gitlab.com/geeta7/drupal · PHP · 127 lines · 60 code · 13 blank · 54 comment · 3 complexity · d2bad00a6b9525c0d0a05be98b0e220c MD5 · raw file
- <?php
- /**
- * @file
- * Contains \Drupal\node\Plugin\Condition\NodeType.
- */
- namespace Drupal\node\Plugin\Condition;
- use Drupal\Core\Condition\ConditionPluginBase;
- use Drupal\Core\Entity\EntityStorageInterface;
- use Drupal\Core\Form\FormStateInterface;
- use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
- use Symfony\Component\DependencyInjection\ContainerInterface;
- /**
- * Provides a 'Node Type' condition.
- *
- * @Condition(
- * id = "node_type",
- * label = @Translation("Node Bundle"),
- * context = {
- * "node" = @ContextDefinition("entity:node", label = @Translation("Node"))
- * }
- * )
- *
- */
- class NodeType extends ConditionPluginBase implements ContainerFactoryPluginInterface {
- /**
- * The entity storage.
- *
- * @var \Drupal\Core\Entity\EntityStorageInterface
- */
- protected $entityStorage;
- /**
- * Creates a new NodeType instance.
- *
- * @param \Drupal\Core\Entity\EntityStorageInterface $entity_storage
- * The entity storage.
- * @param array $configuration
- * The plugin configuration, i.e. an array with configuration values keyed
- * by configuration option name. The special key 'context' may be used to
- * initialize the defined contexts by setting it to an array of context
- * values keyed by context names.
- * @param string $plugin_id
- * The plugin_id for the plugin instance.
- * @param mixed $plugin_definition
- * The plugin implementation definition.
- */
- public function __construct(EntityStorageInterface $entity_storage, array $configuration, $plugin_id, $plugin_definition) {
- parent::__construct($configuration, $plugin_id, $plugin_definition);
- $this->entityStorage = $entity_storage;
- }
- /**
- * {@inheritdoc}
- */
- public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
- return new static(
- $container->get('entity.manager')->getStorage('node_type'),
- $configuration,
- $plugin_id,
- $plugin_definition
- );
- }
- /**
- * {@inheritdoc}
- */
- public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
- $options = array();
- $node_types = $this->entityStorage->loadMultiple();
- foreach ($node_types as $type) {
- $options[$type->id()] = $type->label();
- }
- $form['bundles'] = array(
- '#title' => $this->t('Node types'),
- '#type' => 'checkboxes',
- '#options' => $options,
- '#default_value' => $this->configuration['bundles'],
- );
- return parent::buildConfigurationForm($form, $form_state);
- }
- /**
- * {@inheritdoc}
- */
- public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
- $this->configuration['bundles'] = array_filter($form_state->getValue('bundles'));
- parent::submitConfigurationForm($form, $form_state);
- }
- /**
- * {@inheritdoc}
- */
- public function summary() {
- if (count($this->configuration['bundles']) > 1) {
- $bundles = $this->configuration['bundles'];
- $last = array_pop($bundles);
- $bundles = implode(', ', $bundles);
- return $this->t('The node bundle is @bundles or @last', array('@bundles' => $bundles, '@last' => $last));
- }
- $bundle = reset($this->configuration['bundles']);
- return $this->t('The node bundle is @bundle', array('@bundle' => $bundle));
- }
- /**
- * {@inheritdoc}
- */
- public function evaluate() {
- if (empty($this->configuration['bundles']) && !$this->isNegated()) {
- return TRUE;
- }
- $node = $this->getContextValue('node');
- return !empty($this->configuration['bundles'][$node->getType()]);
- }
- /**
- * {@inheritdoc}
- */
- public function defaultConfiguration() {
- return array('bundles' => array()) + parent::defaultConfiguration();
- }
- }