You are here

function finder_wizard_form_finder_form_alter in Finder 7.2

Implements hook_form_FORM_ID_alter().

File

modules/finder_wizard/finder_wizard.module, line 265
The Finder page module.

Code

function finder_wizard_form_finder_form_alter(&$form, &$form_state, $form_id) {
  $finder = $form_state['finder'];
  if (empty($finder->finder_wizard)) {
    return;
  }

  // Track the page num.
  $form['finder_wizard']['finder_wizard_page_num'] = array(
    '#type' => 'hidden',
    '#value' => $finder->finder_wizard_page_num,
  );

  // Pass the known values through as hidden fields.
  $finder_wizard_index = array_keys($finder->finder_wizard);
  foreach ($finder_wizard_index as $finder_wizard_page_num => $finder_wizard_page_id) {
    if ($finder->finder_wizard_page_id != $finder_wizard_page_id) {
      foreach ($finder->finder_wizard[$finder_wizard_page_id] as $page_element) {
        if (isset($form_state['values'][$page_element])) {
          $form['finder_wizard'][$page_element] = array(
            '#type' => 'hidden',
            '#value' => $form_state['values'][$page_element],
          );
        }
      }
    }
  }

  // Create next button.
  $next = $form['finder_form']['actions']['find'];
  $next['#value'] = $finder
    ->setting('finder_wizard_next_text');
  $next['#name'] = 'next';
  if ($finder->finder_wizard_page_num == count($finder->finder_wizard) - 1) {
    if ($finder
      ->setting('finder_wizard_hide_disabled')) {
      $next = NULL;
    }
    else {
      $next['#disabled'] = TRUE;
    }
  }
  if ($next) {
    $form['finder_form']['actions'] = array(
      'next' => $next,
    ) + $form['finder_form']['actions'];
  }

  // Create back button.
  if ($finder
    ->setting('finder_wizard_back')) {
    $back = $form['finder_form']['actions']['find'];
    $back['#value'] = $finder
      ->setting('finder_wizard_back_text');
    $back['#name'] = 'back';
    if ($finder->finder_wizard_page_num == 0) {
      if ($finder
        ->setting('finder_wizard_hide_disabled')) {
        $back = NULL;
      }
      else {
        $back['#disabled'] = TRUE;
      }
    }
    if ($back) {
      $form['finder_form']['actions'] = array(
        'back' => $back,
      ) + $form['finder_form']['actions'];
    }
  }

  // Remove find button.
  unset($form['finder_form']['actions']['find']);

  // Handle go button - it only works on the 2nd last page :/
  if (isset($form['finder_form']['actions']['go']) && $finder->finder_wizard_page_num != count($finder->finder_wizard) - 2) {
    if ($finder
      ->setting('finder_wizard_hide_disabled')) {
      unset($form['finder_form']['actions']['go']);
    }
    else {
      $form['finder_form']['actions']['go']['#disabled'] = TRUE;
    }
  }

  // Handle automatically clicking the buttons.  @todo is there a better way to do this (i.e. without waiting for the page to load).
  if ($finder->finder_wizard_page_id != $finder
    ->setting('finder_wizard_url_results')) {
    if (!finder_wizard_find_page_id_in_form($finder->finder_wizard_page_id, $form['finder_form'])) {
      if (!empty($_GET['back']) || isset($form_state['clicked_button']['#name']) && $form_state['clicked_button']['#name'] == 'back') {
        $js_settings['finder_wizard_back'][] = $finder->build_id;
      }
      else {
        $js_settings['finder_wizard_next'][] = $finder->build_id;
      }
      drupal_add_js(array(
        'finder_wizard' => $js_settings,
      ), 'setting');
      drupal_add_js(drupal_get_path('module', 'finder_wizard') . '/finder_wizard.js');
      $form['finder_form']['finder-wizard-redirect'] = array(
        '#prefix' => '<div class="finder-wizard-redirect"><div class="ajax-progress throbber"></div><p>',
        '#markup' => t('Redirecting...'),
        '#suffix' => '</p></div>',
      );
    }
  }
}