You are here

function webform_steps_navigation_callback in Webform steps 7

Same name and namespace in other branches
  1. 7.3 webform_steps.module \webform_steps_navigation_callback()
  2. 7.2 webform_steps.module \webform_steps_navigation_callback()

Submit callback for the step button

We simulate next and previous button clicks for

See also

webform_client_form_pages().

1 string reference to 'webform_steps_navigation_callback'
webform_steps_form_webform_client_form_alter in ./webform_steps.module
Implements hook_form_FORM_ID_alter().

File

./webform_steps.module, line 170

Code

function webform_steps_navigation_callback(&$form, &$form_state) {
  $submitted_page = $form['details']['page_num']['#value'];
  $button =& $form_state['clicked_button'];
  if (isset($button['#page'])) {
    $new_page = (int) $button['#page'];
    if ($submitted_page <= $new_page && $new_page > 1) {

      // simulate click on next.
      $button['#parents'][] = 'next';

      // Failsafe to avoid jumping over steps.
      $form_state['webform']['page_num'] = min($new_page - 1, $submitted_page);
      $form_state['steps_finished'] = $submitted_page;
    }
    else {

      // simulate click on previous.
      $button['#parents'][] = 'previous';
      $form_state['webform']['page_num'] = $new_page + 1;

      // prohibit jumps of more than one step forward at once, after the user
      // jumped back, otherwise one could skip the validations of a step.
      $form_state['steps_finished'] = $new_page;
    }
    $form_state['values']['op'] = 'next';
  }
  elseif (end($button['#parents']) == 'next') {
    $form_state['steps_finished'] = $submitted_page;
  }
  else {
    $form_state['steps_finished'] = $submitted_page - 1;
  }
  return $form;
}