replication-8.x-1.x-dev/src/RevisionDiff/RevisionDiff.php
src/RevisionDiff/RevisionDiff.php
<?php
namespace Drupal\replication\RevisionDiff;
use Drupal\multiversion\Entity\Index\RevisionIndexInterface;
use Drupal\multiversion\Entity\WorkspaceInterface;
class RevisionDiff implements RevisionDiffInterface {
/**
* @var \Drupal\multiversion\Entity\Index\RevisionIndexInterface
*/
protected $revIndex = [];
/**
* @var string[]
*/
protected $revs;
/**
* @param \Drupal\multiversion\Entity\Index\RevisionIndexInterface $rev_index
* @param \Drupal\multiversion\Entity\WorkspaceInterface $workspace
*/
public function __construct(RevisionIndexInterface $rev_index, WorkspaceInterface $workspace) {
$this->revIndex = $rev_index;
$this->workspaceId = $workspace->id();
}
/**
* {@inheritdoc}
*/
public function setRevisionIds(array $revs) {
$this->revs = $revs;
return $this;
}
/**
* {@inheritdoc}
*/
public function getRevisionIds() {
return $this->revs;
}
/**
* {@inheritdoc}
*
* @todo {@link https://www.drupal.org/node/2344005 Implement the
* possible_ancestors key.}
*/
public function getMissing() {
$missing = [];
foreach ($this->getRevisionIds() as $uuid => $revs) {
$keys = [];
foreach ($revs as $rev) {
$keys[] = "$uuid:$rev";
}
$existing = $this->revIndex->useWorkspace($this->workspaceId)->getMultiple($keys);
foreach ($revs as $rev) {
if (!isset($existing["$uuid:$rev"])) {
$missing[$uuid]['missing'][] = $rev;
}
}
}
return $missing;
}
}
