You are here

function leaflet_geojson_map_pane_edit_form in Leaflet GeoJSON 7.2

Edit form for the pane's settings.

1 string reference to 'leaflet_geojson_map_pane_edit_form'
leaflet_geojson.map_pane.inc in plugins/content_types/leaflet_geojson.map_pane.inc

File

plugins/content_types/leaflet_geojson.map_pane.inc, line 144

Code

function leaflet_geojson_map_pane_edit_form($form, &$form_state) {
  $conf = $form_state['conf'];

  // Build base layer selector.
  $base_options = array();
  foreach (leaflet_map_get_info() as $key => $map) {
    $base_options[$key] = t($map['label']);
  }

  // The default selection is the first one, or the previously selected one.
  $default_base = key($base_options);
  if (isset($conf['map_settings']['base'])) {
    $default_base = $conf['map_settings']['base'];
  }
  $form['map_settings']['base'] = array(
    '#title' => t('Leaflet base layer'),
    '#type' => 'select',
    '#options' => $base_options,
    '#default_value' => $default_base,
    '#required' => TRUE,
    '#description' => t('Select the Leaflet base layer (map style) that will display the data.'),
  );

  // Provide some UI help for setting up multi-layer maps.
  $data_layers_description = t('Choose one or more GeoJSON sources that will provide the map data. ');
  $data_layers_description .= t('If more than one source  is selected, a layer control will appear on the map. ');
  $data_layers_description .= t('Views GeoJSON page displays are automatically exposed here.');

  // Build the data layers selector.
  $form['map_settings']['info'] = array(
    '#type' => 'fieldset',
    '#tree' => TRUE,
    '#title' => 'Views GeoJSON Data Layers',
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
    '#description' => $data_layers_description,
  );

  // Grab the available layers.
  $sources = leaflet_geojson_source_get_info(NULL, TRUE);
  $source_options = array();
  foreach ($sources as $id => $source) {
    $source_options[$id] = $source['title'];
  }

  // Figure out if we have any data layers yet, and set the layer count..
  if (empty($form_state['layer_count'])) {

    // During creation, we wont have any data yet, so only one layer.
    if (!isset($conf['map_settings']['info']['data'])) {
      $form_state['layer_count'] = 1;
    }
    else {

      // During edit, we'll have one or more layers, so count.
      $form_state['layer_count'] = count($conf['map_settings']['info']['data']);
    }
  }

  // Build the number of layer selections indicated by layer_count.
  for ($layer_index = 1; $layer_index <= $form_state['layer_count']; $layer_index++) {
    $default_layer_source = key($source_options);
    if (isset($conf['map_settings']['info']['data']['leaflet_' . $layer_index])) {
      $default_layer_source = $conf['map_settings']['info']['data']['leaflet_' . $layer_index];
    }
    $form['map_settings']['info']['data']['leaflet_' . $layer_index] = array(
      '#type' => 'select',
      '#title' => t('GeoJSON layer source'),
      '#options' => $source_options,
      '#default_value' => $default_layer_source,
      '#required' => $layer_index == 1,
    );
  }

  // Provide an "Add another layer" button.
  $form['map_settings']['info']['add_layer'] = array(
    '#type' => 'submit',
    '#value' => t('Add another layer'),
    '#submit' => array(
      'leaflet_geojson_map_pane_add_layer',
    ),
  );

  // Provide a "Remove" button for latest selected layer.
  if ($form_state['layer_count'] > 1) {
    $form['map_settings']['info']['remove_layer'] = array(
      '#type' => 'submit',
      '#value' => t('Remove last layer'),
      '#submit' => array(
        'leaflet_geojson_map_pane_remove_last_layer',
      ),
    );
  }

  // Leaflet wants a height in the call to the render function.
  $default_height = isset($conf['map_settings']['height']) ? $conf['map_settings']['height'] : 400;
  $form['map_settings']['height'] = array(
    '#title' => t('Map height'),
    '#type' => 'textfield',
    '#field_suffix' => t('px'),
    '#size' => 4,
    '#default_value' => $default_height,
    '#required' => FALSE,
    '#description' => t("Set the map height in pixels."),
  );

  // Optionally override natural center and zoom.
  $default_override_zoom_center = isset($conf['map_settings']['override_zoom_center']) ? $conf['map_settings']['override_zoom_center'] : 0;
  $form['map_settings']['override_zoom_center'] = array(
    '#type' => 'checkbox',
    '#title' => 'Override natural center and zoom placement',
    '#default_value' => $default_override_zoom_center,
    '#description' => t("Map will auto zoom and center based on the data. Check this box to customize the zooom and center"),
  );
  $form['map_settings']['custom_zoom_center'] = array(
    '#type' => 'fieldset',
    '#title' => 'Zoom and Center',
    '#tree' => TRUE,
    '#states' => array(
      'visible' => array(
        ':input[name="override_zoom_center"]' => array(
          'checked' => TRUE,
        ),
      ),
    ),
  );
  $default_zoom = isset($conf['map_settings']['custom_zoom_center']['zoom']) ? $conf['map_settings']['custom_zoom_center']['zoom'] : 1;
  $form['map_settings']['custom_zoom_center']['zoom'] = array(
    '#title' => t('Zoom'),
    '#type' => 'textfield',
    '#size' => 20,
    '#default_value' => $default_zoom,
    '#required' => FALSE,
  );
  $form['map_settings']['custom_zoom_center']['center'] = array(
    '#type' => 'fieldset',
    '#title' => 'Map center',
    '#tree' => TRUE,
    '#description' => t("Provide a default map center especially when using the bounding box strategy."),
  );
  $default_center = isset($conf['map_settings']['custom_zoom_center']['center']) ? $conf['map_settings']['custom_zoom_center']['center'] : array(
    'lon' => 0,
    'lat' => 0,
  );
  $form['map_settings']['custom_zoom_center']['center']['lon'] = array(
    '#title' => t('Center longitude'),
    '#type' => 'textfield',
    '#size' => 20,
    '#default_value' => $default_center['lon'],
    '#required' => FALSE,
  );
  $form['map_settings']['custom_zoom_center']['center']['lat'] = array(
    '#title' => t('Center latitude'),
    '#type' => 'textfield',
    '#size' => 20,
    '#default_value' => $default_center['lat'],
    '#required' => FALSE,
  );
  return $form;
}