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

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

namespace Drupal\dvf\Plugin\Field\FieldType;

use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\TypedData\MapDataDefinition;
use Drupal\file\Plugin\Field\FieldType\FileItem;
use Drupal\dvf\FieldTypeTrait;
use Drupal\file\Entity\File;
use Drupal\dvf\Plugin\VisualisationItemInterface;

/**
 * Plugin implementation of the 'dvf_file' field type.
 *
 * @FieldType(
 *   id = "dvf_file",
 *   label = @Translation("Visualisation File"),
 *   description = @Translation("Saves a file locally, and options to display a visualisation."),
 *   category = @Translation("Data Visualisation Framework"),
 *   default_widget = "dvf_file_default",
 *   default_formatter = "dvf_default",
 *   list_class = "\Drupal\file\Plugin\Field\FieldType\FileFieldItemList"
 * )
 */
class VisualisationFileItem extends FileItem implements VisualisationItemInterface {

  use FieldTypeTrait;

  /**
   * {@inheritdoc}
   */
  public static function defaultFieldSettings() {
    $default_settings = [
      'visualisation_source' => '',
      'visualisation_source_options' => [],
      'file_extensions' => 'csv json txt',
    ];
    return array_merge(parent::defaultFieldSettings(), $default_settings);
  }

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

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

    return $properties;
  }

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

    $schema['columns']['options'] = [
      'description' => 'Serialized array of style options.',
      'type' => 'blob',
      'size' => 'big',
      'serialize' => TRUE,
    ];

    return $schema;
  }

  /**
   * {@inheritdoc}
   */
  public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
    $element = $this->fieldSettingsFormBase($form, $form_state);
    $element += parent::fieldSettingsForm($form, $form_state);

    return $element;
  }

  /**
   * {@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);
  }

  /**
   * {@inheritdoc}
   */
  public function getValue() {
    $values = parent::getValue();

    $values['uri'] = '';
    $values['file']['fids'] = [];

    if (!empty($values['target_id'])) {
      $values['uri'] = $this->getFileUrl($values['target_id']);
      $values['file']['fids'] = [$values['target_id']];
    }

    return $values;
  }

  /**
   * Return the full url to the file.
   *
   * @param int $fid
   *   The entity id for the file.
   *
   * @return string
   *   URL srting or NULL if no fid.
   */
  public function getFileUrl($fid = NULL) {
    if (empty($fid)) {
      return NULL;
    }

    $file = File::load($fid);

    return !empty($file) ? $file->getFileUri() : NULL;
  }

}

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

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