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