drowl_paragraphs_bs-1.x-dev/src/Plugin/Field/FieldType/DrowlParagraphsBsSettingsItem.php

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

namespace Drupal\drowl_paragraphs_bs\Plugin\Field\FieldType;

use Drupal\Component\Utility\Html;
use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\Field\FieldItemInterface;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\TypedData\DataDefinition;

/**
 * Field type "drowl_paragraphs_bs_settings".
 *
 * @FieldType(
 *   id = "drowl_paragraphs_bs_settings",
 *   label = @Translation("DROWL Paragraphs for Bootstrap settings"),
 *   description = @Translation("DROWL Paragraphs for Bootstrap settings field."),
 *   category = "drowl_paragraphs_bs",
 *   default_widget = "drowl_paragraphs_bs_settings_default",
 *   default_formatter = "drowl_paragraphs_bs_settings_default",
 * )
 */
class DrowlParagraphsBsSettingsItem extends FieldItemBase implements FieldItemInterface {

  /**
   * {@inheritdoc}
   */
  public static function schema(FieldStorageDefinitionInterface $field_definition) {
    $output = [];

    $animations_allowed_count = 4;
    for ($i = 1; $i <= $animations_allowed_count; $i++) {
      $output['columns']['style_animation_' . $i . '_events'] = [
        'type' => 'varchar',
        'length' => 64,
      ];
      $output['columns']['style_animation_' . $i . '_animation'] = [
        'type' => 'varchar',
        'length' => 64,
      ];
      $output['columns']['style_animation_' . $i . '_offset'] = [
        'type' => 'int',
        'size' => 'tiny',
      ];
      $output['columns']['style_animation_' . $i . '_delay'] = [
        'type' => 'int',
        'size' => 'small',
        'unsigned' => TRUE,
      ];
      $output['columns']['style_animation_' . $i . '_transition_duration'] = [
        'type' => 'int',
        'size' => 'small',
        'unsigned' => TRUE,
      ];
    }
    $output['columns']['equal_height_group'] = [
      'type' => 'varchar',
      'length' => 255,
    ];
    $output['columns']['classes_additional'] = [
      'type' => 'varchar',
      'length' => 2048,
    ];
    $output['columns']['id_attr'] = [
      'type' => 'varchar',
      'length' => 128,
    ];
    return $output;

  }

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

    $animations_allowed_count = 4;
    for ($i = 1; $i <= $animations_allowed_count; $i++) {
      $properties['style_animation_' . $i . '_events'] = DataDefinition::create('string')
        ->setLabel(t('Events'))
        ->setRequired(FALSE);
      $properties['style_animation_' . $i . '_animation'] = DataDefinition::create('string')
        ->setLabel(t('Animation'))
        ->setRequired(FALSE);
      $properties['style_animation_' . $i . '_offset'] = DataDefinition::create('string')
        ->setLabel(t('Viewport animation offset trigger'))
        ->setRequired(FALSE);
      $properties['style_animation_' . $i . '_delay'] = DataDefinition::create('integer')
        ->setLabel(t('Animation delay (ms)'))
        ->setRequired(FALSE);
      $properties['style_animation_' . $i . '_transition_duration'] = DataDefinition::create('integer')
        ->setLabel(t('Transition duration (ms)'))
        ->setRequired(FALSE);
    }

    $properties['equal_height_group'] = DataDefinition::create('string')
      ->setLabel(t('Equal height group'))
      ->setRequired(FALSE);
    $properties['classes_additional'] = DataDefinition::create('string')
      ->setLabel(t('Additional classes'))
      ->setRequired(FALSE);
    $properties['id_attr'] = DataDefinition::create('string')
      ->setLabel(t('Custom ID'))
      ->setRequired(FALSE);

    return $properties;
  }

  /**
   * {@inheritdoc}
   */
  public function isEmpty() {
    $item = $this->getValue();
    if (!empty($item)) {
      if (is_array($item)) {
        foreach ($item as $key => $value) {
          if ($key !== '_attributes') {
            // One item is not null.
            if ($value !== NULL && $value !== '') {
              return FALSE;
            }
          }
        }
      }
      else {
        return FALSE;
      }
    }
    return TRUE;
  }

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

  /**
   * {@inheritdoc}
   */
  public function preSave() {
    // Sanitize classes_additional:
    $classes_additional = $this->get('classes_additional')->getValue();
    $classes_additional_sanitized = '';
    if (!empty($classes_additional)) {
      $classes_additional_array = explode(' ', trim($classes_additional));
      foreach ($classes_additional_array as $class) {
        $classes_additional_sanitized .= ' ' . trim(Html::getClass(trim($class)));
      }
    }
    $this->get('classes_additional')->setValue(trim($classes_additional_sanitized));

    // Sanitize equal height group:
    $equal_height_group = $this->get('equal_height_group')->getValue();
    if (!empty($equal_height_group)) {
      $this->get('equal_height_group')->setValue(Html::cleanCssIdentifier(trim($equal_height_group)));
    }

    // Sanitize ID:
    $id_attr = $this->get('id_attr')->getValue();
    if (!empty($id_attr)) {
      $this->get('id_attr')->setValue(Html::cleanCssIdentifier(trim($id_attr)));
    }
  }

}

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

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