geolocation-8.x-3.x-dev/src/Plugin/geolocation/DataLayerProvider/GeolocationViewsAttachment.php

src/Plugin/geolocation/DataLayerProvider/GeolocationViewsAttachment.php
<?php

namespace Drupal\geolocation\Plugin\geolocation\DataLayerProvider;

use Drupal\geolocation\Attribute\DataLayerProvider;
use Drupal\geolocation\DataLayerProviderBase;
use Drupal\geolocation\DataLayerProviderInterface;
use Drupal\geolocation\ViewsContextTrait;

/**
 * Provides default layer.
 */
#[DataLayerProvider(id: 'geolocation_views_attachment_layer',
  name: new \Drupal\Core\StringTranslation\TranslatableMarkup('Geolocation Views Attachment'),
  description: new \Drupal\Core\StringTranslation\TranslatableMarkup('Attached view providing geodata. Can inherit filters.'))]
class GeolocationViewsAttachment extends DataLayerProviderBase implements DataLayerProviderInterface {

  use ViewsContextTrait;

  /**
   * {@inheritdoc}
   */
  public function getLabel(string $data_layer_option_id, array $settings = [], ?array $context = NULL): string {
    if (empty($context['views_style'])) {
      return parent::getLabel($data_layer_option_id, $settings, $context);
    }

    /** @var \Drupal\geolocation\Plugin\views\style\CommonMap $views_style */
    $views_style = $context['views_style'];

    return $views_style->view->displayHandlers->get($data_layer_option_id)?->display['display_title'] ?? parent::getLabel($data_layer_option_id, $settings, $context);
  }

  /**
   * {@inheritdoc}
   */
  public function getLayerOptions(?array $context = NULL): array {
    if (empty($context['views_style'])) {
      return [];
    }

    /** @var \Drupal\geolocation\Plugin\views\style\CommonMap $views_style */
    $views_style = $context['views_style'];

    /** @var \Drupal\views\ViewExecutable $view */
    $view = $views_style->view;

    $options = [];

    foreach ($view->displayHandlers as $display) {
      if ($display->getPluginId() !== 'geolocation_layer') {
        continue;
      }

      $options[$display->display['id']] = [
        'name' => $display->display['display_title'] . " - " . $this->getPluginDefinition()['name'],
        'description' => $this->getPluginDefinition()['description'],
        'toggleable' => FALSE,
      ];
    }

    return $options;
  }

  /**
   * {@inheritdoc}
   */
  protected function getLayerId(string $data_layer_option_id = 'default'): string {
    return $data_layer_option_id;
  }

  /**
   * {@inheritdoc}
   */
  public function getLayerRenderData(string $data_layer_option_id = 'default', array $settings = [], ?array $context = NULL): array {
    if (empty($context['view'])) {
      return [];
    }

    /** @var \Drupal\views\ViewExecutable $view */
    $view = $context['view'];

    /** @var ?\Drupal\geolocation\Plugin\views\display\GeolocationAttachmentLayer $display */
    $display = $view->displayHandlers->get($data_layer_option_id);

    if (!$display) {
      return [];
    }

    return $display->getOption('geolocation_views_attachment_layer_build') ?? [];
  }

}

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

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