vendor/elements/demi-bundle/src/Elements/Demi/Infrastructure/Search/Listing.php line 127

Open in your IDE?
  1. <?php
  2. /**
  3.  * Elements DeMI
  4.  *
  5.  * This source file is available under the elements DeMI license version 1
  6.  *
  7.  *  @copyright  Copyright (c) elements.at New Media Solutions GmbH (https://www.elements.at/)
  8.  *  @license    elements DeMI Lizenz Version 1 (https://www.elements.at/de/demi-lizenz)
  9.  */
  10. namespace Elements\Demi\Infrastructure\Search;
  11. use Elements\Demi\Deskline\Exception;
  12. use Elements\Demi\Deskline\Service\Search;
  13. use Iterator;
  14. use Pimcore\Model\Paginator\PaginateListingInterface;
  15. class Listing implements IteratorPaginateListingInterface
  16. {
  17.     protected ?Parameter $parameter null;
  18.     protected mixed $randomSeed null;
  19.     protected ?string $locale null;
  20.     protected array $objects = [];
  21.     protected int $count 0;
  22.     public function __construct(protected Search $adapter, protected int $page 1, protected int $pageSize 10)
  23.     {
  24.     }
  25.     public function getParameter(): Parameter
  26.     {
  27.         if (empty($this->parameter)) {
  28.             throw new Exception('parameter missing');
  29.         }
  30.         return $this->parameter;
  31.     }
  32.     public function setParameter(Parameter $parameter): void
  33.     {
  34.         if (!$parameter->getCustomOrderKey() && !$parameter->getOrderConst()) {
  35.             $parameter->setOrderConst(Parameter::ORDER_BY_NAME_ASC);
  36.         }
  37.         $this->parameter $parameter;
  38.     }
  39.     public function count(): int
  40.     {
  41.         if (!$this->objects) {
  42.             $this->load();
  43.         }
  44.         return $this->count;
  45.     }
  46.     /**
  47.      * @inheritDoc
  48.      */
  49.     public function getItems($page$itemCountPerPage): array
  50.     {
  51.         if (! $this->objects) {
  52.             $this->page $page;
  53.             $this->pageSize $itemCountPerPage;
  54.             $this->load();
  55.         }
  56.         return $this->objects;
  57.     }
  58.     /**
  59.      * @inheritdoc
  60.      */
  61.     public function load(): void
  62.     {
  63.         $result $this->adapter->searchInfrastructure($this->getParameter(), $this->page$this->pageSize$this->getParameter()->getOrderConst(), $this->randomSeed$this->locale$this->getParameter()->getCustomOrderKey(), $this->getParameter()->getCustomOrder());
  64.         $this->count $result->getTotalAmount();
  65.         $this->objects $result->getEntries();
  66.     }
  67.     public function setObjects(array $objects): void
  68.     {
  69.         $this->objects $objects;
  70.     }
  71.     public function getObjects(): array
  72.     {
  73.         return $this->objects;
  74.     }
  75.     public function getPaginatorAdapter(): self
  76.     {
  77.         return $this;
  78.     }
  79.     /**
  80.      * @inheritdoc
  81.      */
  82.     public function rewind()
  83.     {
  84.         if ($this->objects === null) {
  85.             $this->load();
  86.         }
  87.         reset($this->objects);
  88.     }
  89.     public function current(): mixed
  90.     {
  91.         if ($this->objects === null) {
  92.             $this->load();
  93.         }
  94.         return current($this->objects);
  95.     }
  96.     public function key(): string|int|null
  97.     {
  98.         if ($this->objects === null) {
  99.             $this->load();
  100.         }
  101.         return key($this->objects);
  102.     }
  103.     public function next(): mixed
  104.     {
  105.         if ($this->objects === null) {
  106.             $this->load();
  107.         }
  108.         return next($this->objects);
  109.     }
  110.     public function valid(): bool
  111.     {
  112.         return $this->current() !== false;
  113.     }
  114. }