View source
<?php
function webform_steps_form_webform_client_form_alter(&$form, &$form_state, $form_id) {
if (function_exists('webform_steps_w3_progressbar')) {
webform_steps_w3_progressbar($form, $form_state);
}
if (empty($form['progressbar'])) {
return;
}
if (!isset($form_state['webform']['page_visited'])) {
$form_state['webform']['page_visited'] = 1;
}
$form_state['webform']['page_visited'] = max($form_state['webform']['page_num'], $form_state['webform']['page_visited']);
$form['step_buttons'] = array(
'#type' => 'container',
'#attributes' => array(
'class' => array(
'webform-steps-buttons element-invisible',
),
),
);
$button = isset($form['actions']['submit']) ? $form['actions']['submit'] : $form['actions']['next'];
unset($button['#id']);
$form['step_buttons']['next'] = array(
'#attributes' => array(
'class' => array(
'element-invisible',
),
),
'#weight' => -100,
) + $button;
array_unshift($form['#submit'], 'webform_steps_navigation_callback');
$ajax = module_exists('webform_ajax') && $form['#node']->webform['webform_ajax'];
$current_page = $form_state['webform']['page_num'];
foreach ($form['progressbar']['#page_labels'] as $n => $label) {
$page = $n + 1;
$button = array(
'#type' => 'submit',
'#attributes' => array(
'class' => array(
'step-button',
),
),
'#name' => 'step-btn',
'#value' => $label,
'#page' => $page,
'#disabled' => $current_page == $page || $page > $current_page + 1,
);
if ($page < $current_page) {
$button['#validate'] = array();
$button['#attributes']['formnovalidate'] = 'formnovalidate';
$button['#attributes']['class'][] = 'cancel';
}
if ($ajax) {
$button['#ajax'] = array(
'callback' => 'webform_ajax_callback',
'wrapper' => $form['webform_ajax_wrapper_id']['#value'],
'progress' => array(
'message' => '',
'type' => 'throbber',
),
'event' => 'click',
);
$button['#id'] = drupal_html_id('edit-webform-step-button-' . $page . '-' . $form['#node']->nid);
}
$form['step_buttons'][] = $button;
}
}
function webform_steps_navigation_callback(&$form, &$form_state) {
$button =& $form_state['clicked_button'];
if (!isset($button['#page'])) {
return;
}
$new_page = (int) $button['#page'];
$old_page =& $form_state['webform']['page_num'];
$new_page = min($new_page, $old_page + 1);
if ($new_page > $old_page) {
$button['#parents'][] = 'next';
$old_page = $new_page - 1;
}
else {
$button['#parents'][] = 'previous';
$old_page = $new_page + 1;
}
$form_state['values']['op'] = 'next';
return $form;
}