Source of file FacetIndexItemsList.php
Size: 3,278 Bytes - Last Modified: 2021-12-23T10:27:01+00:00
/var/www/docs.ssmods.com/process/src/src/Models/FacetIndexItemsList.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 | <?php namespace TheWebmen\FacetFilters\Model; use SilverStripe\CMS\Model\SiteTree; use SilverStripe\ORM\Limitable; use SilverStripe\ORM\Map; use SilverStripe\ORM\SS_List; use SilverStripe\View\ViewableData; use TheWebmen\FacetFilters\Services\ElasticaService; class FacetIndexItemsList extends ViewableData implements SS_List, Limitable { /** * @var \Elastica\Index */ protected $index; /** * @var \Elastica\Query */ protected $query; /** * @var \Elastica\ResultSet */ protected $resultSet; public function __construct(\Elastica\Index $index, \Elastica\Query $query) { $this->index = $index; $this->query = $query; parent::__construct(); } public function __clone() { $this->resultSet = null; } public function getResultSet() { if (!$this->resultSet) { $this->resultSet = ElasticaService::singleton()->search($this->query); } return $this->resultSet; } /** * @param int $limit * @param int $offset * @return FacetIndexItemsList */ public function limit($limit, $offset = 0) { $this->query->setFrom($offset); $this->query->setSize($limit); return $this; } /** * @return array */ public function toArray() { $rows = $this->getResultSet()->getResults(); $pages = []; foreach ($rows as $row) { $pages[] = SiteTree::get()->byID($row->getData()['ID']); } return $pages; } /** * @return array */ public function toNestedArray() { $result = []; foreach ($this as $item) { $result[] = $item->toMap(); } return $result; } /** * @param callable $callback * @return FacetIndexItemsList */ public function each($callback) { foreach ($this as $row) { $callback($row); } return $this; } /** * @param string $keyField - the 'key' field of the result array * @param string $titleField - the value field of the result array * @return Map */ public function map($keyField = 'ID', $titleField = 'Title') { return new Map($this, $keyField, $titleField); } /** * @return \ArrayIterator */ public function getIterator() { return new \ArrayIterator($this->toArray()); } /** * @return int */ public function count() { return $this->getResultSet()->getTotalHits(); } public function first() { } public function last() { } public function find($key, $value) { } public function column($colName = "ID") { } public function add($item) { } public function remove($item) { } public function offsetExists($key) { } public function offsetGet($key) { } public function offsetSet($key, $value) { user_error("Can't alter items in a DataList using array-access", E_USER_ERROR); } public function offsetUnset($key) { user_error("Can't alter items in a DataList using array-access", E_USER_ERROR); } } |