NodeType.php

Contains \Drupal\node\Plugin\Condition\NodeType.

Namespace

Drupal\node\Plugin\Condition

File

drupal/core/modules/node/lib/Drupal/node/Plugin/Condition/NodeType.php
View source
<?php

/**
 * @file
 * Contains \Drupal\node\Plugin\Condition\NodeType.
 */
namespace Drupal\node\Plugin\Condition;

use Drupal\Core\Condition\ConditionPluginBase;
use Drupal\Component\Annotation\Plugin;
use Drupal\Core\Annotation\Translation;

/**
 * Provides a 'Node Type' condition.
 *
 * @Plugin(
 *   id = "node_type",
 *   label = @Translation("Node Bundle"),
 *   module = "node",
 *   context = {
 *     "node" = {
 *       "type" = "entity",
 *       "constraints" = {
 *         "EntityType" = "node"
 *       }
 *     }
 *   }
 * )
 */
class NodeType extends ConditionPluginBase {

  /**
   * Implements \Drupal\Core\Form\FormInterface::buildForm().
   */
  public function buildForm(array $form, array &$form_state) {
    $form = parent::buildForm($form, $form_state);
    $options = array();
    foreach (node_type_get_types() as $type) {
      $options[$type->type] = $type->name;
    }
    $form['bundles'] = array(
      '#type' => 'checkboxes',
      '#options' => $options,
      '#required' => TRUE,
      '#default_value' => isset($this->configuration['bundles']) ? $this->configuration['bundles'] : array(),
    );
    return $form;
  }

  /**
   * Implements \Drupal\Core\Form\FormInterface::validateForm().
   */
  public function validateForm(array &$form, array &$form_state) {
    foreach ($form_state['values']['bundles'] as $bundle) {
      if (!in_array($bundle, array_keys(node_type_get_types()))) {
        form_set_error('bundles', t('You have chosen an invalid node bundle, please check your selection and try again.'));
      }
    }
  }

  /**
   * Implements \Drupal\Core\Form\FormInterface::submitForm().
   */
  public function submitForm(array &$form, array &$form_state) {
    $this->configuration['bundles'] = $form_state['values']['bundles'];
    parent::submitForm($form, $form_state);
  }

  /**
   * Implements \Drupal\Core\Executable\ExecutableInterface::summary().
   */
  public function summary() {
    if (count($this->configuration['bundles']) > 1) {
      $bundles = $this->configuration['bundles'];
      $last = array_pop($bundles);
      $bundles = implode(', ', $bundles);
      return t('The node bundle is @bundles or @last', array(
        '@bundles' => $bundles,
        '@last' => $last,
      ));
    }
    $bundle = $this->configuration['bundles'][0];
    return t('The node bundle is @bundle', array(
      '@bundle' => $bundle,
    ));
  }

  /**
   * Implements \Drupal\condition\ConditionInterface::evaluate().
   */
  public function evaluate() {
    $node = $this
      ->getContextValue('node');
    return in_array($node->type, $this->configuration['bundles']);
  }

}

Classes

Namesort descending Description
NodeType Provides a 'Node Type' condition.