You are here

public function WebformSubmitResource::post in Webform REST 8.3

Same name and namespace in other branches
  1. 8 src/Plugin/rest/resource/WebformSubmitResource.php \Drupal\webform_rest\Plugin\rest\resource\WebformSubmitResource::post()
  2. 8.2 src/Plugin/rest/resource/WebformSubmitResource.php \Drupal\webform_rest\Plugin\rest\resource\WebformSubmitResource::post()
  3. 4.x src/Plugin/rest/resource/WebformSubmitResource.php \Drupal\webform_rest\Plugin\rest\resource\WebformSubmitResource::post()

Responds to entity POST requests and saves the new entity.

Parameters

array $webform_data: Webform field data and webform ID.

Return value

\Drupal\rest\ResourceResponse The HTTP response object.

Throws

\Symfony\Component\HttpKernel\Exception\HttpException Throws HttpException in case of error.

File

src/Plugin/rest/resource/WebformSubmitResource.php, line 38

Class

WebformSubmitResource
Creates a resource for submitting a webform.

Namespace

Drupal\webform_rest\Plugin\rest\resource

Code

public function post(array $webform_data) {

  // Basic check for webform ID.
  if (empty($webform_data['webform_id'])) {
    $errors = [
      'error' => [
        'message' => 'Missing required webform_id value.',
      ],
    ];
    return new ModifiedResourceResponse($errors, 400);
  }

  // Convert to webform values format.
  $values = [
    'webform_id' => $webform_data['webform_id'],
    'entity_type' => NULL,
    'entity_id' => NULL,
    'in_draft' => FALSE,
    'uri' => '/webform/' . $webform_data['webform_id'] . '/api',
  ];
  $values['data'] = $webform_data;

  // Don't submit webform ID.
  unset($values['data']['webform_id']);

  // Check for a valid webform.
  $webform = Webform::load($values['webform_id']);
  if (!$webform) {
    $errors = [
      'error' => [
        'message' => 'Invalid webform_id value.',
      ],
    ];
    return new ModifiedResourceResponse($errors, 400);
  }

  // Check webform is open.
  $is_open = WebformSubmissionForm::isOpen($webform);
  if ($is_open === TRUE) {

    // Validate submission.
    $errors = WebformSubmissionForm::validateFormValues($values);

    // Check there are no validation errors.
    if (!empty($errors)) {
      return new ModifiedResourceResponse([
        'message' => 'Submitted Data contains validation errors.',
        'error' => $errors,
      ], 400);
    }
    else {

      // Return submission ID.
      $webform_submission = WebformSubmissionForm::submitFormValues($values);
      return new ModifiedResourceResponse([
        'sid' => $webform_submission
          ->uuid(),
      ]);
    }
  }
  else {
    $errors = [
      'error' => [
        'message' => 'This webform is closed, or too many submissions have been made.',
      ],
    ];
    return new ModifiedResourceResponse($errors, 400);
  }
}