You are here

function mefibs_display_extender_plugin_blocks::options_submit in MEFIBS - More exposed forms in blocks 7

Handle any special handling on the form submission.

Overrides views_plugin_display_extender::options_submit

File

./mefibs_display_extender_plugin_blocks.inc, line 389
Provides an MEFIBS exposed form plugin for View 3.x.

Class

mefibs_display_extender_plugin_blocks
Display Extender Plugin class.

Code

function options_submit(&$form, &$form_state) {
  if ($form_state['section'] == 'mefibs') {
    $values = $form_state['values'];
    $blocks = $form['options']['mefibs']['#blocks'];
    if (isset($form_state['view']->form_cache['blocks'])) {
      $blocks = $form_state['view']->form_cache['blocks'];
    }
    foreach ($blocks as $id => $block) {
      if ($block['machine_name'] == 'default') {
        unset($blocks[$id]);
      }
    }

    // If the #group property is set on the clicked button, that means we are
    // modifying a block, not actually updating the settings.
    $button = $form_state['triggering_element'];
    if (isset($button['#group'])) {
      $action = array_pop($button['#parents']);
      array_pop($button['#parents']);
      $id = array_pop($button['#parents']);

      // Store the action arguments to have them accessible in
      // options_form().
      $form_state['storage']['action'] = $action;
      $form_state['storage']['id'] = $id;
      switch ($action) {
        case 'add':

          // New block to be added.
          $blocks[] = array(
            'name' => $values['mefibs']['add_block']['name'],
            'machine_name' => $values['mefibs']['add_block']['machine_name'],
            'submit_button' => t('Submit'),
            'reset_button' => FALSE,
            'reset_button_label' => t('Reset'),
            'autosubmit' => FALSE,
            'autosubmit_hide' => FALSE,
          );

          // This is the only working way I have found to clear the input
          // values.
          $form_state['input']['mefibs']['add_block']['name'] = '';
          $form_state['input']['mefibs']['add_block']['machine_name'] = '';
          break;
        case 'remove':

          // Block to be removed.
          unset($blocks[$id]);
          break;
        case 'edit':

          // Block to be edited.
          break;
        case 'save':

          // Block to be saved.
          $blocks[$id] = array(
            'name' => $form_state['input']['mefibs']['blocks'][$id]['name'],
            'machine_name' => $form_state['input']['mefibs']['blocks'][$id]['machine_name'],
            'submit_button' => $form_state['input']['mefibs']['blocks'][$id]['submit_button'],
            'reset_button' => $form_state['input']['mefibs']['blocks'][$id]['reset_button'],
            'reset_button_label' => $form_state['input']['mefibs']['blocks'][$id]['reset_button_label'],
            'autosubmit' => $form_state['input']['mefibs']['blocks'][$id]['autosubmit'],
            'autosubmit_hide' => $form_state['input']['mefibs']['blocks'][$id]['autosubmit_hide'],
          );
          break;
      }
      $form_state['rerender'] = TRUE;
      $form_state['rebuild'] = TRUE;
      $form_state['view']->form_cache = array(
        'key' => 'display',
        'blocks' => array_values($blocks),
      );
    }
    else {

      // Save settings.
      if (isset($values['mefibs']['extras'])) {
        $extras = $values['mefibs']['extras'];
      }
      else {
        $extras = array(
          'sort' => -1,
          'items_per_page' => -1,
        );
      }
      $settings = array(
        'blocks' => array_values($blocks),
        'extras' => array(
          'sort' => $extras['sort'] != -1 ? $blocks[$extras['sort']]['machine_name'] : -1,
          'items_per_page' => $extras['items_per_page'] != -1 ? $blocks[$extras['items_per_page']]['machine_name'] : -1,
        ),
      );
      $mefibs = $this->display
        ->get_option('mefibs');
      if ($mefibs) {
        $settings = $settings + $mefibs;
      }

      // Remove filter associations for deleted blocks.
      $block_ids = array(
        'default',
      );
      foreach ($blocks as $block) {
        $block_ids[] = $block['machine_name'];
      }
      mefibs_remove_block_association_recursive($settings[$this->view->current_display], $block_ids);

      // Finally, update the mefibs settings for this display.
      $this->display
        ->set_option('mefibs', $settings);
      views_ui_cache_set($this->view);
    }
  }
}