You are here

openlayers_examples.module in Openlayers 7.3

Openlayers Examples.

File

modules/openlayers_examples/openlayers_examples.module
View source
<?php

/**
 * @file
 * Openlayers Examples.
 */

/**
 * Implements hook_ctools_plugin_api().
 */
function openlayers_examples_ctools_plugin_api($module, $api) {
  $path = drupal_get_path('module', 'openlayers_examples') . '/includes';
  return array(
    'version' => 1,
    'path' => $path,
  );
}

/**
 * Implements hook_menu().
 */
function openlayers_examples_menu() {
  $items = array();
  $items['openlayers_examples'] = array(
    'title' => 'Openlayers 3.x examples',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'openlayers_examples',
    ),
    'access arguments' => array(
      'access content',
    ),
    'type' => MENU_NORMAL_ITEM,
  );
  return $items;
}

/**
 * Form handler.
 */
function openlayers_examples($form, &$form_state, $map_arg = NULL) {
  $maps = array();
  $options = array();
  foreach (\Drupal\openlayers\Openlayers::loadAllExportable('Map') as $machine_name => $data) {
    if (!is_object($data) || property_exists($data, 'disabled') && ($data->disabled == 1 || $data->disabled == TRUE)) {
      continue;
    }
    $options[$machine_name] = $data->name;
  }
  if (isset($form_state['values']['openlayers_default_map'])) {
    $maps = $form_state['values']['openlayers_default_map'];
  }
  else {
    $map = $map_arg;
    if ($map == NULL || !isset($options[$map])) {
      $maps = array(
        array_rand($options, 1),
      );
    }
    elseif (isset($options[$map])) {
      $maps = array(
        $map,
      );
    }
    if ($map == 'all') {
      $maps = array_keys($options);
    }
  }
  $form['openlayers_default_map'] = array(
    '#type' => 'select',
    '#multiple' => TRUE,
    '#options' => $options,
    '#default_value' => $maps,
    '#ajax' => array(
      'callback' => '_openlayers_examples_ajax_reload_default_map',
      'method' => 'replace',
      'wrapper' => 'default_openlayers_map_ajax',
      'effect' => 'fade',
    ),
  );
  $form['#token'] = NULL;
  $form['form'] = array(
    '#prefix' => '<div id="default_openlayers_map_ajax">',
    '#suffix' => '</div>',
    '#type' => 'markup',
  );
  foreach ($maps as $map) {
    if (($map = \Drupal\openlayers\Openlayers::load('Map', $map)) == FALSE) {
      continue;
    }
    $form['form'][$map
      ->getId()] = array(
      '#type' => 'fieldset',
      '#title' => $map
        ->getName(),
      '#collapsible' => FALSE,
    );
    $map
      ->clearOption('contextualLinks');
    $controls = array_values(array_merge($map
      ->getOption('controls', array()), array(
      'openlayers_control_attribution',
      'openlayers_control_zoom',
      'openlayers_control_rotate',
      'openlayers_control_fullscreen',
    )));
    $interactions = array_values(array_merge($map
      ->getOption('interactions', array()), array(
      'openlayers_interaction_doubleclickzoom',
      'openlayers_interaction_dragpan',
      'openlayers_interaction_dragrotate',
    )));
    $components = array_values(array_merge($map
      ->getOption('components', array()), array(
      'openlayers_examples_component_ajax_values',
      'openlayers_examples_component_viewsync',
      'openlayers_examples_component_spinjs',
      'openlayers_examples_component_progressbar',
      'openlayers_examples_component_permalink',
    )));
    $map
      ->setOption('height', '500px')
      ->setOption('controls', $controls)
      ->setOption('interactions', $interactions)
      ->setOption('components', $components);
    if (isset($form_state['input']['zoom'])) {
      $map
        ->setOption(array(
        'view',
        'zoom',
      ), $form_state['input']['zoom']);
    }
    if (isset($form_state['input']['rot'])) {
      $map
        ->setOption(array(
        'view',
        'rotation',
      ), $form_state['input']['rot']);
    }
    if (isset($form_state['input']['lat'])) {
      $map
        ->setOption(array(
        'view',
        'center',
        'lat',
      ), $form_state['input']['lat']);
    }
    if (isset($form_state['input']['lon'])) {
      $map
        ->setOption(array(
        'view',
        'center',
        'lon',
      ), $form_state['input']['lon']);
    }
    $form['form'][$map
      ->getId()]['map'] = array(
      '#weight' => 0,
      '#type' => 'openlayers',
      '#map' => $map,
    );
    if (module_exists('openlayers_services')) {
      if ((bool) $map
        ->getOption('provideIframe', FALSE) == TRUE) {
        $form_state['item'] = $map;
        $form['form'][$map
          ->getId()]['openlayers_services'] = array(
          '#type' => 'fieldset',
          '#collapsible' => TRUE,
          '#collapsed' => TRUE,
          '#title' => 'Embed this map in an iframe',
        );
        foreach (services_endpoint_load_all() as $service) {
          if (isset($service->resources['openlayers-map']['operations']['retrieve']['enabled']) && $service->resources['openlayers-map']['operations']['retrieve']['enabled'] == 1) {
            $width = $map
              ->getOption('width', 'auto') == 'auto' ? '100%' : $map
              ->getOption('width', 'auto');
            $height = $map
              ->getOption('height', 'auto');
            $iframe = "<iframe src='" . url('openlayers/openlayers-map/' . $map
              ->getMachineName(), array(
              'absolute' => TRUE,
            )) . "' width='" . $width . "' height='" . $height . "'/>";
            $form['form'][$map
              ->getId()]['openlayers_services'][$map
              ->getMachineName()] = array(
              '#type' => 'textarea',
              '#description' => t('Copy paste this html code to embed this map in your content.'),
              '#rows' => 3,
              '#value' => $iframe,
            );
          }
        }
      }
    }
    $form['form'][$map
      ->getId()]['permalink'] = array(
      '#weight' => 6,
      '#type' => 'fieldset',
      '#collapsible' => TRUE,
      '#collapsed' => TRUE,
      '#title' => 'Permanent link to this map',
    );
    $form['form'][$map
      ->getId()]['permalink']['link'] = array(
      '#type' => 'textfield',
      '#value' => url('openlayers_examples/' . $map
        ->getMachineName(), array(
        'absolute' => TRUE,
      )),
      '#size' => 128,
    );
  }
  $form['lat'] = array(
    '#type' => 'hidden',
    '#attributes' => array(
      'id' => 'lat',
    ),
    '#value' => 0,
  );
  $form['lon'] = array(
    '#type' => 'hidden',
    '#attributes' => array(
      'id' => 'lon',
    ),
    '#value' => 0,
  );
  $form['rot'] = array(
    '#type' => 'hidden',
    '#attributes' => array(
      'id' => 'rot',
    ),
    '#value' => 0,
  );
  $form['zoom'] = array(
    '#type' => 'hidden',
    '#attributes' => array(
      'id' => 'zoom',
    ),
    '#value' => 0,
  );
  $form['version'] = array(
    '#markup' => 'Module running Openlayers version: ' . \Drupal\openlayers\Openlayers::getLibraryVersion(),
  );

  // This is for preventing 'system/ajax' as destination when using AJAX maps.
  // See: http://drupal.stackexchange.com/questions/86958/get-current-url-arguments-inside-ajax-callback
  $form['current_path'] = array(
    '#type' => 'hidden',
    '#value' => current_path(),
  );

  // Make a system setting form and return.
  return $form;
}

/**
 * Ajax callback.
 */
function _openlayers_examples_ajax_reload_default_map($form, &$form_state) {

  // This is for preventing 'system/ajax' as destination when using AJAX maps.
  // See: http://drupal.stackexchange.com/questions/86958/get-current-url-arguments-inside-ajax-callback
  $_SESSION['current_path'] = $form_state['input']['current_path'];
  return $form['form'];
}

/**
 * Implements hook_block_info().
 */
function openlayers_examples_block_info() {
  return array(
    'openlayers_examples' => array(
      'info' => 'Openlayers Examples',
    ),
  );
}

/**
 * Implements hook_block_view().
 */
function openlayers_examples_block_view($delta) {
  return array(
    'subject' => '',
    'content' => drupal_get_form('openlayers_examples'),
  );
}

/**
 * Implements hook_views_api().
 */
function openlayers_examples_views_api() {
  return array(
    'api' => 3,
    'path' => drupal_get_path('module', 'openlayers_examples') . '/views',
  );
}