Site-Proximo/openfoodfacts-php-0.2.3/src/Collection.php
2020-08-22 11:34:59 +02:00

133 lines
3 KiB
PHP

<?php
namespace OpenFoodFacts;
use Iterator;
class Collection implements Iterator
{
private $listDocuments = null;
private $count = null;
private $page = null;
private $skip = null;
private $pageSize = null;
/**
* initialization of the collection
* @param array|null $data the raw data
* @param string|null $api this information help to type the collection (not use yet)
*/
public function __construct(array $data = null, string $api = null)
{
$data = $data ?? [
'products' => [],
'count' => 0,
'page' => 0,
'skip' => 0,
'page_size' => 0,
];
$this->listDocuments = [];
if (!empty($data['products'])) {
$currentApi = '';
if (null !== $api) {
$currentApi = $api;
}
foreach ($data['products'] as $document) {
if($document instanceof Document){
$this->listDocuments[] = $document;
}elseif (is_array($document)){
$this->listDocuments[] = Document::createSpecificDocument($currentApi, $document);
}else {
throw new \InvalidArgumentException(sprintf('Would expect an OpenFoodFacts\Document Interface or Array here. Got: %s', gettype($document)));
}
}
}
$this->count = $data['count'];
$this->page = $data['page'];
$this->skip = $data['skip'];
$this->pageSize = $data['page_size'];
}
/**
* @return int get the current page
*/
public function getPage() : int
{
return $this->page;
}
/**
* @return int get the number of element skipped
*/
public function getSkip() : int
{
return $this->skip;
}
/**
* @return int get the number of element by page for this collection
*/
public function getPageSize() : int
{
return $this->pageSize;
}
/**
* @return int the number of element in this Collection
*/
public function pageCount() : int
{
return count($this->listDocuments);
}
/**
* @return int the number of element for this search
*/
public function searchCount() : int
{
return $this->count;
}
/**
* Implementation of Iterator
*/
/**
* @inheritDoc
*/
public function rewind()
{
reset($this->listDocuments);
}
/**
* @inheritDoc
*/
public function current()
{
return current($this->listDocuments);
}
/**
* @inheritDoc
*/
public function key()
{
return key($this->listDocuments);
}
/**
* @inheritDoc
*/
public function next()
{
return next($this->listDocuments);
}
/**
* @inheritDoc
*/
public function valid()
{
$key = key($this->listDocuments);
return ($key !== null && $key !== false);
}
}