You are here

class openlayers_maps_ui in Openlayers 7.2

@file

Hierarchy

Expanded class hierarchy of openlayers_maps_ui

1 string reference to 'openlayers_maps_ui'
openlayers_ui_openlayers_maps_ctools_export_ui in modules/openlayers_ui/plugins/export_ui/openlayers_maps.inc
CTools Export UI required function for plugin definition See function ctools_plugin_load_includes() in the module ctools.

File

modules/openlayers_ui/plugins/export_ui/openlayers_maps_ui.class.php, line 6

View source
class openlayers_maps_ui extends ctools_export_ui {
  function edit_form(&$form, &$form_state) {
    parent::edit_form($form, $form_state);
    $map = $form_state['item'];
    if (empty($map->name)) {
      $map = NULL;
    }
    module_load_include('inc', 'openlayers_ui', 'includes/openlayers_ui.maps');
    openlayers_include();
    ctools_include('dependent');
    drupal_add_js(drupal_get_path('module', 'openlayers_ui') . '/js/openlayers_ui.maps.js');
    drupal_add_css(drupal_get_path('module', 'openlayers_ui') . '/openlayers_ui.css');

    // If cloning or editing, attempt to get map.
    $defaults = array();
    if (empty($map)) {
      $default_map = openlayers_map_load(variable_get('openlayers_default_map', 'default'));
      if ($default_map) {
        $defaults = $default_map->data;
      }
    }
    else {
      $defaults = $map->data;
    }
    $defaults['projection'] = openlayers_get_projection_by_identifier($defaults['projection']);
    $defaults['displayProjection'] = openlayers_get_projection_by_identifier($defaults['displayProjection']);

    // Map preview.  It's a little in the way, so we allow the user
    // to turn it on or off.  Show on preview, otherwise look at setting.
    // Might want to look at disableing the mousewheel zoom since
    // the map could be very in the way.
    if (isset($form_state['clicked_button']['#id']) && $form_state['clicked_button']['#id'] == 'edit-buttons-preview' || variable_get('openlayers_ui_preview_map', FALSE)) {
      $map_preview = isset($form_state['values']) ? openlayers_ui_maps_form_process($form_state['values']) : $map;
      $form['preview'] = array(
        '#tree' => FALSE,
        '#type' => 'fieldset',
        '#title' => t('Preview'),
        '#description' => t('The following is a preview of your map.  Click <em>Preview</em>
        to refresh the map with the new values.  ' . (!variable_get('openlayers_ui_preview_map', FALSE) ? t('Turn map previews on by default on the !link.', array(
          '!link' => l(t('Settings page'), 'admin/structure/openlayers/settings'),
        )) : '')),
      );
      $form['preview']['map'] = array(
        '#markup' => openlayers_render_map($map_preview),
      );
    }
    else {
      $form['preview'] = array();
      $form['preview']['map'] = array(
        '#markup' => '<p>' . t('Turn map previews on by default on the !link.', array(
          '!link' => l(t('Settings page'), 'admin/structure/openlayers/settings'),
        )) . '</p>',
      );
    }

    // Utilize vertical tabs for a better interface.
    $form['ui'] = array(
      '#type' => 'vertical_tabs',
      '#default_tab' => 'info',
    );

    // General map information.
    $form['info']['#type'] = 'fieldset';
    $form['info']['#group'] = 'ui';
    $form['info']['#title'] = 'Infos';
    $form['info']['title'] = array(
      '#id' => 'maptitle',
      '#type' => 'textfield',
      '#title' => t('Map Title'),
      '#description' => t('This is the descriptive title of the map and will show up most often in the interface.'),
      '#maxlength' => 255,
      '#default_value' => !empty($map->title) ? $map->title : '',
      '#required' => TRUE,
      '#weight' => -1,
    );
    $form['info']['name']['#machine_name']['source'] = array(
      'info',
      'title',
    );
    $form['info']['width'] = array(
      '#type' => 'textfield',
      '#title' => t('Width'),
      '#description' => t('The map\'s width. "auto" will make the map fill
      the space it is given; otherwise, enter a value in pixels, like 400px.'),
      '#default_value' => !empty($defaults['width']) ? $defaults['width'] : '',
      '#maxlength' => 128,
      '#required' => TRUE,
    );
    $form['info']['height'] = array(
      '#type' => 'textfield',
      '#title' => t('Height'),
      '#description' => t('The map\'s height. Enter a value in pixels,
      like 400px.'),
      '#default_value' => !empty($defaults['height']) ? $defaults['height'] : '',
      '#maxlength' => 128,
      '#required' => TRUE,
    );

    // Only show this if Openlayers Views is enabled
    if (module_exists('openlayers_views')) {
      $form['info']['hide_empty_map'] = array(
        '#type' => 'checkbox',
        '#title' => t('Hide empty map for Views'),
        '#description' => t("Show views empty text or hide the map if there are\n        no map overlays with features. Otherwise an empty map is displayed."),
        '#default_value' => isset($defaults['hide_empty_map']) ? $defaults['hide_empty_map'] : FALSE,
      );
    }
    $default_image_path = drupal_get_path('module', 'openlayers') . '/themes/default_dark/img/';
    $form['info']['image_path'] = array(
      '#type' => 'textfield',
      '#title' => t('Image Path'),
      '#description' => t('<p>The path to a directory of UI graphics. Use any of the
      following:</p>
      <ul>
        <li><strong>Leave blank</strong> for default graphics as provided
          by the OpenLayers library. </li>
        <li><strong>Relative Drupal path</strong> a path without leading slash and
          the base path will be prepended, ex. "sites/all/themes/path/to/images/"</li>
        <li><strong>Absolute path</strong> a path with leading slash and path will
          start from sites root directory, ex. "/path/to/images/"</li>
        <li><strong>Full URL</strong> such as "http://example.com/image/"</li>
      </ul>
      <p>Always include trailing slash.  The default path provided with this module
      is: %default</p>
      <p><strong>This is actually a setting for the OpenLayers
      object and will affect all maps on the same page.</strong></p>', array(
        '%default' => $default_image_path,
      )),
      '#default_value' => !empty($defaults['image_path']) ? $defaults['image_path'] : '',
    );
    $default_css_path = drupal_get_path('module', 'openlayers') . '/themes/default_dark/style.css';
    $form['info']['css_path'] = array(
      '#type' => 'textfield',
      '#title' => t('CSS Path'),
      '#description' => t('<p>The path to a CSS file for overriding CSS. You
      don\'t really need to override this as CSS is almost always overridable.
      Use any of the following:</p>
      <ul>
        <li><strong>Leave blank</strong> for default hosted OpenLayers which
          is !link</li>
        <li><strong>Relative Drupal path</strong> a path without leading slash and
          the base path will be prepended, ex. "sites/all/themes/path/to/style.css"</li>
        <li><strong>Absolute path</strong> a path with leading slash and path will
          start from sites root directory, ex. "/path/to/style.css"</li>
        <li><strong>Full URL</strong> such as "http://example.com/style.css"</li>
      </ul>
      <p>The default path provided with this module
      is: %default</p>
      <p><strong>This is actually a setting for the OpenLayers
      object and will affect all maps on the same page.</strong></p>', array(
        '!link' => l('http://openlayers.org/api/theme/default/style.css', 'http://openlayers.org/api/theme/default/style.css'),
        '%default' => $default_css_path,
      )),
      '#default_value' => !empty($defaults['css_path']) ? $defaults['css_path'] : '',
    );
    $form['info']['proxy_host'] = array(
      '#type' => 'textfield',
      '#title' => t('Proxy Host'),
      '#description' => t('<p>A proxy (typically on the same domain as this site)
      which enables requests to cross-domain AJAX resources (including remote
      KML).  Use any of the following:</p>
      <ul>
        <li><strong>Leave blank</strong> no proxy path.</li>
        <li><strong>Relative Drupal path</strong> a path without leading slash and
          the base path will be prepended, ex. "proxy?request="</li>
        <li><strong>Absolute path</strong> a path with leading slash and path will
          start from sites root directory, ex. "/cgi_proxy?request="</li>
        <li><strong>Full URL</strong> such as "http://example.com/proxy?request="</li>
      </ul>
      <p><strong>This is actually a setting for the OpenLayers
      object and will affect all maps on the same page.</strong></p>'),
      '#default_value' => !empty($defaults['proxy_host']) ? $defaults['proxy_host'] : '',
    );

    // Center
    $form['center'] = array(
      '#title' => t('Center & Bounds'),
      '#description' => t('Where the map will center itself initially.
      <strong>Shift-drag</strong> a box on the map to set the Restricted Extent.'),
      '#tree' => TRUE,
      '#type' => 'fieldset',
      '#group' => 'ui',
    );
    $form['center']['helpmap'] = array(
      '#markup' => '<div class="form-item openlayers-center-helpmap"
      style="display:block">' . openlayers_ui_maps_form_center_map($defaults) . '</div>',
    );
    $form['center']['initial'] = array(
      '#type' => 'fieldset',
      '#title' => t('Initial Map View'),
    );
    $form['center']['initial']['centerpoint'] = array(
      '#type' => 'textfield',
      '#title' => t('Centerpoint'),
      '#description' => t('Coordinates that are the intial focus of the map.  This
      is formated like <em>longitude,latitude</em>.'),
      '#default_value' => $defaults['center']['initial']['centerpoint'],
      '#attributes' => array(
        'class' => array(
          'openlayers-form-centerpoint',
        ),
      ),
      '#size' => 25,
    );
    $form['center']['initial']['zoom'] = array(
      '#type' => 'textfield',
      '#title' => t('Zoom Level'),
      '#description' => t('Initial Zoom Level when the map intially displays.
      Higher is more zoomed in.'),
      '#default_value' => $defaults['center']['initial']['zoom'],
      '#attributes' => array(
        'class' => array(
          'openlayers-form-zoom',
        ),
      ),
      '#size' => 25,
    );
    $form['center']['restrict'] = array(
      '#type' => 'fieldset',
      '#title' => t('Restrict Extent'),
    );
    $form['center']['restrict']['restrictextent'] = array(
      '#type' => 'checkbox',
      '#title' => t('Restrict Extent'),
      '#description' => t('Setting the restricted extent of a map prevents users
      from panning the map outside a specified area. This can be set
      interactively by <strong>holding the shift key and dragging a box</strong> over the map
      above. Setting the extent does not restrict how far users can zoom out,
      so setting restricted zoom levels (via individual layer settings) is
      recommended.'),
      '#id' => 'restrictextent',
      '#default_value' => isset($defaults['center']['restrict']['restrictextent']) ? $defaults['center']['restrict']['restrictextent'] : '',
    );
    $form['center']['restrict']['restrictedExtent'] = array(
      '#type' => 'textfield',
      '#title' => t('Restricted Extent'),
      '#description' => t('Prevents users from panning outside of a specific bounding box'),
      '#default_value' => isset($defaults['center']['restrict']['restrictedExtent']) ? $defaults['center']['restrict']['restrictedExtent'] : '',
      '#attributes' => array(
        'class' => array(
          'openlayers-form-restrictedExtent',
        ),
      ),
      '#size' => 25,
      '#process' => array(
        'ctools_dependent_process',
      ),
      '#dependency' => array(
        'restrictextent' => array(
          1,
        ),
      ),
    );

    // Layers & styles
    $form['layerstyles'] = array(
      '#type' => 'fieldset',
      '#title' => t('Layers & Styles'),
      '#description' => t('Layer settings.  The Layer options will change based on the projection chosen.'),
      '#theme' => 'openlayers_ui_maps_form_layers',
      '#tree' => TRUE,
      '#group' => 'ui',
      '#prefix' => '',
      '#suffix' => '',
    );

    // Projection options
    $projections = array();
    foreach (openlayers_ui_get_projection_options() as $projection) {
      $projection_layers = array_merge(openlayers_ui_get_layer_options('baselayer', $projection), openlayers_ui_get_layer_options('overlay', $projection));
      $projections[$projection->identifier] = theme('openlayers_ui_form_projection_description', array(
        'projection' => $projection,
        'available_layers' => $projection_layers,
      ));
    }
    $form['layerstyles']['projections'] = array(
      '#type' => 'fieldset',
      '#title' => t('Projections'),
      '#description' => t('<p><strong>WARNING: Projections are not well supported in
      this module.  If you need to handle non spherical mercator projections
      you may be better using the API directly.</strong></p>
      <p>Select the !link_proj for your map.  The list next
      to each projection is the layers that support this projection.</p>', array(
        '!link_proj' => l(t('geographical projection'), 'http://en.wikipedia.org/wiki/Map_projection'),
      )),
      '#tree' => TRUE,
    );
    $form['layerstyles']['projections']['easy_projection'] = array(
      '#type' => 'radios',
      '#title' => t('Map Projection'),
      '#description' => t('The !link_proj of this map: all layers will either be requested or reprojected to this format.', array(
        '!link_proj' => l(t('geographical projection'), 'http://en.wikipedia.org/wiki/Map_projection'),
      )),
      '#default_value' => $defaults['projection']->identifier,
      '#options' => $projections,
      '#attributes' => array(
        'class' => array(
          'openlayers-form-easy-projection',
        ),
      ),
      '#ajax' => array(
        'callback' => 'openlayers_map_layerlist',
        'wrapper' => 'edit-layerstyles',
        'method' => 'replace',
        'event' => 'change',
      ),
    );
    $displayProjectionOptions = array();
    foreach (openlayers_ui_get_projection_options() as $projectionIdentifier => $projection) {
      $displayProjectionOptions[$projectionIdentifier] = $projection
        ->getLocalizedMessage();
    }
    $form['layerstyles']['projections']['displayProjection'] = array(
      '#type' => 'select',
      '#title' => t('Display Projection'),
      '#description' => t('All interaction with the map - drawing, panning,
      centering, and more - occurs in the display projection. The vast majority
      of maps use 4326 (latitude/longitude) for this value.'),
      '#default_value' => !empty($defaults['displayProjection']) ? $defaults['displayProjection']->identifier : openlayers_get_projection('EPSG', '4326')->identifier,
      '#options' => $displayProjectionOptions,
    );
    $form['layerstyles']['layers'] = array(
      '#title' => t('Layers & Styles'),
      '#description' => t('Layer settings.  The Layer options will change based on the projection chosen.'),
      '#type' => 'fieldset',
    );

    // Construct data for theme_openlayers_ui_maps_form_layers
    $form['layerstyles']['layers']['#tree'] = TRUE;
    $form['layerstyles']['layers']['baselabels'] = array();
    if (isset($form_state['values']['layerstyles']['projections']['easy_projection'])) {

      // Projection was choosen by editing the form
      $easy_projection = openlayers_get_projection_by_identifier($form_state['values']['layerstyles']['projections']['easy_projection']);
    }
    else {

      // Form was not yet edited, use default
      $easy_projection = $defaults['projection'];
    }
    $base_options = openlayers_ui_get_layer_options('baselayer', $easy_projection);
    foreach ($base_options as $id => $description) {
      $form['layerstyles']['layers']['baselabels'][$id] = array(
        '#markup' => $description,
      );
    }
    $form['layerstyles']['layers']['baselayers'] = array(
      '#type' => 'checkboxes',
      '#options' => $base_options,
      '#default_value' => !empty($defaults['layers']) ? array_intersect_key($defaults['layers'], $base_options) : array(),
    );
    $form['layerstyles']['layers']['default_layer'] = array(
      '#type' => 'radios',
      '#options' => $base_options,
      '#default_value' => !empty($defaults['default_layer']) && isset($base_options[$defaults['default_layer']]) ? $defaults['default_layer'] : NULL,
    );

    // Overlay layers
    $overlay_options = openlayers_ui_get_layer_options('overlay', $easy_projection);
    $form['layerstyles']['layers']['overlaylabels'] = array();
    if (!empty($overlay_options)) {

      // Have enabled layers maintain their order
      $available = array_keys($overlay_options);
      $enabled = array_intersect(array_keys($defaults['layers']), $available);
      $disabled = array_diff($available, $enabled);
      $overlay_options_keys = array_merge($disabled, $enabled);

      // Create overlay options.
      $form['layerstyles']['layer_styles']['#tree'] = TRUE;
      $form['layerstyles']['layer_styles_select']['#tree'] = TRUE;
      $form['layerstyles']['layer_styles_temporary']['#tree'] = TRUE;
      $form['layerstyles']['layer_weight']['#tree'] = TRUE;
      foreach ($overlay_options_keys as $id) {
        $description = $overlay_options[$id];
        $form['layerstyles']['layers']['overlaylabels'][$id] = array(
          '#markup' => $description,
        );

        // Layer styles that define the default style of layer.
        $form['layerstyles']['layer_styles'][$id] = array(
          '#type' => 'select',
          '#options' => array(
            '<' . t('use default style') . '>',
          ) + openlayers_ui_get_style_options(),
          '#default_value' => !empty($defaults['layer_styles'][$id]) ? $defaults['layer_styles'][$id] : '',
        );

        // Layer select style.
        $form['layerstyles']['layer_styles_select'][$id] = array(
          '#type' => 'select',
          '#options' => array(
            '<' . t('use default style') . '>',
          ) + openlayers_ui_get_style_options(),
          '#default_value' => !empty($defaults['layer_styles_select'][$id]) ? $defaults['layer_styles_select'][$id] : '',
        );

        // Layer temporary style.
        $form['layerstyles']['layer_styles_temporary'][$id] = array(
          '#type' => 'select',
          '#options' => array(
            '<' . t('use default style') . '>',
          ) + openlayers_ui_get_style_options(),
          '#default_value' => !empty($defaults['layer_styles_temporary'][$id]) ? $defaults['layer_styles_temporary'][$id] : '',
        );

        // Weight of layer.  This will affect how the layer shows up in the
        // switcher and is rendered.
        $form['layerstyles']['layer_weight'][$id] = array(
          '#type' => 'weight',
          '#default_value' => !empty($defaults['layer_weight'][$id]) ? $defaults['layer_weight'][$id] : 0,
          '#attributes' => array(
            'class' => array(
              'layer-weight',
            ),
          ),
        );
      }

      // Checkbox options for overlay layers.
      $form['layerstyles']['layers']['overlays'] = array(
        '#type' => 'checkboxes',
        '#options' => $overlay_options,
        '#default_value' => !empty($defaults['layers']) ? array_intersect_key($defaults['layers'], $overlay_options) : array(),
      );
      $form['layerstyles']['layer_activated'] = array(
        '#type' => 'checkboxes',
        '#options' => $overlay_options,
        '#default_value' => !empty($defaults['layer_activated']) ? array_intersect_key($defaults['layer_activated'], $overlay_options) : array(),
      );
      $form['layerstyles']['layer_switcher'] = array(
        '#type' => 'checkboxes',
        '#options' => $overlay_options,
        '#default_value' => !empty($defaults['layer_switcher']) ? array_intersect_key($defaults['layer_switcher'], $overlay_options) : array(),
      );
    }

    // Data overlay help.
    $form['layerstyles']['help_data_overlays'] = array(
      '#type' => 'item',
      '#description' => t('<strong>Add Data Overlays</strong>: You can add regular
      overlays, like <a href="!geojson">GeoJSON</a> or <a href="!kml">KML</a>,
      or you can utilize <a href="!views_url">Views</a> to create data overlays.
      To create a Views-based overlay, you must choose the <strong>OpenLayers
      Data Overlay Display Type</strong>, and then explicitly set the the
      <strong>same for the Format</strong>.  The options in the <em>Format
      Settings</em> will only use fields you have added. To learn more, take
      a look at the <a href="!online_url">online documentation on Drupal.org</a>.', array(
        '!views_url' => url('admin/structure/views'),
        '!geojson' => url('admin/structure/openlayers/layers/add/openlayers_layer_type_geojson'),
        '!kml' => url('admin/structure/openlayers/layers/add/openlayers_layer_type_kml'),
        '!online_url' => url('http://drupal.org/node/595872'),
      )),
    );

    // Styles
    $form['layerstyles']['styles'] = array(
      '#type' => 'fieldset',
      '#title' => t('Default Styles'),
      '#description' => t('Define default style designations for layers when there
      are no overrides.'),
      '#tree' => TRUE,
    );
    $form['layerstyles']['styles']['default'] = array(
      '#type' => 'select',
      '#title' => t('Default style'),
      '#description' => t('Default style for features in a vector.'),
      '#options' => openlayers_ui_get_style_options(),
      '#default_value' => !empty($defaults['styles']['default']) ? $defaults['styles']['default'] : NULL,
    );
    $form['layerstyles']['styles']['select'] = array(
      '#type' => 'select',
      '#title' => t('Select style'),
      '#description' => t('Style for features in a vector that are selected.'),
      '#options' => openlayers_ui_get_style_options(),
      '#default_value' => !empty($defaults['styles']['select']) ? $defaults['styles']['select'] : NULL,
    );
    $form['layerstyles']['styles']['temporary'] = array(
      '#type' => 'select',
      '#title' => t('Temporary Style'),
      '#description' => t('Default temporary style for any features in a vector.
      This can be used with the "Hover behavior" or things like Tooltips.'),
      '#options' => openlayers_ui_get_style_options(),
      '#default_value' => !empty($defaults['styles']['temporary']) ? $defaults['styles']['temporary'] : NULL,
    );

    // Behaviors
    $form['behaviors'] = array(
      '#title' => t('Behaviors'),
      '#description' => t('Configure interactive map behaviors.  Behaviors are general interactions for the map, they can be anything from popups or keyboard handling.  Enable the ones you want and their respective options.  Note that some behaviors do not work with each other or one may encompass another.'),
      '#theme' => 'openlayers_ui_maps_form_behaviors',
      '#tree' => TRUE,
      '#type' => 'fieldset',
      '#group' => 'ui',
    );
    $form['behaviors'] = $form['behaviors'] + openlayers_ui_get_behavior_options('map', $defaults);

    // Displays
    $form['displays'] = array(
      '#title' => t('Displays'),
      '#description' => t('Learn how to display your maps.'),
      '#tree' => TRUE,
      '#type' => 'fieldset',
      '#group' => 'ui',
    );
    if (module_exists('openlayers_views')) {
      $form['displays']['views'] = array(
        '#type' => 'item',
        '#title' => t('Views'),
        '#description' => t('Utilize the <a href="!views_url">Views</a> module to
        display your map as page or in a block.  By creating a new Views Display of
        type <strong>Page</strong> or <strong>Block</strong> you can then choose
        the <strong>OpenLayers Map Format</strong>.  For more details, check out
        the <a href="!online_url">online documentation on Drupal.org</a>.', array(
          '!views_url' => url('admin/structure/views'),
          '!online_url' => url('http://drupal.org/node/595872'),
        )),
        '#suffix' => theme('image', array(
          'path' => 'https://img.skitch.com/20111106-c6ukwxgpgykxx8m41yrn8qew4n.png',
        )),
      );
      $form['displays']['api'] = array(
        '#type' => 'item',
        '#title' => t('API'),
        '#description' => t('You can always utilize the API to directly display
        your maps.  The key function to use is <code>openlayers_render_map()</code>.
        Most of the code is well documented.  To learn how to extend the module,
        take a look at the <a href="!online_url">online documentation on
        Drupal.org</a> as well as the files in the <code>docs/</code> folder.', array(
          '!online_url' => url('http://drupal.org/node/595872'),
        )),
      );
    }
    $form['buttons']['submit']['#weight'] = 0;
    $form['buttons']['delete']['#weight'] = 20;
    $form['buttons']['saveandedit'] = array(
      '#type' => 'submit',
      '#value' => t('Save and edit'),
      '#weight' => 10,
    );

    // Add preview button.
    $form['buttons']['preview'] = array(
      '#type' => 'button',
      '#value' => t('Preview'),
      '#weight' => 30,
    );
  }

  /**
   * Prepare the tag values before they are added to the database.
   */
  function edit_form_submit(&$form, &$form_state) {
    module_load_include('inc', 'openlayers_ui', 'includes/openlayers_ui.maps');
    $form_state['values']['data'] = openlayers_ui_maps_form_process($form_state['values']);
    parent::edit_form_submit($form, $form_state);
  }

  /**
   * Implements ctools_export_ui::edit_execute_form().
   *
   * This is hacky, but since CTools Export UI uses drupal_goto() we have to
   * effectively change the plugin to modify the redirect path dynamically.
   */
  function edit_execute_form(&$form_state) {
    $output = parent::edit_execute_form($form_state);
    if (!empty($form_state['executed'])) {
      $clicked = $form_state['clicked_button']['#value'];
      if (t('Save and edit') == $clicked) {

        // We always want to redirect back to this page when adding an item,
        // but we want to preserve the destination so we can be redirected back
        // to where we came from after clicking "Save".
        $options = array();
        if (!empty($_GET['destination'])) {
          $options['query']['destination'] = $_GET['destination'];
          unset($_GET['destination']);
        }

        // Sets redirect path and options.
        $op = $form_state['op'];
        $name = $form_state['values']['name'];
        $path = 'add' != $op ? current_path() : 'admin/structure/openlayers/maps/list/' . $name . '/edit';
        $this->plugin['redirect'][$op] = array(
          $path,
          $options,
        );
      }
    }
    return $output;
  }

  /**
   * Build a row based on the item.
   *
   * By default all of the rows are placed into a table by the render
   * method, so this is building up a row suitable for theme('table').
   * This doesn't have to be true if you override both.
   */
  function list_build_row($item, &$form_state, $operations) {

    // Set up sorting
    $name = $item->{$this->plugin['export']['key']};
    $schema = ctools_export_get_schema($this->plugin['schema']);

    // Note: $item->{$schema['export']['export type string']} should have already been set up by export.inc so
    // we can use it safely.
    switch ($form_state['values']['order']) {
      case 'disabled':
        $this->sorts[$name] = empty($item->disabled) . $name;
        break;
      case 'title':
        $this->sorts[$name] = $item->{$this->plugin['export']['admin_title']};
        break;
      case 'name':
        $this->sorts[$name] = $name;
        break;
      case 'storage':
        $this->sorts[$name] = $item->{$schema['export']['export type string']} . $name;
        break;
    }
    $this->rows[$name]['data'] = array();
    $this->rows[$name]['class'] = !empty($item->disabled) ? array(
      'ctools-export-ui-disabled',
    ) : array(
      'ctools-export-ui-enabled',
    );

    // If we have an admin title, make it the first row.
    if (!empty($this->plugin['export']['admin_title'])) {
      $this->rows[$name]['data'][] = array(
        'data' => check_plain($item->{$this->plugin['export']['admin_title']}),
        'class' => array(
          'ctools-export-ui-title',
        ),
      );
    }
    $layers = openlayers_layers_load();
    $layers_names = array();
    foreach ($item->data['layers'] as $layer) {
      if (isset($layers[$layer])) {
        $layers_names[] = empty($layers[$layer]->title) ? $layer : filter_xss_admin($layers[$layer]->title);
      }
    }
    sort($layers_names);
    $layers_names = implode(',', $layers_names);
    $this->rows[$name]['data'][] = array(
      'data' => $item->title,
      'class' => array(
        'ctools-export-ui-title',
      ),
    );
    $this->rows[$name]['data'][] = array(
      'data' => $layers_names,
      'class' => array(
        'ctools-export-ui-layers',
      ),
    );
    $this->rows[$name]['data'][] = array(
      'data' => $item->description,
      'class' => array(
        'ctools-export-ui-description',
      ),
    );
    $this->rows[$name]['data'][] = array(
      'data' => check_plain($item->{$schema['export']['export type string']}),
      'class' => array(
        'ctools-export-ui-storage',
      ),
    );
    $ops = theme('links__ctools_dropbutton', array(
      'links' => $operations,
      'attributes' => array(
        'class' => array(
          'links',
          'inline',
        ),
      ),
    ));
    $this->rows[$name]['data'][] = array(
      'data' => $ops,
      'class' => array(
        'ctools-export-ui-operations',
      ),
    );

    // Add an automatic mouseover of the description if one exists.
    if (!empty($this->plugin['export']['admin_description'])) {
      $this->rows[$name]['title'] = $item->{$this->plugin['export']['admin_description']};
    }
  }

  /**
   * Provide the table header.
   *
   * If you've added columns via list_build_row() but are still using a
   * table, override this method to set up the table header.
   */
  function list_table_header() {
    $header = array();
    if (!empty($this->plugin['export']['admin_title'])) {
      $header[] = array(
        'data' => t('Name'),
        'class' => array(
          'ctools-export-ui-name',
        ),
      );
    }
    $header[] = array(
      'data' => t('Title'),
      'class' => array(
        'ctools-export-ui-title',
      ),
    );
    $header[] = array(
      'data' => t('Layers'),
      'class' => array(
        'ctools-export-ui-layers',
      ),
    );
    $header[] = array(
      'data' => t('Description'),
      'class' => array(
        'ctools-export-ui-description',
      ),
    );
    $header[] = array(
      'data' => t('Storage'),
      'class' => array(
        'ctools-export-ui-storage',
      ),
    );
    $header[] = array(
      'data' => t('Operations'),
      'class' => array(
        'ctools-export-ui-operations',
      ),
    );
    return $header;
  }

  /**
   * hook_menu() entry point.
   *
   * Child implementations that need to add or modify menu items should
   * probably call parent::hook_menu($items) and then modify as needed.
   */
  function hook_menu(&$items) {
    parent::hook_menu($items);
    $items['admin/structure/openlayers/maps']['type'] = MENU_LOCAL_TASK;
    $items['admin/structure/openlayers/maps/list/%ctools_export_ui/clone']['context'] = MENU_CONTEXT_INLINE;
    $items['admin/structure/openlayers/maps/list/%ctools_export_ui/edit']['context'] = MENU_CONTEXT_INLINE;
    $items['admin/structure/openlayers/maps/list/%ctools_export_ui/export']['context'] = MENU_CONTEXT_INLINE;
    $items['admin/structure/openlayers/maps/list/%ctools_export_ui/revert']['context'] = MENU_CONTEXT_INLINE;
    $items['admin/structure/openlayers/maps/list/%ctools_export_ui/clone']['type'] = MENU_LOCAL_TASK;
    $items['admin/structure/openlayers/maps/list/%ctools_export_ui/edit']['type'] = MENU_LOCAL_TASK;
    $items['admin/structure/openlayers/maps/list/%ctools_export_ui/export']['type'] = MENU_LOCAL_TASK;
    $items['admin/structure/openlayers/maps/list/%ctools_export_ui/revert']['type'] = MENU_LOCAL_TASK;
  }

  /**
   * Provide a list of sort options.
   *
   * Override this if you wish to provide more or change how these work.
   * The actual handling of the sorting will happen in build_row().
   */
  function list_sort_options() {
    if (!empty($this->plugin['export']['admin_title'])) {
      $options = array(
        'disabled' => t('Enabled, title'),
        $this->plugin['export']['admin_title'] => t('Title'),
      );
    }
    else {
      $options = array(
        'disabled' => t('Enabled, title'),
      );
    }
    $options += array(
      'storage' => t('Storage'),
    );
    return $options;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ctools_export_ui::$name property
ctools_export_ui::$options property
ctools_export_ui::$plugin property
ctools_export_ui::access public function Menu callback to determine if an operation is accessible. 1
ctools_export_ui::add_page public function
ctools_export_ui::build_operations public function Builds the operation links for a specific exportable item.
ctools_export_ui::clone_page public function Main entry point to clone an item.
ctools_export_ui::delete_form_submit public function Deletes exportable items from the database.
ctools_export_ui::delete_page public function Page callback to delete an exportable item.
ctools_export_ui::disable_page public function Callback to disable a page.
ctools_export_ui::edit_cache_clear public function Clear the object cache for the currently edited item.
ctools_export_ui::edit_cache_get public function Retrieve the item currently being edited from the object cache.
ctools_export_ui::edit_cache_get_key public function Figure out what the cache key is for this object.
ctools_export_ui::edit_cache_set public function Cache the item currently currently being edited.
ctools_export_ui::edit_cache_set_key public function
ctools_export_ui::edit_execute_form_standard public function Execute the standard form for editing.
ctools_export_ui::edit_execute_form_wizard public function Execute the wizard for editing.
ctools_export_ui::edit_finish_validate public function Perform a final validation check before allowing the form to be finished.
ctools_export_ui::edit_form_import public function Import form. Provides simple helptext instructions and textarea for pasting a export definition.
ctools_export_ui::edit_form_import_submit public function Submit callback for import form.
ctools_export_ui::edit_form_import_validate public function Import form validate handler.
ctools_export_ui::edit_form_validate public function Validate callback for the edit form.
ctools_export_ui::edit_page public function Main entry point to edit an item.
ctools_export_ui::edit_save_form public function Called to save the final product from the edit form.
ctools_export_ui::edit_wizard_back public function Wizard 'back' callback when using a wizard to edit an item.
ctools_export_ui::edit_wizard_cancel public function Wizard 'cancel' callback when using a wizard to edit an item.
ctools_export_ui::edit_wizard_finish public function Wizard 'cancel' callback when using a wizard to edit an item. 1
ctools_export_ui::edit_wizard_next public function Wizard 'next' callback when using a wizard to edit an item. 1
ctools_export_ui::enable_page public function Callback to enable a page.
ctools_export_ui::export_page public function Page callback to display export information for an exportable item.
ctools_export_ui::get_page_title public function Get a page title for the current page from our plugin strings.
ctools_export_ui::get_wizard_info public function Get the form info for the wizard. 1
ctools_export_ui::import_page public function Page callback to import information for an exportable item.
ctools_export_ui::init public function Fake constructor -- this is easier to deal with than the real constructor because we are retaining PHP4 compatibility, which would require all child classes to implement their own constructor. 1
ctools_export_ui::list_css public function Add listing CSS to the page.
ctools_export_ui::list_filter public function Determine if a row should be filtered out. 2
ctools_export_ui::list_footer public function Render a footer to go after thie list.
ctools_export_ui::list_form public function Create the filter/sort form at the top of a list of exports. 2
ctools_export_ui::list_form_submit public function Submit the filter/sort form.
ctools_export_ui::list_form_validate public function Validate the filter/sort form.
ctools_export_ui::list_header public function Render a header to go before the list.
ctools_export_ui::list_page public function Master entry point for handling a list.
ctools_export_ui::list_render public function Render all of the rows together.
ctools_export_ui::list_search_fields public function Provide a list of fields to test against for the default "search" widget. 1
ctools_export_ui::load_item public function Called by ctools_export_ui_load to load the item.
ctools_export_ui::redirect public function Perform a drupal_goto() to the location provided by the plugin for the operation.
ctools_export_ui::set_item_state public function Set an item's state to enabled or disabled and output to user.
openlayers_maps_ui::edit_execute_form function Implements ctools_export_ui::edit_execute_form(). Overrides ctools_export_ui::edit_execute_form
openlayers_maps_ui::edit_form function Provide the actual editing form. Overrides ctools_export_ui::edit_form
openlayers_maps_ui::edit_form_submit function Prepare the tag values before they are added to the database. Overrides ctools_export_ui::edit_form_submit
openlayers_maps_ui::hook_menu function hook_menu() entry point. Overrides ctools_export_ui::hook_menu
openlayers_maps_ui::list_build_row function Build a row based on the item. Overrides ctools_export_ui::list_build_row
openlayers_maps_ui::list_sort_options function Provide a list of sort options. Overrides ctools_export_ui::list_sort_options
openlayers_maps_ui::list_table_header function Provide the table header. Overrides ctools_export_ui::list_table_header