You are here

public function WebformCompleteSubmissionResource::get in Webform REST 4.x

Same name and namespace in other branches
  1. 8.2 src/Plugin/rest/resource/WebformCompleteSubmissionResource.php \Drupal\webform_rest\Plugin\rest\resource\WebformCompleteSubmissionResource::get()

Retrieve webform fields and submission data.

Parameters

string $webform_id: Webform ID.

string $uuid: Webform Submission UUID.

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/WebformCompleteSubmissionResource.php, line 53

Class

WebformCompleteSubmissionResource
Creates a resource for retrieving webform submission data and fields.

Namespace

Drupal\webform_rest\Plugin\rest\resource

Code

public function get($webform_id, $uuid) {
  if (empty($webform_id) || empty($uuid)) {
    $errors = [
      'error' => [
        'message' => $this
          ->t('Both webform ID and submission UUID are required.'),
      ],
    ];
    return new ModifiedResourceResponse($errors, 400);
  }

  // Get webform submission results from Webform Submission Resource.
  $webform_submission = $this->entityTypeManager
    ->getStorage('webform_submission')
    ->loadByProperties([
    'uuid' => $uuid,
  ]);
  if (empty($webform_submission)) {
    $errors = [
      'error' => [
        'message' => $this
          ->t('Invalid submission UUID.'),
      ],
    ];
    return new ModifiedResourceResponse($errors, 400);
  }
  $webform_submission = reset($webform_submission);
  $submissionData = $webform_submission
    ->getData();

  // Get webform fields/structure from Webform Fields Resource.
  $webformFieldsResource = new WebformFieldsResource($this->configuration, 'webform_rest_fields', $this->pluginDefinition, $this->serializerFormats, $this->logger);
  $fields = $webformFieldsResource
    ->get($webform_id);
  $fieldsData = $fields
    ->getResponseData();

  // Get webform entity.
  $webform = Webform::load($webform_id);

  // Get webform title.
  $title = $webform
    ->label();
  $result = $this
    ->buildResponse($fieldsData, $submissionData);
  return new ModifiedResourceResponse([
    'title' => $title,
    'processed_submission' => $result,
    'webform_submission' => $submissionData,
  ]);
}