media_mpx-8.x-1.x-dev/src/Plugin/Field/FieldFormatter/AvailabilityFormatter.php

src/Plugin/Field/FieldFormatter/AvailabilityFormatter.php
<?php

namespace Drupal\media_mpx\Plugin\Field\FieldFormatter;

use Drupal\Core\Datetime\DateFormatterInterface;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\Plugin\Field\FieldFormatter\TimestampFormatter;
use Drupal\media\MediaInterface;
use Drupal\media_mpx\DateTime\AvailabilitySummary;
use Drupal\media_mpx\Plugin\media\Source\Media as MediaSource;
use Drupal\media_mpx\StubMediaObjectTrait;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Field formatter to surface the current availability of a mpx media entity.
 *
 * @FieldFormatter(
 *   id = "media_mpx_availability",
 *   label = @Translation("mpx availability"),
 *   field_types = {
 *     "timestamp",
 *   }
 * )
 */
class AvailabilityFormatter extends TimestampFormatter {
  use StubMediaObjectTrait;

  /**
   * Availability summary service.
   *
   * @var \Drupal\media_mpx\DateTime\AvailabilitySummary
   */
  protected $availabilitySummary;

  /**
   * Constructs a new TimestampFormatter.
   *
   * @param string $plugin_id
   *   The plugin_id for the formatter.
   * @param mixed $plugin_definition
   *   The plugin implementation definition.
   * @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
   *   The definition of the field to which the formatter is associated.
   * @param array $settings
   *   The formatter settings.
   * @param string $label
   *   The formatter label display setting.
   * @param string $view_mode
   *   The view mode.
   * @param array $third_party_settings
   *   Third party settings.
   * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
   *   The date formatter service.
   * @param \Drupal\Core\Entity\EntityStorageInterface $date_format_storage
   *   The date format storage.
   * @param \Drupal\media_mpx\DateTime\AvailabilitySummary $availability_summary
   *   Utility class to help with the availability summary.
   */
  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, DateFormatterInterface $date_formatter, EntityStorageInterface $date_format_storage, AvailabilitySummary $availability_summary) {
    parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings, $date_formatter, $date_format_storage);
    $this->availabilitySummary = $availability_summary;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static(
      $plugin_id,
      $plugin_definition,
      $configuration['field_definition'],
      $configuration['settings'],
      $configuration['label'],
      $configuration['view_mode'],
      $configuration['third_party_settings'],
      $container->get('date.formatter'),
      $container->get('entity_type.manager')->getStorage('date_format'),
      $container->get('media_mpx.availability_summary')
    );
  }

  /**
   * {@inheritdoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
    $media = $items->getEntity();
    if (!$media instanceof MediaInterface || !$media->getSource() instanceof MediaSource) {
      $elements[0]['#markup'] = $this->t('Not applicable');
      return $elements;
    }

    $mpx_object = $this->getStubMediaObject($media);
    $elements[0]['#markup'] = $this->availabilitySummary
      ->setDateFormat($this->getSetting('date_format'))
      ->setCustomDateFormat($this->getSetting('custom_date_format'))
      ->setTimezone($this->getSetting('timezone'))
      ->getAvailabilitySummary($mpx_object);
    return $elements;
  }

}

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

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