You are here

function flexiform_multistep_step_form_submit in Flexiform 7

Form submission handler for flexiform_multistep_step_form().

File

flexiform_multistep/flexiform_multistep.pages.inc, line 319
Page callbacks for Flexiform Multistep.

Code

function flexiform_multistep_step_form_submit(&$form, &$form_state) {

  /** @var Flexiform $flexiform */
  $flexiform = $form['#flexiform'];

  /** @var FlexiformBuilderInterface $builder */
  $builder = $form['#flexiform_builder'];
  $form_settings = isset($flexiform->settings['flexiform_multistep']) ? $flexiform->settings['flexiform_multistep'] : array();
  $step_settings = isset($form_state['step_group']->format_settings['instance_settings']) ? $form_state['step_group']->format_settings['instance_settings'] : array();

  // Tweak our flexiform state so we can skip saving particular items.
  $flexiform_state =& $builder
    ->getFlexiformState($form, $form_state);
  $entity_manager = $builder
    ->getEntityManager($flexiform_state);
  $entities = array_keys($flexiform->entities);
  $save_entities = array();

  // If we are using the default and we're not saving on each step we can take a
  // simple approach.
  if (empty($step_settings['save_entities']) && empty($form_settings['save_entities'])) {

    // Save everything on the last step, nothing otherwise.
    if (!empty($form_state['last_step'])) {
      $save_entities = $entities;
    }
  }
  elseif ($step_settings['save_entities'] == 'c') {
    $save_entities = array_filter($step_settings['save_entities_custom']);
  }
  elseif ($step_settings['save_entities'] != 'n') {
    foreach (element_children($form) as $element) {
      if (!empty($form[$element]['#flexiform_element'])) {
        $namespace = $form[$element]['#flexiform_element']
          ->getEntityNamespace();
        $save_entities[$namespace] = $namespace;
      }
    }
  }

  // If not saving everything, remove items we don't want.
  foreach (array_diff($entities, $save_entities) as $namespace) {
    $entity_manager
      ->skipOnSave($namespace, TRUE);
  }
  $builder
    ->formSubmit($form, $form_state);
  $object = $form_state['object'];
  $object['flexiform_state'] = $form_state['flexiform_state'];
  $object['base_entity'] = $form['#flexiform_base_entity'];
  ctools_object_cache_set('flexiform_multistep', $form_state['object_id'], $object);
}