124 lines
4.3 KiB
PHP
124 lines
4.3 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) 2013 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
|
*
|
|
*/
|
|
|
|
namespace oat\taoDelivery\model\execution;
|
|
|
|
use common_Exception;
|
|
use oat\oatbox\user\User;
|
|
use oat\oatbox\service\ServiceManager;
|
|
use oat\oatbox\service\ConfigurableService;
|
|
use oat\taoDelivery\model\RuntimeService;
|
|
use oat\taoDelivery\model\container\ExecutionContainer;
|
|
use oat\taoResultServer\models\classes\ResultServerService;
|
|
use oat\taoResultServer\models\classes\ResultStorageWrapper;
|
|
|
|
/**
|
|
* Service to manage the execution of deliveries
|
|
*
|
|
* @access public
|
|
* @author Joel Bout, <joel@taotesting.com>
|
|
* @package taoDelivery
|
|
*/
|
|
class DeliveryServerService extends ConfigurableService
|
|
{
|
|
/** @deprecated */
|
|
const CONFIG_ID = 'taoDelivery/deliveryServer';
|
|
|
|
const SERVICE_ID = 'taoDelivery/deliveryServer';
|
|
|
|
|
|
public static function singleton()
|
|
{
|
|
return ServiceManager::getServiceManager()->get(self::SERVICE_ID);
|
|
}
|
|
|
|
/**
|
|
* Return the states a delivey execution can be resumed from
|
|
* @return string[]
|
|
*/
|
|
public function getResumableStates()
|
|
{
|
|
return [
|
|
DeliveryExecution::STATE_ACTIVE
|
|
,DeliveryExecution::STATE_PAUSED
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Get resumable (active) deliveries.
|
|
* @param User $user User instance. If not given then all deliveries will be returned regardless of user URI.
|
|
* @return \oat\taoDelivery\model\execution\DeliveryExecution []
|
|
*/
|
|
public function getResumableDeliveries(User $user)
|
|
{
|
|
$deliveryExecutionService = ServiceProxy::singleton();
|
|
$resumable = [];
|
|
foreach ($this->getResumableStates() as $state) {
|
|
foreach ($deliveryExecutionService->getDeliveryExecutionsByStatus($user->getIdentifier(), $state) as $execution) {
|
|
$delivery = $execution->getDelivery();
|
|
if ($delivery->exists()) {
|
|
$resumable[] = $execution;
|
|
}
|
|
}
|
|
}
|
|
return $resumable;
|
|
}
|
|
|
|
/**
|
|
* Initialize the result server for a given execution
|
|
*
|
|
* @param $compiledDelivery
|
|
* @param string $executionIdentifier
|
|
*/
|
|
public function initResultServer($compiledDelivery, $executionIdentifier, $userUri)
|
|
{
|
|
$this->getServiceManager()->get(\oat\taoResultServer\models\classes\ResultServerService::SERVICE_ID)
|
|
->initResultServer($compiledDelivery, $executionIdentifier, $userUri);
|
|
}
|
|
|
|
/**
|
|
* Returns the container for the delivery execution
|
|
*
|
|
* @param DeliveryExecution $deliveryExecution
|
|
* @return ExecutionContainer
|
|
* @throws common_Exception
|
|
*/
|
|
public function getDeliveryContainer(DeliveryExecution $deliveryExecution)
|
|
{
|
|
$runtimeService = $this->getServiceLocator()->get(RuntimeService::SERVICE_ID);
|
|
$deliveryContainer = $runtimeService->getDeliveryContainer($deliveryExecution->getDelivery()->getUri());
|
|
return $deliveryContainer->getExecutionContainer($deliveryExecution);
|
|
}
|
|
|
|
/**
|
|
* @param string $deliveryExecutionId id expectected, but still accepts delivery executions for backward compatibility
|
|
*/
|
|
public function getResultStoreWrapper($deliveryExecutionId): ResultStorageWrapper
|
|
{
|
|
if ($deliveryExecutionId instanceof DeliveryExecutionInterface) {
|
|
$deliveryExecutionId = $deliveryExecutionId->getIdentifier();
|
|
}
|
|
/** @var ResultServerService $resultService */
|
|
$resultService = $this->getServiceLocator()->get(ResultServerService::SERVICE_ID);
|
|
return new ResultStorageWrapper($deliveryExecutionId, $resultService->getResultStorage());
|
|
}
|
|
}
|