You are here

public function MappedObject::pruneRevisions in Salesforce Suite 8.3

Same name and namespace in other branches
  1. 8.4 modules/salesforce_mapping/src/Entity/MappedObject.php \Drupal\salesforce_mapping\Entity\MappedObject::pruneRevisions()
  2. 5.0.x modules/salesforce_mapping/src/Entity/MappedObject.php \Drupal\salesforce_mapping\Entity\MappedObject::pruneRevisions()

Based on the Mapped Object revision limit, delete old revisions.

Return value

$this

Overrides MappedObjectInterface::pruneRevisions

1 call to MappedObject::pruneRevisions()
MappedObject::postSave in modules/salesforce_mapping/src/Entity/MappedObject.php
Acts on a saved entity before the insert or update hook is invoked.

File

modules/salesforce_mapping/src/Entity/MappedObject.php, line 133

Class

MappedObject
Defines a Salesforce Mapped Object entity class.

Namespace

Drupal\salesforce_mapping\Entity

Code

public function pruneRevisions(EntityStorageInterface $storage) {
  $limit = $this
    ->config('salesforce.settings')
    ->get('limit_mapped_object_revisions');
  if ($limit <= 0) {

    // Limit 0 means no limit.
    return;
  }
  $count = $storage
    ->getQuery()
    ->allRevisions()
    ->condition('id', $this
    ->id())
    ->count()
    ->execute();

  // Query for any revision id beyond the limit.
  if ($count <= $limit) {
    return;
  }
  $vids_to_delete = $storage
    ->getQuery()
    ->allRevisions()
    ->condition('id', $this
    ->id())
    ->range($limit, $count)
    ->sort('changed', 'DESC')
    ->execute();
  if (empty($vids_to_delete)) {
    return;
  }
  foreach ($vids_to_delete as $vid => $dummy) {

    /** @var \Drupal\Core\Entity\RevisionableInterface $revision */
    if ($revision = $storage
      ->loadRevision($vid)) {

      // Prevent deletion if this is the default revision.
      if ($revision
        ->isDefaultRevision()) {
        continue;
      }
    }
    $storage
      ->deleteRevision($vid);
  }
  return $this;
}