????JFIF??x?x????'
| Server IP : 79.136.114.73 / Your IP : 216.73.216.55 Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64 User : www-data ( 33) PHP Version : 5.5.9-1ubuntu4.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /var/www/icad.astacus.se/sharepoint/vendor/vgrem/php-spo/src/Runtime/ |
Upload File : |
<?php
namespace Office365\Runtime;
use Exception;
use Generator;
use IteratorAggregate;
use Office365\Runtime\Http\RequestOptions;
use Office365\Runtime\OData\JsonLightFormat;
use Office365\Runtime\OData\ODataQueryOptions;
use Traversable;
/**
* Client objects collection (represents EntitySet in terms of OData)
*/
class ClientObjectCollection extends ClientObject implements IteratorAggregate
{
/**
* @var array
*/
private $data = null;
/**
* @var string|null
*/
public $NextRequestUrl;
/**
* ClientObjectCollection constructor.
* @param ClientRuntimeContext $ctx
* @param ResourcePath $resourcePath
* @param ODataQueryOptions $queryOptions
*/
public function __construct(ClientRuntimeContext $ctx, ResourcePath $resourcePath = null, ODataQueryOptions $queryOptions = null)
{
parent::__construct($ctx, $resourcePath, $queryOptions);
$this->data = array();
$this->NextRequestUrl = null;
}
/**
* @return bool
*/
function getServerObjectIsNull()
{
return !is_array($this->data);
}
function isPropertyAvailable($name)
{
return isset($this->data[$name]);
}
/**
* Adds client object into collection
* @param ClientObject $clientObject
* @param int $index
*/
public function addChildAt(ClientObject $clientObject, $index)
{
array_splice($this->data, $index, 0, [$clientObject]);
if (is_null($clientObject->parentCollection))
$clientObject->parentCollection = $this;
}
/**
* Adds client object into collection
* @param ClientObject $clientObject
*/
public function addChild($clientObject)
{
$this->data[] = $clientObject;
if (is_null($clientObject->parentCollection))
$clientObject->parentCollection = $this;
}
/**
* @param ClientObject $clientObject
*/
public function removeChild(ClientObject $clientObject)
{
if (($key = array_search($clientObject, $this->data)) !== false) {
unset($this->data[$key]);
}
}
/**
* @return array
*/
public function getData()
{
return $this->data;
}
/**
* Finds the first item
* @param string $key
* @param string $value
* @return ClientObject|null
*/
public function findFirst($key, $value)
{
$result = $this->findItems(
function (ClientObject $item) use ($key, $value) {
return $item->getProperty($key) === $value;
});
return (is_array($result) && (count($result) > 0) ? array_values($result)[0] : null);
}
/**
* Finds items by entity property
* @param callable $callback
* @return array
*/
public function findItems(callable $callback)
{
$result = array_filter(
$this->data,
function (ClientObject $item) use ($callback) {
return call_user_func($callback, $item);
}
);
if (count($result) > 0)
return array_values($result);
return null;
}
/**
* Gets the item at the specified index
* @param $index
* @return ClientObject
*/
public function getItem($index)
{
return $this->data[$index];
}
/**
* @return int
*/
public function getCount()
{
$it = $this->getIterator();
while($it->valid() ){
$it->next();
}
return count($this->data);
}
public function clearData()
{
$this->data = array();
}
/**
* Specifies an expression or function that must evaluate to true for a record to be returned in the collection.
* @param $value
* @return ClientObjectCollection $this
*/
public function filter($value)
{
$this->queryOptions->Filter = rawurlencode($value);
return $this;
}
/**
* Determines the maximum number of records to return.
* @param $value
* @return ClientObjectCollection $this
*/
public function orderBy($value)
{
$this->queryOptions->OrderBy = rawurlencode($value);
return $this;
}
/**
* Determines the maximum number of records to return.
* @param $value
* @return ClientObjectCollection $this
*/
public function top($value)
{
$this->queryOptions->Top = $value;
return $this;
}
/**
* Sets the number of records to skip before it retrieves records in a collection.
* @param $value
* @return ClientObjectCollection $this
*/
public function skip($value)
{
$this->queryOptions->Skip = $value;
return $this;
}
/**
* Sets the number of records to skip before it retrieves records in a collection.
* @param $value
* @return ClientObjectCollection $this
*/
public function skiptoken($value)
{
$this->queryOptions->SkipToken = rawurlencode($value);
return $this;
}
/**
* Creates resource for a collection
* @return ClientObject
*/
public function createType()
{
$clientObjectType = $this->getItemTypeName();
$clientObject = new $clientObjectType($this->getContext());
$clientObject->parentCollection = $this;
return $clientObject;
}
/**
* @return string
*/
public function getItemTypeName()
{
return str_replace("Collection", "", get_class($this));
}
/**
* @return array
*/
function toJson()
{
return array_map(function (ClientObject $item) {
return $item->toJson();
}, $this->getData());
}
/**
* @param string|integer $index
* @param mixed $value
* @param bool $persistChanges
*/
function setProperty($index, $value, $persistChanges = true)
{
if((is_int($index))){
$itemType = $this->createType();
foreach ($value as $k=>$v) {
$itemType->setProperty($k, $v, $persistChanges);
}
$this->addChild($itemType);
}
else{
parent::setProperty($index,$value,$persistChanges);
}
}
/**
* @return Generator|Traversable
* @throws Exception
*/
public function getIterator()
{
/** @var ClientObject $item */
foreach ($this->data as $index => $item) {
yield $index => $item;
}
if(is_null($this->queryOptions->Top) && !is_null($this->NextRequestUrl)){
foreach ($this->getNextItems() as $item){
$this->addChild($item);
yield $item;
}
}
}
/**
* @return ClientObjectCollection
* @throws Exception
*/
private function getNextItems(){
$items = new ClientObjectCollection($this->context,$this->resourcePath);
$request = new RequestOptions($this->NextRequestUrl);
$response = $this->getContext()->executeQueryDirect($request);
$payload = json_decode($response->getContent(), true);
$this->getContext()->getPendingRequest()->mapJson($payload,$items,new JsonLightFormat());
$this->NextRequestUrl = null;
return $items;
}
}