recurring_events-2.0.x-dev/modules/recurring_events_ical/src/Plugin/Field/FieldFormatter/EventICalLinkFormatter.php

modules/recurring_events_ical/src/Plugin/Field/FieldFormatter/EventICalLinkFormatter.php
<?php

declare(strict_types=1);

namespace Drupal\recurring_events_ical\Plugin\Field\FieldFormatter;

use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Field\Attribute\FieldFormatter;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\link\Plugin\Field\FieldFormatter\LinkFormatter;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Plugin implementation of the 'event_ical_link' formatter.
 */
#[FieldFormatter(
  id: "event_ical_link",
  label: new TranslatableMarkup("Event iCalendar Link"),
  field_types: [
    "event_ical_link",
  ],
)]
class EventICalLinkFormatter extends LinkFormatter {

  public function __construct(
    $plugin_id,
    $plugin_definition,
    FieldDefinitionInterface $field_definition,
    array $settings,
    $label,
    $view_mode,
    array $third_party_settings,
    $path_validator,
    protected readonly ConfigFactoryInterface $configFactory,
  ) {
    parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings, $path_validator);
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    /** @var \Drupal\Core\Path\PathValidatorInterface $pathValidator */
    $pathValidator = $container->get('path.validator');
    /** @var \Drupal\Core\Config\ConfigFactoryInterface $configFactory */
    $configFactory = $container->get('config.factory');
    return new static(
      $plugin_id,
      $plugin_definition,
      $configuration['field_definition'],
      $configuration['settings'],
      $configuration['label'],
      $configuration['view_mode'],
      $configuration['third_party_settings'],
      $pathValidator,
      $configFactory
    );
  }

  /**
   * {@inheritdoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
    $entity = $items->getEntity();
    $entityType = $entity->getEntityType()->id();
    $config = $this->configFactory->get("recurring_events.$entityType.config");
    $linkTitle = $config->get('ical_link_title') ?? $this->t('Download as iCal');
    foreach ($items as $item) {
      $item->title = $linkTitle;
    }
    return parent::viewElements($items, $langcode);
  }

}

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

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