You are here

function openlayers_field_field_formatter_settings_form in Openlayers 7.3

Implements hook_field_formatter_settings_form().

File

modules/openlayers_field/openlayers_field.module, line 105
Openlayers field module.

Code

function openlayers_field_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
  $display = $instance['display'][$view_mode];
  $settings = $display['settings'];
  $element = array();
  switch ($display['type']) {
    case 'openlayers_map_formatter':
      break;
    case 'openlayers_geofile_formatter':
      $options = array();

      /** @var \Drupal\openlayers\Types\MapInterface $map */
      foreach (\Drupal\openlayers\Openlayers::loadAll('map') as $map) {

        /** @var \Drupal\openlayers\Types\LayerInterface $layer */
        foreach ($map
          ->getCollection()
          ->getObjects('layer') as $layer) {
          if ($source = $layer
            ->getSource()) {
            $key = $map
              ->getMachineName() . ':' . $layer
              ->getMachineName();
            $value = sprintf("%s: %s (%s)", $map
              ->getName(), $layer
              ->getName(), $layer
              ->getMachineName());
            $options[$map
              ->getName()][$key] = $value;
          }
        }
      }
      $element['map_layer'] = array(
        '#type' => 'select',
        '#title' => 'Base map to use and vector layer to fill with the features',
        '#description' => 'You may choose only vector layer having a Field type source',
        '#options' => $options,
        '#default_value' => $settings['map_layer'],
        '#required' => TRUE,
      );
      break;
    case 'openlayers_addressfield_textfield_formatter':
      $options = array();

      /** @var \Drupal\openlayers\Types\MapInterface $map */
      foreach (\Drupal\openlayers\Openlayers::loadAll('map') as $map) {

        /** @var \Drupal\openlayers\Types\LayerInterface $layer */
        foreach ($map
          ->getCollection()
          ->getObjects('layer') as $layer) {
          if ($source = $layer
            ->getSource()) {
            if ('openlayers.Source:Field' == $source
              ->getFactoryService()) {
              $key = $map
                ->getMachineName() . ':' . $layer
                ->getMachineName();
              $value = sprintf("%s: %s (%s)", $map
                ->getName(), $layer
                ->getName(), $layer
                ->getMachineName());
              $options[$map
                ->getName()][$key] = $value;
            }
          }
        }
      }
      $element['map_layer'] = array(
        '#type' => 'select',
        '#title' => 'Base map to use and vector layer to fill with the features',
        '#description' => 'You may choose only vector layer having a Field type source',
        '#options' => $options,
        '#default_value' => $settings['map_layer'],
        '#required' => TRUE,
      );
      $geocoder_handlers = array();
      foreach (geocoder_handler_info() as $name => $handler) {
        $geocoder_handlers[$name] = $handler['title'];
      }
      $element['geocoder_handler'] = array(
        '#type' => 'select',
        '#title' => t('Geocoder handler'),
        '#options' => $geocoder_handlers,
        '#default_value' => $settings['geocoder_handler'],
      );
      $element['geocoder_cache'] = array(
        '#type' => 'select',
        '#title' => t('Geocoder cache type'),
        '#description' => t('Type of geocoder cache to use'),
        '#options' => array(
          0 => t('No caching'),
          1 => t('Static-cache but no persistent-cache'),
          2 => t('Both static-cache and persistent-cache'),
        ),
        '#default_value' => $settings['geocoder_cache'],
      );
      break;
  }
  return $element;
}