You are here

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']);
}