/** * Setup processors on the connected form * * @since 0.2.0 * * @uses "caldera_forms_submit_get_form" * * @param array $form The form configuration * * @return array|null */ function cf_form_connector_setup_processors($form) { if (empty($form['is_connected_form'])) { return $form; } // fetch the connected stage form $base_form = Caldera_Forms_Forms::get_form(cf_form_connector_get_base_form($form)); if (!empty($_POST['cffld_stage'])) { $current_form = Caldera_Forms_Sanitize::sanitize($_POST['cffld_stage']); // check this is part of the flow if (false === cf_form_connector_verify_id($form, $current_form)) { // erp.. hmm set the base $current_form = $base_form['ID']; } } else { $current_form = $base_form['ID']; } $stage = $form; // set the primary ( staging form ) // get the process record $process_record = cf_form_connector_get_current_position(); // get this form to be run $form = Caldera_Forms_Forms::get_form($current_form); // check to see if its a back track if (!empty($_POST['cffld_backnav']) && !empty($process_record[$stage['ID']])) { if ($current_form === $process_record[$stage['ID']]['current_form']) { // prepare state jump $previous_form = $process_record[$stage['ID']]['previous_form']; // create backtrack record if (!empty($process_record[$stage['ID']][$previous_form]['back'])) { $previous_back_form = $process_record[$stage['ID']][$previous_form]['back']; $process_record[$stage['ID']]['previous_form'] = $previous_back_form; } else { unset($process_record[$stage['ID']]['previous_form']); } $process_record[$stage['ID']]['current_form'] = $previous_form; // capture this without saving on a back as not to do processing if (!empty($form['fields'])) { if (empty($process_record[$stage['ID']][$current_form])) { $process_record[$stage['ID']][$current_form] = array(); } foreach ($form['fields'] as $field_id => $field) { if (!empty($_POST[$field_id])) { $process_record[$stage['ID']][$current_form]['pre_data'][$field_id] = $_POST[$field_id]; } } } cf_form_connector_set_current_position($process_record); // check for ajax if (!empty($stage['form_ajax'])) { wp_send_json(array('target' => $stage['ID'] . '_' . (int) $_POST['_cf_frm_ct'], 'form' => Caldera_Forms::render_form($stage))); } } } $form['stage_form'] = $stage['ID']; if (empty($process_record[$stage['ID']])) { // first form - make the ID if not an edit; if (empty($_POST['_cf_frm_edt'])) { global $wpdb; // CREATE ENTRY $new_entry = array('form_id' => $stage['ID'], 'user_id' => 0, 'datestamp' => date_i18n('Y-m-d H:i:s', time(), 0), 'status' => 'pending'); // if user logged in if (is_user_logged_in()) { $new_entry['user_id'] = get_current_user_id(); } $wpdb->insert($wpdb->prefix . 'cf_form_entries', $new_entry); $entryid = $wpdb->insert_id; $process_record = array(); $process_record[$stage['ID']] = array('entry_id' => $entryid, 'fields' => array(), 'field_values' => array(), 'completed' => false, 'current_form' => $form['ID']); cf_form_connector_set_current_position($process_record); } } // disable mailer $form['mailer']['enable_mailer'] = false; $form['mailer']['on_insert'] = false; // setup each connection condition $final_form_fields = array(); foreach ($stage['condition_points']['conditions'] as $condition_point => $condition) { // ye, lets only use the conditions for this form if ($condition['form'] != $form['ID']) { continue; } // check its there if (empty($stage['node'][$condition['connect']])) { continue; } // create a processor IF $processor_id = 'cfp_' . $stage['ID'] . '_' . $condition_point; $hasBack = false; if (!empty($condition['back'])) { $hasBack = true; } $form['processors'][$processor_id] = array('ID' => $processor_id, 'type' => 'form-connector', 'config' => array('next_form_id' => $stage['node'][$condition['connect']]['form'], 'back_button' => $hasBack), 'runtimes' => array('insert' => true), 'conditions' => array()); if (!empty($condition['group'])) { $form['processors'][$processor_id]['conditions'] = array('type' => 'use', 'group' => $condition['group']); } $has_condition_points = true; } if (empty($has_condition_points) && $process_record[$stage['ID']]['current_form'] == $stage['ID']) { // last in process! $form = $stage; $form['stage_form'] = $stage['ID']; // setup field values global $processed_data; $processed_data[$stage['ID']] = $process_record[$stage['ID']]['field_values']; $form['fields'] = $process_record[$stage['ID']]['fields']; unset($process_record[$stage['ID']]['fields']); unset($process_record[$stage['ID']]['field_values']); unset($process_record[$stage['ID']]['completed']); unset($process_record[$stage['ID']]['current_form']); unset($process_record[$stage['ID']]['previous_form']); unset($process_record[$stage['ID']]['entry_id']); foreach ($process_record[$stage['ID']] as $form_id => $data) { Caldera_Forms::set_submission_meta('form', array($form_id => $data['id']), $form, '_connected_form'); } $process_record[$form['stage_form']] = array(); cf_form_connector_set_current_position($process_record); } return $form; }