bridtv-8.x-1.x-dev/src/Plugin/Field/FieldType/BridtvItem.php

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

namespace Drupal\bridtv\Plugin\Field\FieldType;

use Drupal\bridtv\BridEmbeddingInstance;
use Drupal\bridtv\BridSerialization;
use Drupal\bridtv\Field\BridtvVideoItemInterface;
use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\TypedData\DataDefinition;

/**
 * Plugin definition of the Brid.TV video item.
 *
 * @FieldType(
 *   id = "bridtv",
 *   label = @Translation("Brid.TV Video"),
 *   description = @Translation("Stores the information for a Brid.TV video, including any retrieved metadata."),
 *   category = @Translation("Media"),
 *   default_widget = "bridtv_id",
 *   default_formatter = "bridtv_js",
 *   module = "bridtv"
 * )
 */
class BridtvItem extends FieldItemBase implements BridtvVideoItemInterface {

  /**
   * The decoded data retrieved from Brid.TV.
   *
   * @var array
   */
  protected $decodedData;

  /**
   * The Brid.TV video instance to embed.
   *
   * @var \Drupal\bridtv\BridEmbeddingInstance
   */
  protected $embeddingInstance = NULL;

  /**
   * {@inheritdoc}
   */
  public function getBridEmbeddingInstance() {
    if (!isset($this->embeddingInstance)) {
      if (!($player_id = $this->get('player')->getValue())) {
        $negotiator = $this->getBridtvNegotiator();
        $player_id = $negotiator->getDefaultPlayerId();
      }
      $this->embeddingInstance = new BridEmbeddingInstance($this->getEntity(), $player_id);
    }
    return $this->embeddingInstance;
  }

  /**
   * Get the decoded data retrieved from Brid.TV.
   *
   * @return array|null
   *   The decoded data as array, or NULL if not given.
   */
  public function getBridApiData($decode = TRUE) {
    if ($this->isEmpty()) {
      return NULL;
    }
    if ($decode) {
      if (!isset($this->decodedData)) {
        $this->decodedData = BridSerialization::decode($this->get('data')->getValue());
      }
      return $this->decodedData ? $this->decodedData : NULL;
    }
    return $this->get('data')->getValue();
  }

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

    $properties['video_id'] = DataDefinition::create('integer')
      ->setLabel(new TranslatableMarkup('The video id at Brid.TV.'))
      ->setRequired(TRUE);
    $properties['title'] = DataDefinition::create('string')
      ->setLabel(new TranslatableMarkup('The video title.'));
    $properties['description'] = DataDefinition::create('string')
      ->setLabel(new TranslatableMarkup('The video description.'));
    $properties['publish_date'] = DataDefinition::create('datetime_iso8601')
      ->setLabel(new TranslatableMarkup('Date value'));
    $properties['data'] = DataDefinition::create('string')
      ->setLabel(new TranslatableMarkup('Retrieved metadata from Brid.TV about the video.'));
    $properties['player'] = DataDefinition::create('integer')
      ->setLabel(new TranslatableMarkup('Brid.TV Player id'));
    $properties['settings'] = DataDefinition::create('any')
      ->setLabel(new TranslatableMarkup('Custom settings'));

    return $properties;
  }

  /**
   * {@inheritdoc}
   */
  public static function schema(FieldStorageDefinitionInterface $field_definition) {
    $schema = [];
    $schema['columns'] = [
      'video_id' => [
        'type' => 'int',
        'size' => 'normal',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ],
      'title' => [
        'type' => 'varchar',
        'length' => 187,
      ],
      'description' => [
        'type' => 'text',
        'size' => 'normal',
      ],
      'publish_date' => [
        'type' => 'varchar',
        'length' => 20,
      ],
      'data' => [
        'type' => 'text',
        'size' => 'medium',
      ],
      'player' => [
        'type' => 'int',
        'size' => 'normal',
        'unsigned' => TRUE,
      ],
      'settings' => [
        'type' => 'blob',
        'size' => 'normal',
        'serialize' => TRUE,
      ],
    ];
    $schema['indexes'] = [
      'i_video_id' => ['video_id'],
      'i_title' => ['title'],
    ];
    $schema['unique keys'] = [
      'u_video_id' => ['video_id'],
    ];
    return $schema;
  }

  /**
   * Get the negotiator service.
   *
   * @return \Drupal\bridtv\BridInfoNegotiator
   *   The Brid.TV negotiator.
   */
  protected function getBridtvNegotiator() {
    return \Drupal::service('bridtv.negotiator');
  }

}

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

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