1 views_plugin_display.inc views_plugin_display::options_submit(&$form, &$form_state)

Perform any necessary changes to the form values prior to storage. There is no need for this function to actually store the data.

Overrides views_plugin::options_submit

File

core/modules/views/plugins/views_plugin_display.inc, line 2306
Contains the base display plugin.

Class

views_plugin_display
The default display plugin handler. Display plugins handle options and basic mechanisms for different output methods.

Code

function options_submit(&$form, &$form_state) {
  // Not sure I like this being here, but it seems (?) like a logical place.
  $cache_plugin = $this->get_plugin('cache');
  if ($cache_plugin) {
    $cache_plugin->cache_flush();
  }

  $section = $form_state['section'];
  switch ($section) {
    case 'display_id':
      if (isset($form_state['values']['display_id'])) {
        $this->display->new_id = $form_state['values']['display_id'];
      }
      break;
    case 'display_title':
      $this->display->display_title = $form_state['values']['display_title'];
      $this->set_option('display_description', $form_state['values']['display_description']);
      break;
    case 'access':
      $access = $this->get_option('access');
      if ($access['type'] != $form_state['values']['access']['type']) {
        $plugin = views_get_plugin('access', $form_state['values']['access']['type']);
        if ($plugin) {
          $access = array('type' => $form_state['values']['access']['type']);
          $this->set_option('access', $access);
          if (!empty($plugin->definition['uses options'])) {
            views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('access_options'));
          }
        }
      }

      break;
    case 'access_options':
      $plugin = views_get_plugin('access', $form_state['values'][$section]['type']);
      if ($plugin) {
        $plugin->options_submit($form['access_options'], $form_state);
        $this->set_option('access', $form_state['values'][$section]);
      }
      break;
    case 'cache':
      $cache = $this->get_option('cache');
      if ($cache['type'] != $form_state['values']['cache']['type']) {
        $plugin = views_get_plugin('cache', $form_state['values']['cache']['type']);
        if ($plugin) {
          $cache = array('type' => $form_state['values']['cache']['type']);
          $this->set_option('cache', $cache);
          if (!empty($plugin->definition['uses options'])) {
            views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('cache_options'));
          }
        }
      }

      break;
    case 'cache_options':
      $plugin = views_get_plugin('cache', $form_state['values'][$section]['type']);
      if ($plugin) {
        $plugin->options_submit($form['cache_options'], $form_state);
        $this->set_option('cache', $form_state['values'][$section]);
      }
      break;
    case 'query':
      $plugin = $this->get_plugin('query');
      if ($plugin) {
        $plugin->options_submit($form['query']['options'], $form_state);
        $this->set_option('query', $form_state['values'][$section]);
      }
      break;

    case 'link_display':
      $this->set_option('link_url', $form_state['values']['link_url']);
    case 'title':
    case 'css_class':
    case 'display_comment':
      $this->set_option($section, $form_state['values'][$section]);
      break;
    case 'field_language':
      $this->set_option('field_language', $form_state['values']['field_language']);
      $this->set_option('field_language_add_to_query', $form_state['values']['field_language_add_to_query']);
      break;
    case 'use_ajax':
    case 'hide_attachment_summary':
    case 'hide_admin_links':
      $this->set_option($section, (bool) $form_state['values'][$section]);
      break;
    case 'use_more':
      $this->set_option($section, intval($form_state['values'][$section]));
      $this->set_option('use_more_always', !intval($form_state['values']['use_more_always']));
      $this->set_option('use_more_text', $form_state['values']['use_more_text']);
    case 'distinct':
      $this->set_option($section, $form_state['values'][$section]);
      break;
    case 'group_by':
      $this->set_option($section, $form_state['values'][$section]);
      break;
    case 'row_plugin':
      // This if prevents resetting options to default if they don't change
      // the plugin.
      if ($this->get_option($section) != $form_state['values'][$section]) {
        $plugin = views_get_plugin('row', $form_state['values'][$section]);
        if ($plugin) {
          $this->set_option($section, $form_state['values'][$section]);
          $this->set_option('row_options', array());

          // send ajax form to options page if we use it.
          if (!empty($plugin->definition['uses options'])) {
            views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('row_options'));
          }
        }
      }
      break;
    case 'style_plugin':
      // This if prevents resetting options to default if they don't change
      // the plugin.
      if ($this->get_option($section) != $form_state['values'][$section]) {
        $plugin = views_get_plugin('style', $form_state['values'][$section]);
        if ($plugin) {
          $this->set_option($section, $form_state['values'][$section]);
          $this->set_option('style_options', array());
          // send ajax form to options page if we use it.
          if (!empty($plugin->definition['uses options'])) {
            views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('style_options'));
          }
        }
      }
      break;
    case 'style_options':
      $style = TRUE;
    case 'row_options':
      // if row, $style will be empty.
      $plugin = $this->get_plugin(empty($style) ? 'row' : 'style');
      if ($plugin) {
        $plugin->options_submit($form['options'][$section], $form_state);
      }
      $this->set_option($section, $form_state['values'][$section]);
      break;
    case 'exposed_block':
      $this->set_option($section, (bool) $form_state['values'][$section]);
      break;
    case 'exposed_form':
      $exposed_form = $this->get_option('exposed_form');
      if ($exposed_form['type'] != $form_state['values']['exposed_form']['type']) {
        $plugin = views_get_plugin('exposed_form', $form_state['values']['exposed_form']['type']);
        if ($plugin) {
          $exposed_form = array('type' => $form_state['values']['exposed_form']['type'], 'options' => array());
          $this->set_option('exposed_form', $exposed_form);
          if (!empty($plugin->definition['uses options'])) {
            views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('exposed_form_options'));
          }
        }
      }

      break;
    case 'exposed_form_options':
      $plugin = $this->get_plugin('exposed_form');
      if ($plugin) {
        $exposed_form = $this->get_option('exposed_form');
        $plugin->options_submit($form['exposed_form_options'], $form_state);
        $exposed_form['options'] = $form_state['values'][$section];
        $this->set_option('exposed_form', $exposed_form);
      }
      break;
    case 'pager':
      $pager = $this->get_option('pager');
      if ($pager['type'] != $form_state['values']['pager']['type']) {
        $plugin = views_get_plugin('pager', $form_state['values']['pager']['type']);
        if ($plugin) {
          // Because pagers have very similar options, let's allow pagers to
          // try to carry the options over.
          $plugin->init($this->view, $this->display, $pager['options']);

          $pager = array('type' => $form_state['values']['pager']['type'], 'options' => $plugin->options);
          $this->set_option('pager', $pager);
          if (!empty($plugin->definition['uses options'])) {
            views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('pager_options'));
          }
        }
      }

      break;
    case 'pager_options':
      $plugin = $this->get_plugin('pager');
      if ($plugin) {
        $pager = $this->get_option('pager');
        $plugin->options_submit($form['pager_options'], $form_state);
        $pager['options'] = $form_state['values'][$section];
        $this->set_option('pager', $pager);
      }
      break;
  }

  foreach ($this->extender as $extender) {
    $extender->options_submit($form, $form_state);
  }
}