You are here

public function EntityTypeThemer::buildMapThemerElement in Geofield Map 8.2

Provides a Map Themer Options Element.

Parameters

array $defaults: The default values/settings.

array $form: The form array.

\Drupal\Core\Form\FormStateInterface $form_state: The form state.

\Drupal\geofield_map\Plugin\views\style\GeofieldGoogleMapViewStyle $geofieldMapView: The Geofield Map View display object.

Return value

array The Map Themer Options Element

Overrides EntityTypeThemerUrl::buildMapThemerElement

File

src/Plugin/GeofieldMapThemer/EntityTypeThemer.php, line 42

Class

EntityTypeThemer
Style plugin to render a View output as a Leaflet map.

Namespace

Drupal\geofield_map\Plugin\GeofieldMapThemer

Code

public function buildMapThemerElement(array $defaults, array &$form, FormStateInterface $form_state, GeofieldGoogleMapViewStyle $geofieldMapView) {

  // Get the existing (Default) Element settings.
  $default_element = $this
    ->getDefaultThemerElement($defaults);

  // Get the MapThemer Entity type and bundles.
  $entity_type = $geofieldMapView
    ->getViewEntityType();
  $entity_bundles = $this->entityTypeBundleInfo
    ->getBundleInfo($entity_type);

  // Filter the View Bundles based on the View Filtered Bundles,
  // but only if the MapThemer is working on the View base table entity type.
  $view_bundles = $this
    ->getMapThemerEntityBundles($geofieldMapView, $entity_type, $entity_bundles);

  // Reorder the entity bundles based on existing (Default) Element settings.
  if (!empty($default_element)) {
    $weighted_bundles = [];
    foreach ($view_bundles as $bundle) {
      $weighted_bundles[$bundle] = [
        'weight' => isset($default_element[$bundle]) ? $default_element[$bundle]['weight'] : 0,
      ];
    }
    uasort($weighted_bundles, 'Drupal\\Component\\Utility\\SortArray::sortByWeightElement');
    $view_bundles = array_keys($weighted_bundles);
  }
  $label_alias_upload_help = $this
    ->getLabelAliasHelp();
  $file_upload_help = $this->markerIcon
    ->getFileUploadHelp();

  // Define the Table Header variables.
  $table_settings = [
    'header' => [
      'label' => $this
        ->t('@entity type Type/Bundle', [
        '@entity type' => $entity_type,
      ]),
      'label_alias' => Markup::create($this
        ->t('Label Alias @description', [
        '@description' => $this->renderer
          ->renderPlain($label_alias_upload_help),
      ])),
      'marker_icon' => Markup::create($this
        ->t('Marker Icon @file_upload_help', [
        '@file_upload_help' => $this->renderer
          ->renderPlain($file_upload_help),
      ])),
      'image_style' => Markup::create($this
        ->t('Icon Image Style')),
    ],
    'tabledrag_group' => 'bundles-order-weight',
    'caption' => [
      'title' => [
        '#type' => 'html_tag',
        '#tag' => 'label',
        '#value' => $this
          ->t('Icon Urls, per Entity Types'),
      ],
    ],
  ];

  // Build the Table Header.
  $element = $this
    ->buildTableHeader($table_settings);
  foreach ($view_bundles as $k => $bundle) {
    $fid = (int) (!empty($default_element[$bundle]['icon_file']['fids'])) ? $default_element[$bundle]['icon_file']['fids'] : NULL;
    $label_value = $entity_bundles[$bundle]['label'];

    // Define the table row parameters.
    $row = [
      'id' => "[geofieldmap_entity_type][values][{$bundle}]",
      'label' => [
        'value' => $label_value,
        'markup' => $label_value,
      ],
      'weight' => [
        'value' => isset($default_element[$bundle]['weight']) ? $default_element[$bundle]['weight'] : $k,
        'class' => $table_settings['tabledrag_group'],
      ],
      'label_alias' => [
        'value' => isset($default_element[$bundle]['label_alias']) ? $default_element[$bundle]['label_alias'] : '',
      ],
      'icon_file_id' => $fid,
      'image_style' => [
        'options' => $this->markerIcon
          ->getImageStyleOptions(),
        'value' => isset($default_element[$bundle]['image_style']) ? $default_element[$bundle]['image_style'] : 'geofield_map_default_icon_style',
      ],
      'legend_exclude' => [
        'value' => isset($default_element[$bundle]['legend_exclude']) ? $default_element[$bundle]['legend_exclude'] : (count($view_bundles) > 10 ? TRUE : FALSE),
      ],
      'attributes' => [
        'class' => [
          'draggable',
        ],
      ],
    ];

    // Builds the table row for the MapThemer.
    $element[$bundle] = $this
      ->buildDefaultMapThemerRow($row);
  }
  return $element;
}