class AllDocs in Replication 8
Same name and namespace in other branches
- 8.2 src/AllDocs/AllDocs.php \Drupal\replication\AllDocs\AllDocs
Hierarchy
- class \Drupal\replication\AllDocs\AllDocs implements AllDocsInterface uses DependencySerializationTrait
Expanded class hierarchy of AllDocs
1 file declares its use of AllDocs
File
- src/
AllDocs/ AllDocs.php, line 12
Namespace
Drupal\replication\AllDocsView source
class AllDocs implements AllDocsInterface {
use DependencySerializationTrait;
/**
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* @var \Drupal\multiversion\MultiversionManagerInterface
*/
protected $multiversionManager;
/**
* @var \Drupal\multiversion\Entity\WorkspaceInterface
*/
protected $workspace;
/**
* @var \Drupal\multiversion\Entity\Index\EntityIndexInterface
*/
protected $entityIndex;
/**
* @var \Symfony\Component\Serializer\SerializerInterface
*/
protected $serializer;
/**
* @var boolean
*/
protected $includeDocs = FALSE;
/**
* @var int
*/
protected $limit = NULL;
/**
* @var int
*/
protected $skip = 0;
/**
* @var boolean
*/
protected $descending = FALSE;
/**
* @var string
*/
protected $startKey;
/**
* @var string
*/
protected $endKey;
/**
* @var boolean
*/
protected $inclusiveEnd = TRUE;
/**
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* @param \Drupal\multiversion\MultiversionManagerInterface $multiversion_manager
* @param \Drupal\multiversion\Entity\WorkspaceInterface $workspace
* @param \Drupal\multiversion\Entity\Index\EntityIndexInterface
* @param \Symfony\Component\Serializer\SerializerInterface
*/
public function __construct(EntityTypeManagerInterface $entity_type_manager, MultiversionManagerInterface $multiversion_manager, WorkspaceInterface $workspace, EntityIndexInterface $entity_index, SerializerInterface $serializer) {
$this->entityTypeManager = $entity_type_manager;
$this->multiversionManager = $multiversion_manager;
$this->workspace = $workspace;
$this->entityIndex = $entity_index;
$this->serializer = $serializer;
}
/**
* {@inheritdoc}
*/
public function includeDocs($include_docs) {
$this->includeDocs = (bool) $include_docs;
}
/**
* {@inheritdoc}
*/
public function limit($limit) {
$this->limit = $limit;
}
/**
* {@inheritdoc}
*/
public function skip($skip) {
$this->skip = $skip;
}
/**
* {@inheritdoc}
*/
public function descending($descending) {
$this->descending = $descending;
}
/**
* {@inheritdoc}
*/
public function startKey($key) {
$this->startKey = $key;
}
/**
* {@inheritdoc}
*/
public function endKey($key) {
$this->endKey = $key;
}
/**
* {@inheritdoc}
*/
public function inclusiveEnd($inclusive_end) {
$this->inclusiveEnd = $inclusive_end;
}
/**
* {@inheritdoc}
*
* @todo {@link https://www.drupal.org/node/2599900 Move any logic around 'includeDocs' and the serialization format
* into the serializer to better separate concerns.}
*/
public function execute() {
$rows = [];
$entity_types = $this->entityTypeManager
->getDefinitions();
foreach ($entity_types as $entity_type_id => $entity_type) {
if ($this->multiversionManager
->isEnabledEntityType($entity_type) && !$entity_type
->get('local')) {
try {
$query = $this->entityTypeManager
->getStorage($entity_type_id)
->getQuery();
if ($entity_type
->get('workspace') !== FALSE) {
$query
->condition('workspace', $this->workspace
->id());
}
$ids = $query
->execute();
} catch (\Exception $e) {
watchdog_exception('replication', $e);
continue;
}
$keys = [];
foreach ($ids as $id) {
$keys[] = $entity_type_id . ':' . $id;
}
$items = $this->entityIndex
->getMultiple($keys);
foreach ($items as $item) {
if ($item['is_stub'] == TRUE) {
continue;
}
$rows[$item['uuid']] = [
'rev' => $item['rev'],
];
}
if ($this->includeDocs) {
$entities = $this->entityTypeManager
->getStorage($entity_type_id)
->loadMultiple($ids);
foreach ($entities as $entity) {
if ($entity->_rev->is_stub) {
continue;
}
$rows[$entity
->uuid()]['doc'] = $this->serializer
->normalize($entity, 'json');
}
}
}
}
return $rows;
}
}