You are here

public function WebformSubmissionStorage::loadFromToken in Webform 8.5

Same name and namespace in other branches
  1. 6.x src/WebformSubmissionStorage.php \Drupal\webform\WebformSubmissionStorage::loadFromToken()

Load submission using webform (secure) token.

Parameters

string $token: The submission (secure) token.

\Drupal\webform\WebformInterface $webform: The webform that the submission token is associated with.

\Drupal\Core\Entity\EntityInterface|null $source_entity: (optional) A webform submission source entity.

\Drupal\Core\Session\AccountInterface|null $account: (optional) A user account.

Return value

\Drupal\webform\WebformSubmissionInterface|null A webform submission.

Overrides WebformSubmissionStorageInterface::loadFromToken

File

src/WebformSubmissionStorage.php, line 193

Class

WebformSubmissionStorage
Defines the webform submission storage.

Namespace

Drupal\webform

Code

public function loadFromToken($token, WebformInterface $webform, EntityInterface $source_entity = NULL, AccountInterface $account = NULL) {

  // Check token.
  if (!$token) {
    return NULL;
  }

  // Check that (secure) tokens are enabled for the webform.
  if (!$account && !$webform
    ->getSetting('token_update')) {
    return NULL;
  }

  // Attempt to load the submission using the token.
  $properties = [
    'token' => $token,
  ];

  // Add optional source entity to properties.
  if ($source_entity) {
    $properties['entity_type'] = $source_entity
      ->getEntityTypeId();
    $properties['entity_id'] = $source_entity
      ->id();
  }

  // Add optional user account to properties.
  if ($account) {
    $properties['uid'] = $account
      ->id();
  }
  $entities = $this
    ->loadByProperties($properties);
  if (empty($entities)) {
    return NULL;
  }

  /** @var \Drupal\webform\WebformSubmissionInterface $entity */
  $entity = reset($entities);

  // Make sure the submission is associated with the webform.
  if ($entity
    ->getWebform()
    ->id() !== $webform
    ->id()) {
    return NULL;
  }
  return $entity;
}