You are here

public function GeolocationStyleBase::buildOptionsForm in Geolocation Field 8.3

Provide a form to edit options for this plugin.

Overrides StylePluginBase::buildOptionsForm

1 call to GeolocationStyleBase::buildOptionsForm()
CommonMap::buildOptionsForm in src/Plugin/views/style/CommonMap.php
Provide a form to edit options for this plugin.
1 method overrides GeolocationStyleBase::buildOptionsForm()
CommonMap::buildOptionsForm in src/Plugin/views/style/CommonMap.php
Provide a form to edit options for this plugin.

File

src/Plugin/views/style/GeolocationStyleBase.php, line 200

Class

GeolocationStyleBase
Geolocation Style Base.

Namespace

Drupal\geolocation\Plugin\views\style

Code

public function buildOptionsForm(&$form, FormStateInterface $form_state) {
  parent::buildOptionsForm($form, $form_state);
  $labels = $this->displayHandler
    ->getFieldLabels();
  $geo_options = [];

  /** @var \Drupal\geolocation\DataProviderInterface[] $data_providers */
  $data_providers = [];
  $title_options = [];
  $label_options = [];
  $icon_options = [];
  $fields = $this->displayHandler
    ->getHandlers('field');

  /** @var \Drupal\views\Plugin\views\field\FieldPluginBase[] $fields */
  foreach ($fields as $field_name => $field) {
    $data_provider_settings = [];
    if ($this->options['geolocation_field'] == $field_name && !empty($this->options['data_provider_settings'])) {
      $data_provider_settings = $this->options['data_provider_settings'];
    }
    if ($data_provider = $this->dataProviderManager
      ->getDataProviderByViewsField($field, $data_provider_settings)) {
      $geo_options[$field_name] = $field
        ->adminLabel() . ' (' . $data_provider
        ->getPluginDefinition()['name'] . ')';
      $data_providers[$field_name] = $data_provider;
    }
    if (!empty($field->options['type']) && $field->options['type'] == 'image') {
      $icon_options[$field_name] = $labels[$field_name];
    }
    if (!empty($field->options['type']) && $field->options['type'] == 'string') {
      $title_options[$field_name] = $labels[$field_name];
      $label_options[$field_name] = $labels[$field_name];
    }
  }
  $form['geolocation_field'] = [
    '#title' => $this
      ->t('Geolocation source field'),
    '#type' => 'select',
    '#default_value' => $this->options['geolocation_field'],
    '#description' => $this
      ->t("The source of geodata for each entity."),
    '#options' => $geo_options,
    '#required' => TRUE,
    '#ajax' => [
      'callback' => [
        get_class($this->dataProviderManager),
        'addDataProviderSettingsFormAjax',
      ],
      'wrapper' => 'data-provider-settings',
      'effect' => 'fade',
    ],
  ];
  $data_provider = NULL;
  $form_state_data_provider_id = NestedArray::getValue($form_state
    ->getUserInput(), [
    'style_options',
    'geolocation_field',
  ]);
  if (!empty($form_state_data_provider_id) && !empty($data_providers[$form_state_data_provider_id])) {
    $data_provider = $data_providers[$form_state_data_provider_id];
  }
  elseif (!empty($data_providers[$this->options['geolocation_field']])) {
    $data_provider = $data_providers[$this->options['geolocation_field']];
  }
  elseif (!empty($data_providers[reset($geo_options)])) {
    $data_provider = $data_providers[reset($geo_options)];
  }
  else {
    return;
  }
  $form['data_provider_id'] = [
    '#type' => 'value',
    '#value' => $data_provider
      ->getPluginId(),
  ];
  $form['data_provider_settings'] = $data_provider
    ->getSettingsForm($this->options['data_provider_settings'], [
    'style_options',
    'map_provider_settings',
  ]);
  $form['data_provider_settings'] = array_replace($form['data_provider_settings'], [
    '#prefix' => '<div id="data-provider-settings">',
    '#suffix' => '</div>',
  ]);
  $form['title_field'] = [
    '#title' => $this
      ->t('Title source field'),
    '#type' => 'select',
    '#default_value' => $this->options['title_field'],
    '#description' => $this
      ->t("The source of the title for each entity. Field type must be 'string'."),
    '#options' => $title_options,
    '#empty_value' => 'none',
  ];
  $form['label_field'] = [
    '#title' => $this
      ->t('Label source field'),
    '#type' => 'select',
    '#default_value' => $this->options['label_field'],
    '#description' => $this
      ->t("The source of the label for each entity. Field type must be 'string'."),
    '#options' => $label_options,
    '#empty_value' => 'none',
  ];

  /*
   * Advanced settings
   */
  $form['advanced_settings'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Advanced settings'),
  ];
  if ($icon_options) {
    $form['icon_field'] = [
      '#group' => 'style_options][advanced_settings',
      '#title' => $this
        ->t('Icon source field'),
      '#type' => 'select',
      '#default_value' => $this->options['icon_field'],
      '#description' => $this
        ->t("Optional image (field) to use as icon."),
      '#options' => $icon_options,
      '#empty_value' => 'none',
      '#process' => [
        [
          '\\Drupal\\Core\\Render\\Element\\RenderElement',
          'processGroup',
        ],
        [
          '\\Drupal\\Core\\Render\\Element\\Select',
          'processSelect',
        ],
      ],
      '#pre_render' => [
        [
          '\\Drupal\\Core\\Render\\Element\\RenderElement',
          'preRenderGroup',
        ],
      ],
    ];
  }
  $form['marker_icon_path'] = [
    '#group' => 'style_options][advanced_settings',
    '#type' => 'textfield',
    '#title' => $this
      ->t('Marker icon path'),
    '#description' => $this
      ->t('Set relative or absolute path to custom marker icon. Tokens & Views replacement patterns supported. Empty for default.'),
    '#default_value' => $this->options['marker_icon_path'],
  ];
  $form['marker_row_number'] = [
    '#group' => 'style_options][advanced_settings',
    '#title' => $this
      ->t('Show views result row number in marker'),
    '#type' => 'checkbox',
    '#default_value' => $this->options['marker_row_number'],
  ];
}