144 lines
4.9 KiB
PHP
144 lines
4.9 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) 2019 (original work) Open Assessment Technologies SA;
|
|
*/
|
|
|
|
namespace oat\taoQtiTest\scripts\tools;
|
|
|
|
use common_report_Report as Report;
|
|
use oat\oatbox\extension\AbstractAction;
|
|
use oat\taoQtiTest\models\runner\toolsStates\KvToolsStateStorage;
|
|
use oat\taoQtiTest\models\runner\toolsStates\NoStorage;
|
|
use oat\taoQtiTest\models\runner\toolsStates\RdsToolsStateStorage;
|
|
use oat\taoQtiTest\models\runner\toolsStates\ToolsStateStorage;
|
|
|
|
/**
|
|
* Register given implementation of 'ToolsStateStorage' and prepares the storage, if needed
|
|
*
|
|
* Class InstallRdsToolsStateStorage
|
|
* @package oat\taoQtiTest\scripts\install
|
|
*/
|
|
class SetStateStorageForTools extends AbstractAction
|
|
{
|
|
/**
|
|
* @param array $params
|
|
* @return Report
|
|
* @throws \common_Exception
|
|
* @throws \oat\oatbox\service\exception\InvalidServiceManagerException
|
|
*/
|
|
public function __invoke($params)
|
|
{
|
|
if (count($params) === 0) {
|
|
return new Report(Report::TYPE_ERROR, 'Storage type is not provided');
|
|
}
|
|
|
|
$storageType = $params[0];
|
|
|
|
$report = null;
|
|
switch ($storageType) {
|
|
case 'rds':
|
|
$report = $this->registerRdsStorage($params);
|
|
break;
|
|
case 'key-value':
|
|
$report = $this->registerKeyValueStorage($params);
|
|
break;
|
|
case 'no-storage':
|
|
$this->registerNoStorage();
|
|
break;
|
|
default:
|
|
$report = new Report(Report::TYPE_ERROR, 'Allowed storage types are: rds, key-value, no-storage');
|
|
}
|
|
|
|
if ($report instanceof Report) {
|
|
return $report;
|
|
}
|
|
|
|
return new Report(Report::TYPE_SUCCESS, 'Tool states service registered');
|
|
}
|
|
|
|
/**
|
|
* @param array $params
|
|
* @return Report|null report if failed
|
|
* @throws \common_Exception
|
|
* @throws \oat\oatbox\service\exception\InvalidServiceManagerException
|
|
*/
|
|
private function registerRdsStorage($params)
|
|
{
|
|
$persistenceId = array_key_exists(1, $params) ? $params[1] : 'default';
|
|
if (!$this->getPersistence($persistenceId)) {
|
|
return new Report(Report::TYPE_ERROR, 'Given persistence does not exist');
|
|
}
|
|
$this->getServiceManager()->register(
|
|
ToolsStateStorage::SERVICE_ID,
|
|
new RdsToolsStateStorage([ToolsStateStorage::OPTION_PERSISTENCE => $persistenceId])
|
|
);
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @param array $params
|
|
* @return Report|null report if failed
|
|
* @throws \common_Exception
|
|
* @throws \oat\oatbox\service\exception\InvalidServiceManagerException
|
|
*/
|
|
private function registerKeyValueStorage($params)
|
|
{
|
|
if (!array_key_exists(1, $params)) {
|
|
return new Report(Report::TYPE_ERROR, 'Persistence is not provided');
|
|
}
|
|
$persistenceId = $params[1];
|
|
$persistence = $this->getPersistence($persistenceId);
|
|
if (!$persistence) {
|
|
return new Report(Report::TYPE_ERROR, 'Given persistence does not exist');
|
|
}
|
|
if (!$persistence instanceof \common_persistence_AdvKeyValuePersistence) {
|
|
throw new \common_exception_Error('Given persistence should be of key-value type');
|
|
}
|
|
$this->getServiceManager()->register(
|
|
ToolsStateStorage::SERVICE_ID,
|
|
new KvToolsStateStorage([ToolsStateStorage::OPTION_PERSISTENCE => $persistenceId])
|
|
);
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
* @throws \common_Exception
|
|
* @throws \oat\oatbox\service\exception\InvalidServiceManagerException
|
|
*/
|
|
private function registerNoStorage()
|
|
{
|
|
$this->getServiceManager()->register(ToolsStateStorage::SERVICE_ID, new NoStorage([]));
|
|
}
|
|
|
|
/**
|
|
* @param string $persistenceId
|
|
* @return \common_persistence_Persistence|null
|
|
*/
|
|
private function getPersistence($persistenceId)
|
|
{
|
|
try {
|
|
/** @var \common_persistence_Manager $persistenceManager */
|
|
$persistenceManager = $this->getServiceLocator()->get(\common_persistence_Manager::SERVICE_KEY);
|
|
return $persistenceManager->getPersistenceById($persistenceId);
|
|
} catch (\common_Exception $e) {
|
|
return null;
|
|
}
|
|
}
|
|
}
|