public function Webform::formStateToSubmission in Little helpers 7.2
Same name and namespace in other branches
- 7 src/Webform/Webform.php \Drupal\little_helpers\Webform\Webform::formStateToSubmission()
Create a submission-object from a webform_client_form $form_state.
This is basically a copy & paste from webform_client_form_submit().
File
- src/
Webform/ Webform.php, line 127
Class
Namespace
Drupal\little_helpers\WebformCode
public function formStateToSubmission(&$form_state) {
$node = $this->node;
$form_state += [
'values' => [
'submitted' => [],
'details' => [
'sid' => NULL,
'uid' => $GLOBALS['user']->uid,
],
],
];
$sid = $form_state['values']['details']['sid'] ? (int) $form_state['values']['details']['sid'] : NULL;
// Check if user is submitting as a draft.
$is_draft = (int) (!empty($form_state['save_draft']));
// To maintain time and user information, load the existing submission.
// If a draft is deleted while a user is working on completing it, $sid will
// exist, but webform_get_submission() will not find the draft. So, make a new
// submission.
if ($sid && ($submission = webform_get_submission($node->webform['nid'], $sid))) {
// Store original data on object for use in update hook.
$submission->original = clone $submission;
// Merge with new submission data. The + operator maintains numeric keys.
// This maintains existing data with just-submitted data when a user resumes
// a submission previously saved as a draft.
// Remove any existing data on this and previous pages. If components are hidden, they may
// be in the $submission->data but absent entirely from $new_data.
$page_map = webform_get_conditional_sorter($node)
->getPageMap();
for ($page_nr = 1; $page_nr <= $form_state['webform']['page_num']; $page_nr++) {
$submission->data = array_diff_key($submission->data, $page_map[$page_nr]);
}
$submission->data = webform_submission_data($node, $form_state['values']['submitted']) + $submission->data;
}
else {
// Create a new submission object.
$submission = webform_submission_create($node, $GLOBALS['user'], $form_state);
// Since this is a new submission, a new sid is needed.
$sid = NULL;
}
// Save draft state, and for drafts, save the current page (if clicking next)
// or the previous page (if not) as the last valid page.
$submission->is_draft = $is_draft;
$submission->highest_valid_page = 0;
if ($is_draft) {
$submission->highest_valid_page = end($form_state['clicked_button']['#parents']) == 'next' && $form_state['values']['op'] != '__AUTOSAVE__' ? $form_state['webform']['page_num'] : $form_state['webform']['page_num'] - 1;
}
return new Submission($this, $submission);
}