119 lines
3.7 KiB
PHP
119 lines
3.7 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\qtiItemPci\scripts\install;
|
||
|
|
||
|
use common_report_Report as Report;
|
||
|
use oat\oatbox\extension\script\ScriptAction;
|
||
|
use oat\qtiItemPci\model\portableElement\configuration\AudioRecordingInteractionCreatorConfigurationRegistry;
|
||
|
use ReflectionMethod;
|
||
|
|
||
|
class SetupAudioRecordingInteractionCreatorConfigurationRegistry extends ScriptAction
|
||
|
{
|
||
|
public const MAXIMUM_RECORDING_TIME_LIMIT = 'maximumRecordingTimeLimit';
|
||
|
|
||
|
private const OPTION_DEFAULT_VALUES = [
|
||
|
self::MAXIMUM_RECORDING_TIME_LIMIT => 60 * 20,
|
||
|
];
|
||
|
|
||
|
protected function provideOptions(): array
|
||
|
{
|
||
|
return [
|
||
|
self::MAXIMUM_RECORDING_TIME_LIMIT => [
|
||
|
'prefix' => 'mr',
|
||
|
'longPrefix' => self::MAXIMUM_RECORDING_TIME_LIMIT,
|
||
|
'description' => sprintf(
|
||
|
'Maximum allowed audio recording time in seconds, %u by default',
|
||
|
self::OPTION_DEFAULT_VALUES[self::MAXIMUM_RECORDING_TIME_LIMIT]
|
||
|
),
|
||
|
],
|
||
|
];
|
||
|
}
|
||
|
|
||
|
protected function provideDescription(): string
|
||
|
{
|
||
|
return sprintf('Sets `%s` values.', AudioRecordingInteractionCreatorConfigurationRegistry::class);
|
||
|
}
|
||
|
|
||
|
protected function run(): Report
|
||
|
{
|
||
|
$registry = $this->propagate(new AudioRecordingInteractionCreatorConfigurationRegistry());
|
||
|
|
||
|
$setValues = [];
|
||
|
|
||
|
foreach (self::OPTION_DEFAULT_VALUES as $optionName => $defaultValue) {
|
||
|
$value = $this->getOption($optionName) ?? $defaultValue;
|
||
|
|
||
|
if (null === $value) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
$method = [$registry, 'set' . ucfirst($optionName)];
|
||
|
|
||
|
if (!is_callable($method)) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
settype($value, $this->getArgumentType($method));
|
||
|
|
||
|
$method($value);
|
||
|
|
||
|
$setValues[$optionName] = $value;
|
||
|
}
|
||
|
|
||
|
return $this->createReport($setValues);
|
||
|
}
|
||
|
|
||
|
private function createReport(array $setValues): Report
|
||
|
{
|
||
|
return $setValues
|
||
|
? Report::createSuccess(
|
||
|
sprintf(
|
||
|
"Applied the following configuration to `%s`\n%s",
|
||
|
AudioRecordingInteractionCreatorConfigurationRegistry::class,
|
||
|
json_encode($setValues)
|
||
|
)
|
||
|
)
|
||
|
: Report::createFailure(
|
||
|
sprintf('No values set to `%s`', AudioRecordingInteractionCreatorConfigurationRegistry::class)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
private function getArgumentType(array $method): string
|
||
|
{
|
||
|
/** @noinspection PhpUnhandledExceptionInspection */
|
||
|
$reflection = new ReflectionMethod(...$method);
|
||
|
|
||
|
$arguments = $reflection->getParameters();
|
||
|
|
||
|
$firstArgument = reset($arguments);
|
||
|
|
||
|
if (!$firstArgument) {
|
||
|
return 'null';
|
||
|
}
|
||
|
|
||
|
return (string)$firstArgument->getType();
|
||
|
}
|
||
|
}
|