You are here

public function OLMap::optionsForm in Openlayers 7.3

@TODO What is this return? If it is the form, why is form by reference?

Overrides Base::optionsForm

File

src/Plugin/Map/OLMap/OLMap.php, line 25
Map: Map.

Class

OLMap
Class OLMap.

Namespace

Drupal\openlayers\Plugin\Map\OLMap

Code

public function optionsForm(array &$form, array &$form_state) {
  $form['options']['ui'] = array(
    '#type' => 'fieldset',
    '#title' => t('User interface'),
    'width' => array(
      '#type' => 'textfield',
      '#title' => 'Width of the map',
      '#default_value' => $this
        ->getOption('width', 'auto'),
      '#parents' => array(
        'options',
        'width',
      ),
    ),
    'height' => array(
      '#type' => 'textfield',
      '#title' => t('Height of the map'),
      '#default_value' => $this
        ->getOption('height', '300px'),
      '#parents' => array(
        'options',
        'height',
      ),
    ),
  );
  $form['options']['view'] = array(
    '#type' => 'fieldset',
    '#title' => t('Center and rotation'),
    '#tree' => TRUE,
  );
  if ($this
    ->getMachineName() != Config::get('openlayers.edit_view_map')) {
    if (($map = Openlayers::load('Map', Config::get('openlayers.edit_view_map'))) == TRUE) {
      $map_configuration = $map
        ->getConfiguration();
      if ($view = $this
        ->getOption('view')) {

        // Don't apply min / max zoom settings to this map to avoid lock-in.
        $view['minZoom'] = 0;
        $view['maxZoom'] = 0;
        $map
          ->setOption('view', $view);
      }
      $form['options']['view']['map'] = array(
        '#type' => 'openlayers',
        '#description' => $map
          ->getPluginDescription(),
        '#map' => $map,
      );
    }
  }
  $form['options']['view']['center'] = array(
    '#tree' => TRUE,
    'lon' => array(
      '#type' => 'textfield',
      '#title' => t('Longitude (X axis)'),
      '#default_value' => $this
        ->getOption(array(
        'view',
        'center',
        'lon',
      ), 0),
    ),
    'lat' => array(
      '#type' => 'textfield',
      '#title' => t('Latitude (Y axis)'),
      '#default_value' => $this
        ->getOption(array(
        'view',
        'center',
        'lat',
      ), 0),
    ),
  );
  $form['options']['view']['rotation'] = array(
    '#type' => 'textfield',
    '#title' => t('Rotation'),
    '#default_value' => $this
      ->getOption(array(
      'view',
      'rotation',
    ), 0),
  );
  $form['options']['view']['zoom'] = array(
    '#type' => 'textfield',
    '#title' => t('Zoom'),
    '#default_value' => $this
      ->getOption(array(
      'view',
      'zoom',
    ), 0),
  );
  $form['options']['view']['minZoom'] = array(
    '#type' => 'textfield',
    '#title' => t('Min zoom'),
    '#default_value' => $this
      ->getOption(array(
      'view',
      'minZoom',
    ), 0),
  );
  $form['options']['view']['maxZoom'] = array(
    '#type' => 'textfield',
    '#title' => t('Max zoom'),
    '#default_value' => $this
      ->getOption(array(
      'view',
      'maxZoom',
    ), 0),
  );
  $form['options']['view']['limit_extent'] = array(
    '#type' => 'select',
    '#title' => t('Limit to extent'),
    '#empty_option' => t('Disabled'),
    '#empty_value' => '',
    '#options' => array(
      'custom' => 'Custom extent',
      'projection' => 'Map projection',
    ),
    '#description' => t('If enabled navigation on the map is limited to the give extent.'),
    '#default_value' => $this
      ->getOption(array(
      'view',
      'limit_extent',
    ), FALSE),
  );
  $form['options']['view']['extent'] = array(
    '#type' => 'textfield',
    '#title' => t('Extent [minx, miny, maxx, maxy]'),
    '#default_value' => $this
      ->getOption(array(
      'view',
      'extent',
    ), ''),
    '#states' => array(
      'visible' => array(
        ':input[name="options[view][limit_extent]"]' => array(
          'value' => 'custom',
        ),
      ),
    ),
  );
  $form['options']['misc'] = array(
    '#type' => 'fieldset',
    '#title' => t('Miscellaneous options'),
  );
  $form['options']['misc']['renderer'] = array(
    '#type' => 'radios',
    '#title' => t('Renderer'),
    '#description' => t('Renderer by default. Canvas, DOM and WebGL renderers are tested for support in that order. Note that at present only the Canvas renderer support vector data.'),
    '#options' => array(
      'canvas' => t('Canvas'),
      'dom' => t('DOM'),
      'webgl' => t('WebGL'),
    ),
    '#default_value' => $this
      ->getOption('renderer', 'canvas'),
    '#parents' => array(
      'options',
      'renderer',
    ),
  );
  $i = 0;
  $data = array();
  $map_options = $this
    ->getOptions();

  /** @var \Drupal\openlayers\Types\Base $object */
  foreach ($this
    ->getCollection()
    ->getFlatList() as $object) {
    $weight = 0;
    if (isset($map_options['capabilities']['options']['table'][$object
      ->getMachineName()])) {
      $weight = array_search($object
        ->getMachineName(), array_keys($map_options['capabilities']['options']['table']));
    }
    $data[$object
      ->getMachineName()] = array(
      'name' => $object
        ->getName(),
      'machine_name' => $object
        ->getMachineName(),
      'text' => isset($map_options['capabilities']['options']['table'][$object
        ->getMachineName()]) ? $map_options['capabilities']['options']['table'][$object
        ->getMachineName()] : $object
        ->getPluginDescription(),
      'weight' => $weight,
      'enabled' => isset($map_options['capabilities']['options']['table'][$object
        ->getMachineName()]) ? TRUE : FALSE,
      'default' => 1,
    );
  }
  uasort($data, function ($a, $b) {
    if ($a['enabled'] > $b['enabled']) {
      return -1;
    }
    elseif ($a['enabled'] < $b['enabled']) {
      return 1;
    }
    if ($a['weight'] < $b['weight']) {
      return -1;
    }
    elseif ($a['weight'] > $b['weight']) {
      return 1;
    }
    return 0;
  });
  $rows = array();
  $row_elements = array();
  foreach ($data as $id => $entry) {
    $rows[$id] = array(
      'data' => array(
        array(
          'class',
          array(
            'entry-cross',
          ),
        ),
        array(
          'data' => array(
            '#type' => 'weight',
            '#title' => t('Weight'),
            '#title_display' => 'invisible',
            '#default_value' => $entry['weight'],
            '#attributes' => array(
              'class' => array(
                'entry-order-weight',
              ),
            ),
          ),
        ),
        array(
          'data' => array(
            '#type' => 'hidden',
            '#default_value' => $entry['machine_name'],
          ),
        ),
        array(
          'data' => array(
            '#type' => 'checkbox',
            '#title' => t('Enable'),
            '#title_display' => 'invisible',
            '#default_value' => $entry['enabled'],
          ),
        ),
        array(
          'data' => array(
            '#type' => 'textfield',
            '#title' => t('Text'),
            '#title_display' => 'invisible',
            '#default_value' => $entry['text'],
            '#maxlength' => 256,
          ),
        ),
        check_plain($entry['name']),
        check_plain($entry['machine_name']),
      ),
      'class' => array(
        'draggable',
      ),
    );

    // Build rows of the form elements in the table.
    $row_elements[$id] = array(
      'weight' => &$rows[$id]['data'][1]['data'],
      'machine_name' => &$rows[$id]['data'][2]['data'],
      'enabled' => &$rows[$id]['data'][3]['data'],
      'text' => &$rows[$id]['data'][4]['data'],
    );
  }
  $form['options']['capabilities'] = array(
    '#type' => 'fieldset',
    '#title' => 'Map description and capabilities',
    '#collapsible' => FALSE,
    '#collapsed' => FALSE,
    'enabled' => array(
      '#type' => 'checkbox',
      '#title' => t('Enable map capabilities ?'),
      '#default_value' => (bool) $this
        ->getOption(array(
        'capabilities',
      ), FALSE),
    ),
    'options' => array(
      '#type' => 'container',
      '#states' => array(
        'visible' => array(
          ':input[name="options[capabilities][enabled]"]' => array(
            'checked' => TRUE,
          ),
        ),
      ),
      'container_type' => array(
        '#type' => 'select',
        '#title' => t('Container type'),
        '#options' => array(
          'fieldset' => 'Fieldset',
          'container' => 'Simple div',
        ),
        '#default_value' => $this
          ->getOption(array(
          'capabilities',
          'options',
          'container_type',
        ), 'fieldset'),
      ),
      'title' => array(
        '#type' => 'textfield',
        '#title' => t('Title'),
        '#description' => t('Show a title ? Empty to disable.'),
        '#default_value' => $this
          ->getOption(array(
          'capabilities',
          'options',
          'title',
        ), t('Map capabilities')),
        '#states' => array(
          'visible' => array(
            ':input[name="options[capabilities][options][container_type]"]' => array(
              'value' => 'fieldset',
            ),
          ),
        ),
      ),
      'description' => array(
        '#type' => 'textfield',
        '#title' => t('Description'),
        '#description' => t('Show a description ? Empty to disable.'),
        '#default_value' => $this
          ->getOption(array(
          'capabilities',
          'options',
          'description',
        ), t('Description')),
        '#states' => array(
          'visible' => array(
            ':input[name="options[capabilities][options][container_type]"]' => array(
              'value' => 'fieldset',
            ),
          ),
        ),
      ),
      'collapsible' => array(
        '#type' => 'checkbox',
        '#title' => t('Collapsible'),
        '#default_value' => (bool) $this
          ->getOption(array(
          'capabilities',
          'options',
          'collapsible',
        ), TRUE),
        '#states' => array(
          'visible' => array(
            ':input[name="options[capabilities][options][container_type]"]' => array(
              'value' => 'fieldset',
            ),
          ),
        ),
      ),
      'collapsed' => array(
        '#type' => 'checkbox',
        '#title' => t('Collapsed'),
        '#default_value' => (bool) $this
          ->getOption(array(
          'capabilities',
          'options',
          'collapsed',
        ), TRUE),
        '#states' => array(
          'visible' => array(
            ':input[name="options[capabilities][options][container_type]"]' => array(
              'value' => 'fieldset',
            ),
          ),
        ),
      ),
    ),
  );

  // Add the table to the form.
  $form['options']['capabilities']['options']['table'] = array(
    '#theme' => 'table',
    // The row form elements need to be processed and build,
    // therefore pass them as element children.
    'elements' => $row_elements,
    '#header' => array(
      // We need two empty columns for the weigth field and the cross.
      array(
        'data' => NULL,
        'colspan' => 2,
      ),
      array(
        'data' => t('Enabled'),
        'colspan' => 2,
      ),
      array(
        'data' => t('Description'),
        'colspan' => 1,
      ),
      t('Name'),
      t('Machine name'),
    ),
    '#rows' => $rows,
    '#empty' => t('There are no entries available.'),
    '#attributes' => array(
      'id' => 'entry-order-objects',
    ),
  );
  drupal_add_tabledrag('entry-order-objects', 'order', 'sibling', 'entry-order-weight');
}