+--------------------------------------------------------------------+
| CiviCRM version 5 |
+--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2018 |
+ | Copyright CiviCRM LLC (c) 2004-2019 |
+--------------------------------------------------------------------+
| This file is a part of CiviCRM. |
| |
use Civi\API\Event\ExceptionEvent;
use Civi\API\Event\ResolveEvent;
use Civi\API\Event\RespondEvent;
-use Civi\API\Provider\ProviderInterface;
/**
* @package Civi
- * @copyright CiviCRM LLC (c) 2004-2018
+ * @copyright CiviCRM LLC (c) 2004-2019
*/
class Kernel {
* @param array $apiProviders
* Array of ProviderInterface.
*/
- public function __construct($dispatcher, $apiProviders = array()) {
+ public function __construct($dispatcher, $apiProviders = []) {
$this->apiProviders = $apiProviders;
$this->dispatcher = $dispatcher;
}
list($apiProvider, $apiRequest) = $this->resolve($apiRequest);
$this->authorize($apiProvider, $apiRequest);
- $apiRequest = $this->prepare($apiProvider, $apiRequest);
+ list ($apiProvider, $apiRequest) = $this->prepare($apiProvider, $apiRequest);
$result = $apiProvider->invoke($apiRequest);
return $this->respond($apiProvider, $apiRequest, $result);
* Array(0 => ProviderInterface, 1 => array $apiRequest).
*/
public function resolve($apiRequest) {
- /** @var ResolveEvent $resolveEvent */
+ /** @var \Civi\API\Event\ResolveEvent $resolveEvent */
$resolveEvent = $this->dispatcher->dispatch(Events::RESOLVE, new ResolveEvent($apiRequest, $this));
$apiRequest = $resolveEvent->getApiRequest();
if (!$resolveEvent->getApiProvider()) {
throw new \Civi\API\Exception\NotImplementedException("API (" . $apiRequest['entity'] . ", " . $apiRequest['action'] . ") does not exist (join the API team and implement it!)");
}
- return array($resolveEvent->getApiProvider(), $apiRequest);
+ return [$resolveEvent->getApiProvider(), $apiRequest];
}
/**
* Determine if the API request is allowed (under current policy)
*
- * @param ProviderInterface $apiProvider
+ * @param \Civi\API\Provider\ProviderInterface $apiProvider
* The API provider responsible for executing the request.
* @param array $apiRequest
* The full description of the API request.
* @throws Exception\UnauthorizedException
*/
public function authorize($apiProvider, $apiRequest) {
- /** @var AuthorizeEvent $event */
+ /** @var \Civi\API\Event\AuthorizeEvent $event */
$event = $this->dispatcher->dispatch(Events::AUTHORIZE, new AuthorizeEvent($apiProvider, $apiRequest, $this));
if (!$event->isAuthorized()) {
throw new \Civi\API\Exception\UnauthorizedException("Authorization failed");
/**
* Allow third-party code to manipulate the API request before execution.
*
- * @param ProviderInterface $apiProvider
+ * @param \Civi\API\Provider\ProviderInterface $apiProvider
* The API provider responsible for executing the request.
* @param array $apiRequest
* The full description of the API request.
* @return array
+ * [0 => ProviderInterface $provider, 1 => array $apiRequest]
* The revised API request.
*/
public function prepare($apiProvider, $apiRequest) {
- /** @var PrepareEvent $event */
+ /** @var \Civi\API\Event\PrepareEvent $event */
$event = $this->dispatcher->dispatch(Events::PREPARE, new PrepareEvent($apiProvider, $apiRequest, $this));
- return $event->getApiRequest();
+ return [$event->getApiProvider(), $event->getApiRequest()];
}
/**
* Allow third-party code to manipulate the API response after execution.
*
- * @param ProviderInterface $apiProvider
+ * @param \Civi\API\Provider\ProviderInterface $apiProvider
* The API provider responsible for executing the request.
* @param array $apiRequest
* The full description of the API request.
* The revised $result.
*/
public function respond($apiProvider, $apiRequest, $result) {
- /** @var RespondEvent $event */
+ /** @var \Civi\API\Event\RespondEvent $event */
$event = $this->dispatcher->dispatch(Events::RESPOND, new RespondEvent($apiProvider, $apiRequest, $result, $this));
return $event->getResponse();
}
*/
public function getEntityNames($version) {
// Question: Would it better to eliminate $this->apiProviders and just use $this->dispatcher?
- $entityNames = array();
+ $entityNames = [];
foreach ($this->getApiProviders() as $provider) {
- /** @var ProviderInterface $provider */
+ /** @var \Civi\API\Provider\ProviderInterface $provider */
$entityNames = array_merge($entityNames, $provider->getEntityNames($version));
}
$entityNames = array_unique($entityNames);
*/
public function getActionNames($version, $entity) {
// Question: Would it better to eliminate $this->apiProviders and just use $this->dispatcher?
- $actionNames = array();
+ $actionNames = [];
foreach ($this->getApiProviders() as $provider) {
- /** @var ProviderInterface $provider */
+ /** @var \Civi\API\Provider\ProviderInterface $provider */
$actionNames = array_merge($actionNames, $provider->getActionNames($version, $entity));
}
$actionNames = array_unique($actionNames);
* API response.
*/
public function formatException($e, $apiRequest) {
- $data = array();
+ $data = [];
if (!empty($apiRequest['params']['debug'])) {
$data['trace'] = $e->getTraceAsString();
}
$data['action'] = \CRM_Utils_Array::value('action', $apiRequest);
if (\CRM_Utils_Array::value('debug', \CRM_Utils_Array::value('params', $apiRequest))
- && empty($data['trace']) // prevent recursion
+ // prevent recursion
+ && empty($data['trace'])
) {
$data['trace'] = $e->getTraceAsString();
}
* API response.
*/
public function formatPearException($e, $apiRequest) {
- $data = array();
+ $data = [];
$error = $e->getCause();
if ($error instanceof \DB_Error) {
$data["error_code"] = \DB::errorMessage($error->getCode());
}
/**
- * @param ProviderInterface $apiProvider
+ * @param \Civi\API\Provider\ProviderInterface $apiProvider
* The API provider responsible for executing the request.
* @return Kernel
*/