????JFIF??x?x????'
| Server IP : 79.136.114.73 / Your IP : 216.73.216.107 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 Office365\Runtime\Actions\ClientAction;
use Office365\Runtime\Http\RequestException;
use Office365\Runtime\Http\Requests;
use Office365\Runtime\Http\Response;
use Office365\Runtime\Types\EventHandler;
use Office365\Runtime\Types\Guid;
use Office365\Runtime\Http\RequestOptions;
/**
* Client Request for OData provider.
*
*/
abstract class ClientRequest
{
/**
* @var EventHandler
*/
protected $beforeExecute;
/**
* @var EventHandler
*/
protected $afterExecute;
/**
* @var ClientRuntimeContext
*/
protected $context;
/**
* @var ClientAction[]
*/
protected $queries = array();
/**
* @var ClientAction
*/
protected $currentQuery = null;
/** @var Guid */
protected $requestId;
/** @var integer */
protected $requestStatus;
/**
* ClientRequest constructor.
* @param ClientRuntimeContext $context
*/
public function __construct(ClientRuntimeContext $context)
{
$this->context = $context;
$this->beforeExecute = new EventHandler();
$this->afterExecute = new EventHandler();
$this->requestId = Guid::newGuid();
$this->requestStatus = ClientRequestStatus::Active;
}
/**
* @return ClientAction|null
*/
protected function getNextQuery()
{
$qry = array_shift($this->queries);
$this->currentQuery = $qry;
return $qry;
}
/**
* @return ClientAction
*/
public function getCurrentQuery(){
return $this->currentQuery;
}
/**
* Add query into request queue
* @param ClientAction $query
*/
public function addQuery(ClientAction $query)
{
$this->queries[] = $query;
$this->currentQuery = $query;
}
/**
* @param ClientAction $query
* @param ClientObject|ClientResult $resultObject
*/
public function addQueryAndResultObject(ClientAction $query, $resultObject = null)
{
$query->ReturnType = $resultObject;
$this->addQuery($query);
}
/**
* @param callable $event
* @param bool $toBegin
*/
public function beforeExecuteRequest(callable $event, $toBegin=false)
{
$this->beforeExecute->addEvent($event,false,$toBegin);
}
/**
* @param callable $event
* @param false $toBegin
*/
public function beforeExecuteRequestOnce(callable $event, $toBegin=false)
{
$this->beforeExecute->addEvent($event,true,$toBegin);
}
/**
* @param callable $event
* @param bool $once
*/
public function afterExecuteRequest(callable $event,$once=true)
{
$this->afterExecute->addEvent($event,$once);
}
/**
* Submit a query
* @throws Exception
*/
public function executeQuery()
{
while ($this->getNextQuery() !== null) {
try{
$request = $this->buildRequest();
$this->beforeExecute->triggerEvent(array($request));
$response = $this->executeQueryDirect($request);
$this->processResponse($response);
$this->afterExecute->triggerEvent(array($response));
$this->requestStatus = ClientRequestStatus::CompletedSuccess;
}
catch(Exception $e){
$this->requestStatus = ClientRequestStatus::CompletedException;
throw $e;
}
}
}
/**
* @param RequestOptions $request
* @return Response
* @throws Exception
*/
public function executeQueryDirect(RequestOptions $request)
{
$this->context->authenticateRequest($request);
$response = Requests::execute($request);
$this->validate($response);
return $response;
}
/**
* @param Response $response
*/
public abstract function processResponse($response);
/**
* Build Request
* @return RequestOptions
*/
abstract public function buildRequest();
/**
* @return ClientAction[]
*/
public function getActions(){
return $this->queries;
}
public function clearActions(){
$this->queries = array();
}
/**
* @return int
*/
public function getRequestStatus(){
return $this->requestStatus;
}
/**
* @param Response $response
* @return bool
* @throws Exception
*/
public function validate($response)
{
if ($response->getStatusCode() >= 400) {
throw new RequestException($response->getContent(),$response->getStatusCode());
}
return true;
}
}