You are here

public function WebformSubmissionResource::patch in Webform REST 8.3

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

Update submission data.

Parameters

string $webform_id: Webform ID.

string $uuid: Webform Submission UUID.

array $webform_data: Webform field data.

Return value

\Drupal\rest\ModifiedResourceResponse HTTP response object containing webform submission.

Throws

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

File

src/Plugin/rest/resource/WebformSubmissionResource.php, line 120

Class

WebformSubmissionResource
Creates a resource for retrieving webform submission data.

Namespace

Drupal\webform_rest\Plugin\rest\resource

Code

public function patch($webform_id, $uuid, array $webform_data) {
  if (empty($webform_id) || empty($uuid)) {
    $errors = [
      'error' => [
        'message' => 'Both webform ID and submission ID are required.',
      ],
    ];
    return new ModifiedResourceResponse($errors);
  }
  if (empty($webform_data)) {
    $errors = [
      'error' => [
        'message' => 'No data has been submitted.',
      ],
    ];
    return new ModifiedResourceResponse($errors);
  }

  // Load the webform submission.
  $webform_submission = $this->entityTypeManager
    ->getStorage('webform_submission')
    ->loadByProperties([
    'uuid' => $uuid,
  ]);
  if (empty($webform_submission)) {
    $errors = [
      'error' => [
        'message' => 'Invalid submission UUID.',
      ],
    ];
    return new ModifiedResourceResponse($errors);
  }
  $webform_submission = reset($webform_submission);

  // Check for a submission.
  if (!empty($webform_submission)) {
    $submission_webform_id = $webform_submission
      ->get('webform_id')
      ->getString();

    // Check webform_id.
    if ($submission_webform_id == $webform_id) {
      foreach ($webform_data as $field => $value) {
        $webform_submission
          ->setElementData($field, $value);
      }
      $errors = WebformSubmissionForm::validateWebformSubmission($webform_submission);

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

        // Return submission UUID.
        $webform_submission = WebformSubmissionForm::submitWebformSubmission($webform_submission);
      }

      // Return submission UUID.
      return new ModifiedResourceResponse([
        'sid' => $webform_submission
          ->uuid(),
      ]);
    }
  }
  throw new NotFoundHttpException(t("Can't load webform submission."));
}