/**
* Prepare an api entity.
*
* @param CollectionInterface $entity
* @param string $locale
* @param CollectionEntity[] $entities nested set
* @param array $breadcrumbEntities
*
* @return Collection
*/
protected function getApiEntity(CollectionInterface $entity, $locale, $entities = null, $breadcrumbEntities = null)
{
$apiEntity = new Collection($entity, $locale);
$children = [];
if ($entities !== null) {
foreach ($entities as $possibleChild) {
if (($parent = $possibleChild->getParent()) !== null && $parent->getId() === $entity->getId()) {
$children[] = $this->getApiEntity($possibleChild, $locale, $entities);
}
}
}
$apiEntity->setChildren($children);
if ($entity->getParent() !== null) {
$apiEntity->setParent($this->getApiEntity($entity->getParent(), $locale));
}
if ($breadcrumbEntities !== null) {
$breadcrumbApiEntities = [];
foreach ($breadcrumbEntities as $entity) {
$breadcrumbApiEntities[] = $this->getApiEntity($entity, $locale);
}
$apiEntity->setBreadcrumb($breadcrumbApiEntities);
}
if ($entity && $entity->getId()) {
$apiEntity->setMediaCount($this->collectionRepository->countMedia($entity));
$apiEntity->setSubCollectionCount($this->collectionRepository->countSubCollections($entity));
}
return $this->addPreview($apiEntity);
}