You are here

function _webform_token_get_interval_wait in Webform 6.x

Same name and namespace in other branches
  1. 8.5 webform.tokens.inc \_webform_token_get_interval_wait()

Get interval wait time.

Parameters

string $interval_setting: Interval setting name.

\Drupal\Core\Render\BubbleableMetadata $bubbleable_metadata: (optional) Object to collect path processors' bubbleable metadata.

\Drupal\webform\WebformInterface|null $webform: (optional) A webform. If set the total number of submissions for the Webform will be returned.

\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

string Formatted interval wait time.

1 call to _webform_token_get_interval_wait()
webform_tokens in ./webform.tokens.inc
Implements hook_tokens().

File

./webform.tokens.inc, line 1145
Builds placeholder replacement tokens for webforms and submissions.

Code

function _webform_token_get_interval_wait($interval_setting, BubbleableMetadata $bubbleable_metadata, WebformInterface $webform = NULL, EntityInterface $source_entity = NULL, AccountInterface $account = NULL) {

  // Get last submission completed time.

  /** @var \Drupal\webform\WebformSubmissionStorageInterface $submission_storage */
  $submission_storage = \Drupal::entityTypeManager()
    ->getStorage('webform_submission');
  $options = [
    'access_check' => FALSE,
  ];
  $last_submission = $submission_storage
    ->getLastSubmission($webform, $source_entity, $account, $options);
  if (!$last_submission) {
    return '';
  }
  $completed_time = $last_submission
    ->getCompletedTime();

  // Get interval.
  $interval = $webform
    ->getSetting($interval_setting);

  // Get wait time.
  $wait_time = $completed_time + $interval;

  // Get request time.
  $request_time = \Drupal::request()->server
    ->get('REQUEST_TIME');

  // Set cache max age.
  $max_age = $wait_time - $request_time;
  $bubbleable_metadata
    ->setCacheMaxAge($max_age > 0 ? $max_age : 0);

  // Format time diff until next allows submission.

  /** @var \Drupal\Core\Datetime\DateFormatterInterface $date_formatter */
  $date_formatter = \Drupal::service('date.formatter');
  return $date_formatter
    ->formatTimeDiffUntil($wait_time);
}