215 lines
7.5 KiB
PHP
215 lines
7.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) 2016 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
|
*
|
|
*/
|
|
|
|
namespace oat\taoResultServer\models\classes\implementation;
|
|
|
|
use oat\taoDelivery\model\execution\Delete\DeliveryExecutionDeleteRequest;
|
|
use taoResultServer_models_classes_Variable;
|
|
use oat\taoResultServer\models\classes\ResultManagement as StorageManage;
|
|
use taoResultServer_models_classes_ReadableResultStorage as StorageRead;
|
|
use taoResultServer_models_classes_WritableResultStorage as StorageWrite;
|
|
|
|
class StorageAggregation implements
|
|
StorageRead,
|
|
StorageWrite,
|
|
StorageManage
|
|
{
|
|
private $implementations = [];
|
|
|
|
public function __construct($implementations)
|
|
{
|
|
$interfaces = class_implements($this);
|
|
foreach ($interfaces as $interface) {
|
|
$this->implementations[$interface] = [];
|
|
}
|
|
foreach ($implementations as $impl) {
|
|
foreach (array_intersect($interfaces, class_implements($impl)) as $interface) {
|
|
$this->implementations[$interface][] = $impl;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
protected function getOneImplementation($interface)
|
|
{
|
|
return reset($this->implementations[$interface]);
|
|
}
|
|
|
|
protected function getAllImplementations($interface)
|
|
{
|
|
return $this->implementations[$interface];
|
|
}
|
|
|
|
// read interface
|
|
|
|
public function getVariables($callId)
|
|
{
|
|
return $this->getOneImplementation(StorageRead::class)->getVariables($callId);
|
|
}
|
|
|
|
public function getVariable($callId, $variableIdentifier)
|
|
{
|
|
return $this->getOneImplementation(StorageRead::class)->getVariable($callId, $variableIdentifier);
|
|
}
|
|
|
|
public function getTestTaker($deliveryResultIdentifier)
|
|
{
|
|
return $this->getOneImplementation(StorageRead::class)->getTestTaker($deliveryResultIdentifier);
|
|
}
|
|
|
|
public function getDelivery($deliveryResultIdentifier)
|
|
{
|
|
return $this->getOneImplementation(StorageRead::class)->getDelivery($deliveryResultIdentifier);
|
|
}
|
|
|
|
public function getAllCallIds()
|
|
{
|
|
return $this->getOneImplementation(StorageRead::class)->getAllCallIds();
|
|
}
|
|
|
|
public function getAllTestTakerIds()
|
|
{
|
|
return $this->getOneImplementation(StorageRead::class)->getAllTestTakerIds();
|
|
}
|
|
|
|
public function getAllDeliveryIds()
|
|
{
|
|
return $this->getOneImplementation(StorageRead::class)->getAllDeliveryIds();
|
|
}
|
|
|
|
// write interface
|
|
|
|
/**
|
|
* Not sure how multiple engines are supposed to handle this
|
|
*/
|
|
public function spawnResult()
|
|
{
|
|
$result = null;
|
|
foreach ($this->getAllImplementations(StorageWrite::class) as $impl) {
|
|
$result = $impl->spawnResult();
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
public function storeRelatedTestTaker($deliveryResultIdentifier, $testTakerIdentifier)
|
|
{
|
|
foreach ($this->getAllImplementations(StorageWrite::class) as $impl) {
|
|
$impl->storeRelatedTestTaker($deliveryResultIdentifier, $testTakerIdentifier);
|
|
}
|
|
}
|
|
|
|
public function storeRelatedDelivery($deliveryResultIdentifier, $deliveryIdentifier)
|
|
{
|
|
foreach ($this->getAllImplementations(StorageWrite::class) as $impl) {
|
|
$impl->storeRelatedDelivery($deliveryResultIdentifier, $deliveryIdentifier);
|
|
}
|
|
}
|
|
|
|
public function storeItemVariable($deliveryResultIdentifier, $test, $item, taoResultServer_models_classes_Variable $itemVariable, $callIdItem)
|
|
{
|
|
foreach ($this->getAllImplementations(StorageWrite::class) as $impl) {
|
|
$impl->storeItemVariable($deliveryResultIdentifier, $test, $item, $itemVariable, $callIdItem);
|
|
}
|
|
}
|
|
|
|
public function storeItemVariables($deliveryResultIdentifier, $test, $item, array $itemVariables, $callIdItem)
|
|
{
|
|
foreach ($this->getAllImplementations(StorageWrite::class) as $impl) {
|
|
$impl->storeItemVariables($deliveryResultIdentifier, $test, $item, $itemVariables, $callIdItem);
|
|
}
|
|
}
|
|
|
|
public function storeTestVariable($deliveryResultIdentifier, $test, taoResultServer_models_classes_Variable $testVariable, $callIdTest)
|
|
{
|
|
foreach ($this->getAllImplementations(StorageWrite::class) as $impl) {
|
|
$impl->storeTestVariable($deliveryResultIdentifier, $test, $testVariable, $callIdTest);
|
|
}
|
|
}
|
|
|
|
public function storeTestVariables($deliveryResultIdentifier, $test, array $testVariables, $callIdTest)
|
|
{
|
|
foreach ($this->getAllImplementations(StorageWrite::class) as $impl) {
|
|
$impl->storeTestVariables($deliveryResultIdentifier, $test, $testVariables, $callIdTest);
|
|
}
|
|
}
|
|
|
|
public function configure($callOptions = [])
|
|
{
|
|
foreach ($this->getAllImplementations(StorageWrite::class) as $impl) {
|
|
$success = $impl->configure($callOptions);
|
|
}
|
|
}
|
|
|
|
// manage interface
|
|
|
|
public function getVariableProperty($variableId, $property)
|
|
{
|
|
return $this->getOneImplementation(StorageManage::class)->getVariableProperty($variableId, $property);
|
|
}
|
|
|
|
public function getRelatedItemCallIds($deliveryResultIdentifier)
|
|
{
|
|
return $this->getOneImplementation(StorageManage::class)->getRelatedItemCallIds($deliveryResultIdentifier);
|
|
}
|
|
|
|
public function getRelatedTestCallIds($deliveryResultIdentifier)
|
|
{
|
|
return $this->getOneImplementation(StorageManage::class)->getRelatedTestCallIds($deliveryResultIdentifier);
|
|
}
|
|
|
|
public function getResultByDelivery($delivery, $options = [])
|
|
{
|
|
return $this->getOneImplementation(StorageManage::class)->getResultByDelivery($delivery, $options = []);
|
|
}
|
|
|
|
public function countResultByDelivery($delivery)
|
|
{
|
|
return $this->getOneImplementation(StorageManage::class)->countResultByDelivery($delivery);
|
|
}
|
|
|
|
public function getDeliveryVariables($delivery)
|
|
{
|
|
return $this->getOneImplementation(StorageManage::class)->getDeliveryVariables($delivery);
|
|
}
|
|
|
|
public function deleteResult($deliveryResultIdentifier)
|
|
{
|
|
$success = null;
|
|
foreach ($this->getAllImplementations(StorageManage::class) as $impl) {
|
|
$success = $impl->deleteResult($deliveryResultIdentifier) && ($success === true || is_null($success));
|
|
}
|
|
return $success === true;
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function deleteDeliveryExecutionData(DeliveryExecutionDeleteRequest $request)
|
|
{
|
|
$success = null;
|
|
/** @var \oat\taoDelivery\model\execution\Delete\DeliveryExecutionDelete $impl */
|
|
foreach ($this->getAllImplementations(StorageManage::class) as $impl) {
|
|
$success = $impl->deleteDeliveryExecutionData($request) && ($success === true || is_null($success));
|
|
}
|
|
return $success === true;
|
|
}
|
|
}
|