You are here

protected function Webform::w3_formStateToSubmission in Little helpers 7

Webform3 version of

See also

Webform::formStateToSubmission().

1 call to Webform::w3_formStateToSubmission()
Webform::formStateToSubmission in src/Webform/Webform.php
Create a submission-object from a webform_client_form $form_state.

File

src/Webform/Webform.php, line 147

Class

Webform

Namespace

Drupal\little_helpers\Webform

Code

protected function w3_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']));
  $form_state += [
    'values' => [
      'submitted' => [],
    ],
  ];
  if (!$sid) {

    // Create a new submission object.
    $submission = (object) array(
      'nid' => $node->nid,
      'sid' => NULL,
      'uid' => $form_state['values']['details']['uid'],
      'submitted' => REQUEST_TIME,
      'remote_addr' => ip_address(),
      'is_draft' => $is_draft,
      'data' => webform_submission_data($node, $form_state['values']['submitted']),
    );
  }
  else {

    // To maintain time and user information, load the existing submission.
    $submission = webform_get_submission($node->webform['nid'], $sid);
    $submission->is_draft = $is_draft;

    // 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.
    $new_data = webform_submission_data($node, $form_state['values']['submitted']);
    $submission->data = $new_data + $submission->data;
  }
  return new Submission($this, $submission);
}