contacts_events-8.x-1.x-dev/src/Plugin/Field/FieldType/PriceMapItem.php

src/Plugin/Field/FieldType/PriceMapItem.php
<?php

namespace Drupal\contacts_events\Plugin\Field\FieldType;

use Drupal\commerce_price\Plugin\Field\FieldType\PriceItem;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\TypedData\DataDefinition;

/**
 * Plugin implementation of the 'price_map' field type.
 *
 * @property string number
 * @property string currency_code
 * @property string booking_window
 * @property string class
 *
 * @FieldType(
 *   id = "price_map",
 *   label = @Translation("Price map"),
 *   description = @Translation("Flexible pricing map."),
 *   category = @Translation("Events"),
 *   default_widget = "price_map",
 *   default_formatter = "price_map",
 *   list_class = "\Drupal\contacts_events\Plugin\Field\FieldType\PriceMapItemList",
 *   cardinality = \Drupal\Core\Field\FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED
 * )
 */
class PriceMapItem extends PriceItem {

  /**
   * Temporary delta tracking.
   *
   * @var int
   */
  protected $delta;

  /**
   * {@inheritdoc}
   */
  public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
    $properties = parent::propertyDefinitions($field_definition);

    $properties['booking_window'] = DataDefinition::create('string')
      ->setLabel(new TranslatableMarkup('Booking window'))
      ->setRequired(FALSE);

    $properties['class'] = DataDefinition::create('string')
      ->setLabel(new TranslatableMarkup('Class'))
      ->setRequired(FALSE);

    return $properties;
  }

  /**
   * {@inheritdoc}
   */
  public static function schema(FieldStorageDefinitionInterface $field_definition) {
    $schema = parent::schema($field_definition);
    $schema['columns']['booking_window'] = [
      'description' => 'The booking window.',
      'type' => 'varchar',
      'length' => 255,
    ];
    $schema['columns']['class'] = [
      'description' => 'The class.',
      'type' => 'varchar',
      'length' => 255,
    ];
    return $schema;
  }

  /**
   * {@inheritdoc}
   */
  public static function defaultFieldSettings() {
    return [
      'order_item_type' => NULL,
      'booking_window_field' => NULL,
      'class_field' => NULL,
    ] + parent::defaultFieldSettings();
  }

  /**
   * {@inheritdoc}
   */
  public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
    $element = [];

    $element['order_item_type'] = [
      '#type' => 'select',
      '#title' => $this->t('Context'),
      '#required' => TRUE,
      '#default_value' => $this->getSetting('order_item_type'),
      '#options' => [],
    ];

    $order_item_types = \Drupal::service('entity_type.manager')
      ->getStorage('commerce_order_item_type')
      ->loadMultiple();
    foreach ($order_item_types as $type) {
      $element['order_item_type']['#options'][$type->id()] = $type->label();
    }

    $element['booking_window_field'] = [
      '#type' => 'select',
      '#title' => $this->t('Booking window field'),
      '#required' => TRUE,
      '#default_value' => $this->getSetting('booking_window_field'),
      '#options' => [],
    ];

    $element['class_field'] = [
      '#type' => 'select',
      '#title' => $this->t('Class field'),
      '#required' => TRUE,
      '#default_value' => $this->getSetting('class_field'),
      '#options' => [],
    ];

    $field_definitions = $this->getEntity()->getFieldDefinitions();
    foreach ($field_definitions as $field_definition) {
      switch ($field_definition->getType()) {
        case 'booking_windows':
          $element['booking_window_field']['#options'][$field_definition->getName()] = $field_definition->getLabel();
          break;

        case 'entity_reference':
          if ($field_definition->getFieldStorageDefinition()->getSetting('target_type') == 'contacts_events_class') {
            $element['class_field']['#options'][$field_definition->getName()] = $field_definition->getLabel();
          }
          break;
      }
    }

    return $element + parent::fieldSettingsForm($form, $form_state);
  }

  /**
   * Get the booking window ID.
   *
   * @return string
   *   The booking window ID.
   */
  public function getBookingWindow() {
    return $this->get('booking_window')->getValue();
  }

  /**
   * Get the class ID.
   *
   * @return string
   *   The class ID.
   */
  public function getClass() {
    return $this->get('class')->getValue();
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc