<?php declare(strict_types=1);
namespace Uandi\UandiEfbDownloadCenter\MediaListing;
use Shopware\Core\Content\Media\MediaDefinition;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
class MediaListingLoader
{
protected EntityRepositoryInterface $repository;
public function __construct(
EntityRepositoryInterface $repository
) {
$this->repository = $repository;
}
public function load(array $mediaFolderIds, Criteria $criteria, SalesChannelContext $context): MediaListingResult
{
if (empty($mediaFolderIds)) {
return MediaListingResult::createEmpty($criteria, $context->getContext());
}
$criteria->addFilter(new EqualsAnyFilter('mediaFolderId', $mediaFolderIds));
$ids = $this->repository->searchIds($criteria, $context->getContext());
if (empty($ids->getIds())) {
return MediaListingResult::createEmpty($criteria, $context->getContext());
}
$aggregations = $this->repository->aggregate($criteria, $context->getContext());
$read = $criteria->cloneForRead($ids->getIds());
$entities = $this->repository->search($read, $context->getContext());
$result = new MediaListingResult(MediaDefinition::ENTITY_NAME, $ids->getTotal(), $entities->getEntities(), $aggregations, $criteria, $context->getContext());
$result->addState(...$ids->getStates());
$result->addState(...$entities->getStates());
return $result;
}
}