dvf-2.x-dev/src/Plugin/Field/FieldType/VisualisationUrlItem.php

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

namespace Drupal\dvf\Plugin\Field\FieldType;

use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\TypedData\DataDefinition;
use Drupal\Core\TypedData\MapDataDefinition;
use Drupal\dvf\FieldTypeTrait;
use Drupal\dvf\Plugin\VisualisationItemInterface;

/**
 * Plugin implementation of the 'dvf_url' field type.
 *
 * @FieldType(
 *   id = "dvf_url",
 *   label = @Translation("Visualisation URL"),
 *   description = @Translation("Stores a URL string, and options to display a visualisation."),
 *   category = @Translation("Data Visualisation Framework"),
 *   default_widget = "dvf_url_default",
 *   default_formatter = "dvf_default"
 * )
 */
class VisualisationUrlItem extends FieldItemBase implements VisualisationItemInterface {

  use FieldTypeTrait;

  /**
   * {@inheritdoc}
   */
  public static function defaultFieldSettings() {
    return [
      'visualisation_source' => '',
      'visualisation_source_options' => [],
    ] + parent::defaultFieldSettings();
  }

  /**
   * {@inheritdoc}
   */
  public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
    $properties['uri'] = DataDefinition::create('uri')
      ->setLabel(t('URI'));

    $properties['options'] = MapDataDefinition::create()
      ->setLabel(t('Options'));

    return $properties;
  }

  /**
   * {@inheritdoc}
   */
  public static function schema(FieldStorageDefinitionInterface $field_definition) {
    return [
      'columns' => [
        'uri' => [
          'description' => 'The URI of the source.',
          'type' => 'varchar',
          'length' => 2048,
        ],
        'options' => [
          'description' => 'Serialized array of style options.',
          'type' => 'blob',
          'size' => 'big',
          'serialize' => TRUE,
        ],
      ],
      'indexes' => [
        'uri' => [['uri', 30]],
      ],
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
    return $this->fieldSettingsFormBase($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function isEmpty() {
    $value = $this->get('uri')->getValue();
    return ($value === NULL || $value === '');
  }

  /**
   * {@inheritdoc}
   */
  public static function mainPropertyName() {
    return 'uri';
  }

  /**
   * {@inheritdoc}
   */
  public function setValue($values, $notify = TRUE) {
    if (isset($values) && !is_array($values)) {
      $values = [static::mainPropertyName() => $values];
    }

    if (isset($values)) {
      $values += [
        'options' => [],
      ];
    }

    if (is_string($values['options'])) {
      $values['options'] = unserialize($values['options'], ['allowed_classes' => FALSE]);
    }

    parent::setValue($values, $notify);
  }

}

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

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