You are here

class LatestRevisionUpdateRunner in Scheduled Updates 8

The Latest Revision Update Runner.

@todo Is spliting the description onto multiple lines a good idea? It works but is ugly.

Plugin annotation


@UpdateRunner(
  id = "latest_revision",
  label = @Translation("Latest Revision"),
  update_types = {"embedded"},
  description = @Translation("Runs updates always against the latest revision of revisionable entities content.")
)

Hierarchy

Expanded class hierarchy of LatestRevisionUpdateRunner

File

src/Plugin/UpdateRunner/LatestRevisionUpdateRunner.php, line 27
Contains \Drupal\scheduled_updates\Plugin\UpdateRunner\LatestRevisionUpdateRunner

Namespace

Drupal\scheduled_updates\Plugin\UpdateRunner
View source
class LatestRevisionUpdateRunner extends EmbeddedUpdateRunner {

  /*
   * Runs updates always against the latest revision of revisionable entities content.
   *
   */

  /**
   * {@inheritdoc}
   *
   * This method is overridden because the version in BaseUpdateRunner only needs
   * to get default revisions so does not call $query->allRevisions().
   *
   * $query->condition("$field_id.entity.update_timestamp", $all_ready_update_ids, 'IN');
   *
   */
  protected function getEntityIdsReferencingReadyUpdates() {
    $entity_ids = [];
    if ($field_ids = $this
      ->getReferencingFieldIds()) {
      $entity_storage = $this->entityTypeManager
        ->getStorage($this
        ->updateEntityType());
      $all_ready_update_ids = $this
        ->getReadyUpdateIds();
      if ($all_ready_update_ids) {
        foreach ($field_ids as $field_id) {
          $query = $entity_storage
            ->getQuery('AND');
          $query
            ->condition("{$field_id}.target_id", $all_ready_update_ids, 'IN');
          $query
            ->allRevisions();
          $entity_ids += $query
            ->execute();
        }
      }
    }
    return $entity_ids;
  }

  /**
   * {@inheritdoc}
   */
  protected function loadEntitiesToUpdate($entity_ids) {
    $revision_ids = array_keys($entity_ids);
    $entity_ids = array_unique($entity_ids);
    $revisions = [];
    foreach ($entity_ids as $entity_id) {

      /** @var ContentEntityInterface $latest_revision */
      $latest_revision = $this->updateUtils
        ->getLatestRevision($this
        ->updateEntityType(), $entity_id);

      // Check the latest revision was in the revisions sent to this function.
      if (in_array($latest_revision
        ->getRevisionId(), $revision_ids)) {
        $revisions[$entity_id] = $latest_revision;
      }
    }
    return $revisions;
  }

  /**
   * {@inheritdoc}
   */
  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
    parent::validateConfigurationForm($form, $form_state);

    /** @var ScheduledUpdateTypeInterface $scheduled_update_type */
    $scheduled_update_type = $form_state
      ->get('scheduled_update_type');

    // Check if entity type to be updated supports revisions.
    if (!$this->updateUtils
      ->supportsRevisionUpdates($scheduled_update_type)) {

      // @todo Check if any bundles in update entity type is moderated
      $form_state
        ->setError($form['update_entity_type'], $this
        ->t('The latest revision runner cannot be used with an entity type that does not support revisions.'));
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getDescription() {
    return $this
      ->t('Runs updates always against the latest revision of revisionable entities content.') . ' ' . t('This is useful for modules that allow forward revisioning such as Workbench Moderation.') . ' ' . t('This Update Runner can only be used with revisionable entity types.');
  }

}

Members

Namesort descending Modifiers Type Description Overrides
BaseUpdateRunner::$accountSwitcher protected property
BaseUpdateRunner::$entityTypeManager protected property @var \Drupal\Core\Entity\EntityTypeManagerInterface
BaseUpdateRunner::$fieldManager protected property @var \Drupal\Core\Entity\EntityFieldManagerInterface
BaseUpdateRunner::$field_ids protected property The entity reference field ids target connected update types.
BaseUpdateRunner::$isRunByCron protected property If the runner is currently run by cron.
BaseUpdateRunner::$isUserSwitched protected property If the runner is currently switched to a different user.
BaseUpdateRunner::$items_to_release protected property Queue items that will be released after updates in queue are run.
BaseUpdateRunner::$scheduled_update_type protected property @var \Drupal\scheduled_updates\entity\ScheduledUpdateType
BaseUpdateRunner::$updateUtils protected property
BaseUpdateRunner::addActiveUpdateConditions protected function Add conditions to a query to select updates to run.
BaseUpdateRunner::addItemToRelease protected function
BaseUpdateRunner::addUpdatesToQueue public function Add all updates to queue. Overrides UpdateRunnerInterface::addUpdatesToQueue
BaseUpdateRunner::buildConfigurationForm public function Form constructor. Overrides PluginFormInterface::buildConfigurationForm 1
BaseUpdateRunner::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
BaseUpdateRunner::displayMessage protected function Display message about updates.
BaseUpdateRunner::getAfterRun public function Get After Run behavior configuration.
BaseUpdateRunner::getEntityReferenceTargetIds public function Get target entity ids for an entity reference field on a entity. Overrides UpdateRunnerInterface::getEntityReferenceTargetIds
BaseUpdateRunner::getInvalidUpdateBehavior public function Get how this runner should handle invalid entity updates. Overrides UpdateRunnerInterface::getInvalidUpdateBehavior
BaseUpdateRunner::getQueue public function Get the Queue for this Update Runner. Overrides UpdateRunnerInterface::getQueue
BaseUpdateRunner::getReadyUpdateIds protected function Get updates that are ready to be run for this Runner.
BaseUpdateRunner::getReferencingFieldIds public function Get all field ids that are attached to the entity type to be updated and target this update type. Overrides UpdateRunnerInterface::getReferencingFieldIds
BaseUpdateRunner::getUpdateType protected function Get Scheduled Update Type from the Form State.
BaseUpdateRunner::isRunByCron public function @inheritdoc Overrides UpdateRunnerInterface::isRunByCron
BaseUpdateRunner::prepareEntityForUpdate protected function Prepare an entity to be updated.
BaseUpdateRunner::releaseClaimedItems protected function
BaseUpdateRunner::removeUpdate protected function Remove update from reference field value.
BaseUpdateRunner::runUpdate protected function Run an individual update from the queue.
BaseUpdateRunner::runUpdatesInQueue public function Run all updates that are in the queue. Overrides UpdateRunnerInterface::runUpdatesInQueue
BaseUpdateRunner::setEntityRevision protected function Set a entity to use a new revision is applicable.
BaseUpdateRunner::setRunByCron public function @inheritdoc Overrides UpdateRunnerInterface::setRunByCron
BaseUpdateRunner::submitConfigurationForm public function Form submission handler. Overrides PluginFormInterface::submitConfigurationForm
BaseUpdateRunner::switchUser protected function Switch to another user to run an update if necessary.
BaseUpdateRunner::switchUserBack protected function If the user has been switch to run an update switch the user back.
BaseUpdateRunner::transferFieldValues protected function Transfer field values from update to entity to be updated.
BaseUpdateRunner::updateEntityType public function Return the entity id of the entity type being updated. Overrides UpdateRunnerInterface::updateEntityType
BaseUpdateRunner::__construct public function BaseUpdateRunner constructor. Overrides PluginBase::__construct
ClassUtilsTrait::bundleLabel protected function
ClassUtilsTrait::definitionClassImplementsInterface protected function Determines if the class for an entity type definition implements and interface.
ClassUtilsTrait::entityLabel protected function
ClassUtilsTrait::entityTypeManager protected function
ClassUtilsTrait::getEntityOwner protected function Get the entity owner if applicable.
ClassUtilsTrait::getRevisionOwner protected function Get the revision owner for an ContentEntity.
ClassUtilsTrait::implementsInterface protected function Determines if an object or class name implements any interfaces in a list.
ClassUtilsTrait::revisionOwnerInterfaces protected function Get class names of interfaces that support revision ownership.
ClassUtilsTrait::targetSupportBundles protected function
ClassUtilsTrait::targetTypeBundleLabel protected function
ClassUtilsTrait::targetTypeLabel public function
ClassUtilsTrait::typeSupportsBundles protected function
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
EmbeddedUpdateRunner::deactivateUpdates protected function Deactivate any Scheduled Updates that are previous revision but not on current.
EmbeddedUpdateRunner::getAllUpdates protected function Get all schedule updates for this types that should be added to queue. Overrides BaseUpdateRunner::getAllUpdates
EmbeddedUpdateRunner::getEmbeddedUpdates protected function Return all schedule updates that are referenced via Entity Reference fields.
EmbeddedUpdateRunner::getPreviousRevisionsWithUpdates protected function Get all previous revisions that have updates of the attached type.
EmbeddedUpdateRunner::getUpdateIdsOnEntity protected function Get all update ids for this connected Update type.
EmbeddedUpdateRunner::onEntityUpdate public function Fires when entity of type to be updated is changed. Overrides EntityMonitorUpdateRunnerInterface::onEntityUpdate
EmbeddedUpdateRunner::reactivateUpdates protected function Reactive any updates that are on this entity that have been deactived previously.
LatestRevisionUpdateRunner::getDescription public function Get the description of the Runner Plugin. Overrides BaseUpdateRunner::getDescription
LatestRevisionUpdateRunner::getEntityIdsReferencingReadyUpdates protected function This method is overridden because the version in BaseUpdateRunner only needs to get default revisions so does not call $query->allRevisions(). Overrides BaseUpdateRunner::getEntityIdsReferencingReadyUpdates
LatestRevisionUpdateRunner::loadEntitiesToUpdate protected function Load multi entities to update. Overrides BaseUpdateRunner::loadEntitiesToUpdate
LatestRevisionUpdateRunner::validateConfigurationForm public function Form validation handler. Overrides BaseUpdateRunner::validateConfigurationForm
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.
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.
UpdateRunnerInterface::AFTER_ARCHIVE constant
UpdateRunnerInterface::AFTER_DELETE constant
UpdateRunnerInterface::INVALID_ARCHIVE constant
UpdateRunnerInterface::INVALID_DELETE constant
UpdateRunnerInterface::INVALID_REQUEUE constant
UpdateRunnerInterface::REVISIONS_BUNDLE_DEFAULT constant
UpdateRunnerInterface::REVISIONS_NO constant
UpdateRunnerInterface::REVISIONS_YES constant
UpdateRunnerInterface::USER_OWNER constant
UpdateRunnerInterface::USER_REVISION_OWNER constant
UpdateRunnerInterface::USER_UPDATE_OWNER constant
UpdateRunnerInterface::USER_UPDATE_RUNNER constant