You are here

class openlayers_layers_ui in Openlayers 7.2

@file

Hierarchy

Expanded class hierarchy of openlayers_layers_ui

1 string reference to 'openlayers_layers_ui'
openlayers_ui_openlayers_layers_ctools_export_ui in modules/openlayers_ui/plugins/export_ui/openlayers_layers.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_layers_ui.class.php, line 6

View source
class openlayers_layers_ui extends ctools_export_ui {
  function edit_form(&$form, &$form_state) {
    parent::edit_form($form, $form_state);
    $layer_types = openlayers_layer_types();
    $options = array(
      '' => t('Select the layer type'),
    );
    $layer = NULL;
    if ($form_state['op'] == 'edit' && $form_state['form type'] == 'edit') {
      $layer = openlayers_layer_load($form_state['item']->name);
    }
    if ($form_state['op'] == 'add' && $form_state['form type'] == 'clone') {
      $layer = openlayers_layer_load($form_state['function args'][2]->name);
      $layer->title = t('Clone of ') . $layer->title;
    }
    $form['info']['title'] = array(
      '#id' => 'layertitle',
      '#type' => 'textfield',
      '#weight' => -1,
      '#title' => t('Layer Title'),
      '#default_value' => isset($layer->title) ? $layer->title : '',
      '#description' => t('The friendly name of your layer, which will appear in the administration interface as well on the map interface if it is exposed.'),
    );
    $form['info']['name']['#machine_name']['source'] = array(
      'info',
      'title',
    );
    $layers_options = array();

    // Go trough all layer types and get each options form.
    foreach ($layer_types as $layer_type) {
      if (is_object($layer) && get_class($layer) == $layer_type['layer_type']['class']) {

        // Layer is of current layer type.
        $layer_type_object = $layer;
      }
      else {

        // Otherwise load layer object for current layer type.
        $layer_type_object = openlayers_layer_type_load($layer_type['name']);
      }
      $layer_options_form = array();
      if (method_exists($layer_type_object, 'options_form')) {

        // This is because the class openlayers_layer_type
        // is not abstract.
        // Maybe there's a better way to do ?
        $parent = get_parent_class($layer_type_object);
        $parent_object = new $parent();
        $layer_options_form = $layer_type_object
          ->options_form() + $parent_object
          ->options_form($layer);
      }

      // TODO First case can never be true without crashing earlier
      if ($layer_type_object == FALSE || empty($layer_options_form)) {
        continue;
      }
      $layers_option = array(
        '#type' => 'fieldset',
        '#tree' => TRUE,
        '#title' => t('Layer specific options for @layer_title', array(
          '@layer_title' => $layer_type['title'],
        )),
      );
      $layers_option += $layer_options_form;
      $layers_option['#states'] = array(
        'visible' => array(
          ':input[name="layer_type"]' => array(
            'value' => $layer_type['name'],
          ),
        ),
      );
      $layers_option['layer_type'] = array(
        '#type' => 'hidden',
        '#value' => $layer_type['name'],
      );
      $layers_options[$layer_type['name']] = $layers_option;
      $options[$layer_type['name']] = $layer_type['title'];
    }
    $form['layer_type'] = array(
      '#type' => 'select',
      '#title' => t('Layer Type'),
      '#default_value' => isset($layer->data['layer_type']) ? $layer->data['layer_type'] : '',
      '#description' => t('Select the type of layer.'),
      '#options' => $options,
    );
    $form += $layers_options;
    $form['buttons']['submit']['#weight'] = 0;
    $form['buttons']['delete']['#weight'] = 20;
    $form['buttons']['saveandedit'] = array(
      '#type' => 'submit',
      '#value' => t('Save and edit'),
      '#weight' => 10,
    );
  }
  function edit_form_validate(&$form, &$form_state) {
    ctools_get_plugins('openlayers', 'layer_types');
    $layer = openlayers_layer_type_load($form_state['values']['layer_type']);
    $form_state['values']['data'] = $form_state['values'][$form_state['values']['layer_type']];
    if (empty($form_state['values']['layer_type'])) {
      form_set_error('layer_type', 'Layer type cannot be empty.');
    }
    $parent = get_parent_class($layer);
    $parent_object = new $parent();
    $form_state['values']['data'] += $layer
      ->options_init();
    $form_state['values']['data'] += $parent_object
      ->options_init();
    $layer_types = openlayers_layer_types();
    foreach ($layer_types as $layer_type) {
      unset($form_state['values'][$layer_type['name']]);
    }
    unset($form_state['values']['layer_type']);
    if (method_exists($layer, 'options_form_validate')) {
      $layer
        ->options_form_validate($form, $form_state['values']);
    }
    parent::edit_form_validate($form, $form_state);
  }

  /**
   * Prepare the tag values before they are added to the database.
   */
  function edit_form_submit(&$form, &$form_state) {
    $layer = openlayers_layer_type_load($form_state['values']['data']['layer_type']);
    $layer
      ->options_form_submit($form, $form_state);
    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/layers/list/' . $name . '/edit';
        $this->plugin['redirect'][$op] = array(
          $path,
          $options,
        );
      }
    }
    return $output;
  }

  /**
   * Deletes exportable items from the database.
   */
  function delete_form_submit(&$form_state) {
    $item = $form_state['item'];
    $layer = openlayers_layer_type_load($item->data['layer_type']);
    if (method_exists($layer, 'delete')) {
      $layer
        ->delete($item);
    }
    parent::delete_form_submit($form_state);
  }

  /**
   * 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/layers']['type'] = MENU_LOCAL_TASK;
  }

  /**
   * 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']);
    $layers_types = openlayers_layer_types();
    if (!isset($layers_types[$item->data['layer_type']])) {
      return;
    }

    // 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',
        ),
      );
    }
    $this->rows[$name]['data'][] = array(
      'data' => $item->title,
      'class' => array(
        'ctools-export-ui-title',
      ),
    );
    $this->rows[$name]['data'][] = array(
      'data' => $layers_types[$item->data['layer_type']]['title'],
      'class' => array(
        'ctools-export-ui-layer-type',
      ),
    );
    $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',
      ),
    );

    // This should be in the module openlayers_views, but I'm still looking
    // for a solution to do it properly.
    // Temporarily removed.

    /*
    if ($item->data['layer_type'] == 'openlayers_views_vector') {
      $operations['edit']['href'] = 'admin/structure/views/view/' . $item->data['views']['view'] . '/edit/' . $item->data['views']['display'];
      $operations['disable']['href'] = 'admin/structure/views/view/' . $item->data['views']['view'] . '/disable/' . $item->data['views']['display'];
      $operations['clone']['href'] = 'admin/structure/views/view/' . $item->data['views']['view'] . '/clone/' . $item->data['views']['display'];
      $operations['export']['href'] = 'admin/structure/views/view/' . $item->data['views']['view'] . '/export/' . $item->data['views']['display'];
    }
    */
    $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('Type'),
      'class' => array(
        'ctools-export-ui-layer-type',
      ),
    );
    $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;
  }

  /**
   * 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_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_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_layers_ui::delete_form_submit function Deletes exportable items from the database. Overrides ctools_export_ui::delete_form_submit
openlayers_layers_ui::edit_execute_form function Implements ctools_export_ui::edit_execute_form(). Overrides ctools_export_ui::edit_execute_form
openlayers_layers_ui::edit_form function Provide the actual editing form. Overrides ctools_export_ui::edit_form
openlayers_layers_ui::edit_form_submit function Prepare the tag values before they are added to the database. Overrides ctools_export_ui::edit_form_submit
openlayers_layers_ui::edit_form_validate function Validate callback for the edit form. Overrides ctools_export_ui::edit_form_validate
openlayers_layers_ui::hook_menu function hook_menu() entry point. Overrides ctools_export_ui::hook_menu
openlayers_layers_ui::list_build_row function Build a row based on the item. Overrides ctools_export_ui::list_build_row
openlayers_layers_ui::list_sort_options function Provide a list of sort options. Overrides ctools_export_ui::list_sort_options
openlayers_layers_ui::list_table_header function Provide the table header. Overrides ctools_export_ui::list_table_header