function _msnf_form_add_buttons in Multistep Nodeform 6
Adds buttons to the form depending on the current step.
1 call to _msnf_form_add_buttons()
- msnf_prepare_form_step in ./
msnf.module - Function to prepare the current form step and to alter the node form.
File
- ./
msnf.module, line 433 - Main functions for module "Multistep Nodeform".
Code
function _msnf_form_add_buttons(&$form, $form_state) {
if (!is_array($form) || !is_array($form_state)) {
return;
}
// Load necessary functions for form steps.
module_load_include('inc', 'msnf', 'includes/msnf.steps');
// Get node type and current step.
$type = $form['#node']->type;
$current_step = _msnf_form_step_get_current($form_state);
// Get a sorted list of all steps for this content type.
$steps = msnf_steps($type, TRUE);
if (count($steps) == 0) {
// No steps defined.
return;
}
if (!isset($steps[$current_step - 1])) {
drupal_set_message(t('Invalid step index "%current_step".', array(
'%current_step' => $current_step,
)), 'error');
return;
}
$step = $steps[$current_step - 1];
// Default labels.
$buttons_labels_default = array(
'previous' => t('Previous'),
'next' => t('Next'),
'skip' => t('Skip next step'),
'done' => t('Save'),
);
// Get button labels from config.
// Step-specific settings.
$settings = $step['settings'];
// Type-specific settings.
$type_settings = variable_get("msnf_settings_{$type}", array());
if (strlen($settings['form']['button_label']['next']) == 0 && isset($steps[$current_step])) {
// Use title of next step as button label.
$settings['form']['button_label']['next'] = $steps[$current_step]['label'];
}
if (strlen($type_settings['button_label_skip']) == 0 && isset($steps[$current_step])) {
// Use a combination of <code>t('Skip')</code> and the title of next step as
// button label.
$type_settings['button_label_skip'] = t('Skip !step_label', array(
'!step_label' => $steps[$current_step]['label'],
));
}
if (strlen($settings['form']['button_label']['previous']) == 0 && isset($steps[$current_step - 2])) {
// Use title of previous step as button label.
$settings['form']['button_label']['previous'] = $steps[$current_step - 2]['label'];
}
$button_labels = array_merge($buttons_labels_default, $settings['form']['button_label']);
$button_labels['skip'] = $type_settings['button_label_skip'];
$buttons = array();
// Add buttons based on current step and number of steps.
if ($current_step > 1) {
// There is at least one previous step.
$buttons[] = 'previous';
}
if ($current_step < count($steps)) {
// There is at least one more step.
$buttons[] = 'next';
// Is the next step optional (no required fields) and not the last step?
if ($type_settings['skip_non_required'] == TRUE && !msnf_step_has_required_fields($form, $steps[$current_step]) && $current_step < count($steps) - 1) {
$buttons[] = 'skip';
}
}
if ($current_step == count($steps)) {
// This is the last step.
$buttons[] = 'done';
}
$weight = 101;
if (!isset($form['buttons'])) {
$form['buttons'] = array();
}
foreach ($buttons as $name) {
$form['buttons'][$name] = array(
'#type' => 'submit',
'#value' => $button_labels[$name],
'#weight' => $weight,
'#name' => $name,
);
$weight++;
}
$form['buttons']['#prefix'] = '<div class="form-buttons">';
$form['buttons']['#suffix'] = '</div>';
// Remove preview button (if there is one).
unset($form['buttons']['preview']);
// Remove original submit button.
unset($form['buttons']['submit']);
}