103 lines
3.5 KiB
PHP
103 lines
3.5 KiB
PHP
|
<?php
|
||
|
|
||
|
/**
|
||
|
* This program is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU General Public License
|
||
|
* as published by the Free Software Foundation; under version 2
|
||
|
* of the License (non-upgradable).
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, write to the Free Software
|
||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
|
*
|
||
|
* Copyright (c) 2020 (original work) Open Assessment Technologies SA;
|
||
|
*
|
||
|
* @author Sergei Mikhailov <sergei.mikhailov@taotesting.com>
|
||
|
*/
|
||
|
declare(strict_types=1);
|
||
|
|
||
|
namespace oat\taoDelivery\controller;
|
||
|
|
||
|
use common_exception_MissingParameter;
|
||
|
use common_exception_NotFound as NotFoundException;
|
||
|
use common_exception_NotImplemented as NotImplementedException;
|
||
|
use common_exception_RestApi as ApiException;
|
||
|
use oat\taoDelivery\model\execution\ServiceProxy;
|
||
|
use oat\taoDelivery\model\execution\StateServiceInterface;
|
||
|
use tao_actions_RestController as RestController;
|
||
|
use oat\taoDelivery\model\execution\DeliveryExecutionService;
|
||
|
|
||
|
/** Kindly use `funcAcl` in order to assign the roles, having access to the controller */
|
||
|
class DeliveryExecutionState extends RestController
|
||
|
{
|
||
|
/**
|
||
|
* @throws NotFoundException
|
||
|
*
|
||
|
* @throws NotImplementedException
|
||
|
* @throws NotFoundException
|
||
|
*/
|
||
|
public function index(): void
|
||
|
{
|
||
|
$queryParams = $this->getPsrRequest()->getQueryParams();
|
||
|
|
||
|
switch ($this->getPsrRequest()->getMethod()) {
|
||
|
case 'PUT':
|
||
|
$this->put($queryParams['uri'] ?? '');
|
||
|
break;
|
||
|
default:
|
||
|
/** @noinspection PhpUnhandledExceptionInspection */
|
||
|
$this->returnFailure(new ApiException('Not implemented'));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private function put(string $uri): void
|
||
|
{
|
||
|
if (empty($uri)) {
|
||
|
$this->returnFailure(new common_exception_MissingParameter('uri'));
|
||
|
}
|
||
|
|
||
|
$state = $this->extractState();
|
||
|
|
||
|
$deliveryExecution = $this->getExecutionService()->getDeliveryExecution($uri);
|
||
|
|
||
|
try {
|
||
|
if ($deliveryExecution->getState()->getUri() !== $state) {
|
||
|
$deliveryExecution->setState($state);
|
||
|
}
|
||
|
} catch (NotFoundException $exception) {
|
||
|
$this->returnFailure(new NotFoundException('Delivery execution not found', 404, $exception));
|
||
|
}
|
||
|
|
||
|
$this->returnSuccess([], false);
|
||
|
}
|
||
|
|
||
|
protected function getExecutionService(): DeliveryExecutionService
|
||
|
{
|
||
|
/** @noinspection PhpIncompatibleReturnTypeInspection */
|
||
|
return $this->getServiceLocator()->get(ServiceProxy::SERVICE_ID);
|
||
|
}
|
||
|
|
||
|
protected function getStateService(): StateServiceInterface
|
||
|
{
|
||
|
/** @noinspection PhpIncompatibleReturnTypeInspection */
|
||
|
return $this->getServiceLocator()->get(StateServiceInterface::SERVICE_ID);
|
||
|
}
|
||
|
|
||
|
private function extractState(): string
|
||
|
{
|
||
|
$data = json_decode((string)$this->getPsrRequest()->getBody(), true);
|
||
|
|
||
|
if (empty($data['value']) || !in_array($data['value'], $this->getStateService()->getDeliveriesStates(), true)) {
|
||
|
/** @noinspection PhpUnhandledExceptionInspection */
|
||
|
$this->returnFailure(new common_exception_MissingParameter('value'));
|
||
|
}
|
||
|
|
||
|
return $data['value'];
|
||
|
}
|
||
|
}
|