You are here

class SubmissionsCompletedSinceLastSuccess in Webform Scheduled Tasks 8.2

Get all submissions completed since the last successful run of the task.

Plugin annotation


@WebformScheduledResultSet(
  id = "submissions_completed_since_last_success",
  label = @Translation("Submissions completed since last success"),
)

Hierarchy

Expanded class hierarchy of SubmissionsCompletedSinceLastSuccess

File

src/Plugin/WebformScheduledTasks/ResultSet/SubmissionsCompletedSinceLastSuccess.php, line 20

Namespace

Drupal\webform_scheduled_tasks\Plugin\WebformScheduledTasks\ResultSet
View source
class SubmissionsCompletedSinceLastSuccess extends ResultSetPluginBase {

  /**
   * The state service.
   *
   * @var \Drupal\Core\State\StateInterface
   */
  protected $state;

  /**
   * The time interface.
   *
   * @var \Drupal\Component\Datetime\TimeInterface
   */
  protected $time;

  /**
   * Key used for accessing status information from state.
   */
  const STATE_KEY = 'webform_scheduled_tasks.submissions_completed_since_last_success';

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static($configuration, $plugin_id, $plugin_definition, $container
      ->get('entity_type.manager')
      ->getStorage('webform_submission')
      ->getQuery(), $container
      ->get('state'), $container
      ->get('datetime.time'));
  }

  /**
   * TaskPluginBase constructor.
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, QueryInterface $submissionQuery, StateInterface $state, TimeInterface $time) {
    parent::__construct($configuration, $plugin_id, $plugin_definition, $submissionQuery);
    $this->state = $state;
    $this->time = $time;
  }

  /**
   * {@inheritdoc}
   */
  public function getResultSet() {
    $this
      ->initializeQueryDefaults();

    // If we have a value for a previously successful run of this scheduled task
    // filter results that were completed after the last.
    $success_map = $this->state
      ->get(static::STATE_KEY, []);
    if (isset($success_map[$this
      ->getScheduledTask()
      ->id()])) {

      // Find all submissions that were completed on or after the request time
      // of last successful task run.
      $this->submissionQuery
        ->condition('completed', $success_map[$this
        ->getScheduledTask()
        ->id()], '>=');

      // Restrict the set of submissions to those created before this request
      // started. If they were made between the start of the request and time
      // taken to execute the query, they will be included in the next scheduled
      // run due to the >= condition above.
      $this->submissionQuery
        ->condition('completed', $this->time
        ->getRequestTime(), '<');
    }
    return WebformIteratorAggregate::createFromQuery($this->submissionQuery)
      ->getIterator();
  }

  /**
   * {@inheritdoc}
   */
  public function onSuccess() {

    // If the whole scheduled task was successful, store the time when the
    // latest submission was made, so we can query.
    $success_map = $this->state
      ->get(static::STATE_KEY, []);
    $success_map[$this
      ->getScheduledTask()
      ->id()] = $this->time
      ->getRequestTime();
    $this->state
      ->set(static::STATE_KEY, $success_map);
  }

  /**
   * {@inheritdoc}
   */
  protected function getSummary() {
    return $this
      ->t('All submissions since the last successful run of this task will be included.');
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
ResultSetPluginBase::$scheduledTask protected property The scheduled task this task is attached to.
ResultSetPluginBase::$submissionQuery protected property A query object for submissions.
ResultSetPluginBase::buildConfigurationForm public function Form constructor. Overrides PluginFormInterface::buildConfigurationForm
ResultSetPluginBase::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides DependentPluginInterface::calculateDependencies
ResultSetPluginBase::defaultConfiguration public function Gets default configuration for this plugin. Overrides ConfigurableInterface::defaultConfiguration
ResultSetPluginBase::getConfiguration public function Gets this plugin's configuration. Overrides ConfigurableInterface::getConfiguration
ResultSetPluginBase::getScheduledTask public function Get the scheduled task. Overrides ScheduledTaskAwarePluginInterface::getScheduledTask
ResultSetPluginBase::initializeQueryDefaults protected function Initialize options likely to be common to most result sets.
ResultSetPluginBase::label public function Get the label of the result plugin. Overrides ResultSetPluginInterface::label
ResultSetPluginBase::onFailure public function Called when a task fails. Overrides ScheduledTaskNotifyInterface::onFailure 1
ResultSetPluginBase::setConfiguration public function Sets the configuration for this plugin instance. Overrides ConfigurableInterface::setConfiguration
ResultSetPluginBase::setScheduledTask public function Set the scheduled task as context for this plugin. Overrides ScheduledTaskAwarePluginInterface::setScheduledTask
ResultSetPluginBase::submitConfigurationForm public function Form submission handler. Overrides PluginFormInterface::submitConfigurationForm
ResultSetPluginBase::validateConfigurationForm public function Form validation handler. Overrides PluginFormInterface::validateConfigurationForm
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
SubmissionsCompletedSinceLastSuccess::$state protected property The state service.
SubmissionsCompletedSinceLastSuccess::$time protected property The time interface.
SubmissionsCompletedSinceLastSuccess::create public static function Creates an instance of the plugin. Overrides ResultSetPluginBase::create
SubmissionsCompletedSinceLastSuccess::getResultSet public function Get an iterator for a set of results matching the conditions of the plugin. Overrides ResultSetPluginInterface::getResultSet
SubmissionsCompletedSinceLastSuccess::getSummary protected function Get an optional summary for the plugin rendered in the settings form. Overrides ResultSetPluginBase::getSummary
SubmissionsCompletedSinceLastSuccess::onSuccess public function Called when a task is successful. Overrides ResultSetPluginBase::onSuccess
SubmissionsCompletedSinceLastSuccess::STATE_KEY constant Key used for accessing status information from state.
SubmissionsCompletedSinceLastSuccess::__construct public function TaskPluginBase constructor. Overrides ResultSetPluginBase::__construct