View source
<?php
namespace Drupal\webform_rest\Plugin\rest\resource;
use Drupal\webform\Entity\WebformSubmission;
use Drupal\webform\WebformSubmissionForm;
use Drupal\rest\Plugin\ResourceBase;
use Drupal\rest\ModifiedResourceResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\DependencyInjection\ContainerInterface;
class WebformSubmissionResource extends ResourceBase {
protected $entityTypeManager;
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
$instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
$instance->entityTypeManager = $container
->get('entity_type.manager');
return $instance;
}
public function get($webform_id, $uuid) {
if (empty($webform_id) || empty($uuid)) {
$errors = [
'error' => [
'message' => 'Both webform ID and submission UUID are required.',
],
];
return new ModifiedResourceResponse($errors);
}
$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);
if (!empty($webform_submission)) {
$submission_webform_id = $webform_submission
->get('webform_id')
->getString();
if ($submission_webform_id == $webform_id) {
$data = $webform_submission
->getData();
$response = [
'entity' => $webform_submission,
'data' => $data,
];
return new ModifiedResourceResponse($response);
}
}
throw new NotFoundHttpException(t("Can't load webform submission."));
}
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);
}
$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);
if (!empty($webform_submission)) {
$submission_webform_id = $webform_submission
->get('webform_id')
->getString();
if ($submission_webform_id == $webform_id) {
foreach ($webform_data as $field => $value) {
$webform_submission
->setElementData($field, $value);
}
$errors = WebformSubmissionForm::validateWebformSubmission($webform_submission);
if (!empty($errors)) {
$errors = [
'error' => $errors,
];
return new ModifiedResourceResponse($errors);
}
else {
$webform_submission = WebformSubmissionForm::submitWebformSubmission($webform_submission);
}
return new ModifiedResourceResponse([
'sid' => $webform_submission
->uuid(),
]);
}
}
throw new NotFoundHttpException(t("Can't load webform submission."));
}
}