tao-test/app/taoDeliveryRdf/helper/TestRunnerFeatureWidget.php

96 lines
3.3 KiB
PHP
Raw Permalink Normal View History

2022-08-29 20:14:13 +02:00
<?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);
*
* @author Christophe Noël <christophe@taotesting.com>
*/
namespace oat\taoDeliveryRdf\helper;
use common_ext_ExtensionsManager;
use oat\oatbox\service\ServiceManager;
use oat\taoTests\models\runner\features\TestRunnerFeatureService;
use tao_helpers_form_FormElement;
use taoItems_models_classes_TemplateRenderer;
/**
* Allow the selection of the Test Runner Features wanted for a specific delivery
*/
class TestRunnerFeatureWidget extends tao_helpers_form_FormElement
{
public const WIDGET_ID = 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#DeliveryTestRunnerFeature';
private const WIDGET_TPL = 'views/templates/widgets/testRunnerFeature.tpl.php';
/**
* Data is stored as a coma-separated list of active test runner features ids
* ex: progressBar,accessibility,security
*/
public function feed()
{
$activeFeatures = [];
$expression = "/^" . preg_quote($this->name, "/") . "(.)*[0-9]+$/";
foreach ($_POST as $key => $value) {
if (preg_match($expression, $key)) {
$activeFeatures[] = $value;
}
}
$this->setValue(implode(',', $activeFeatures));
}
/**
* Render the Widget to allow Test Runner Features selection
*
* @return string
*/
public function render()
{
$serviceManager = ServiceManager::getServiceManager();
$testRunnerFeatureService = $serviceManager->get(TestRunnerFeatureService::SERVICE_ID);
$allFeatures = $testRunnerFeatureService->getAll();
$activeFeatures = explode(',', $this->value);
$choicesList = [];
$i = 0;
if (count($allFeatures) > 0) {
foreach ($allFeatures as $feature) {
$choicesList[] = [
"title" => $feature->getDescription(),
"value" => $feature->getId(),
"id" => $this->name . "_" . $i,
"checked" => (in_array($feature->getId(), $activeFeatures)) ? ' checked="checked" ' : '',
"label" => _dh($feature->getLabel())
];
$i++;
}
}
$tpl = common_ext_ExtensionsManager::singleton()->getExtensionById('taoDeliveryRdf')->getDir() . self::WIDGET_TPL ;
$templateRenderer = new taoItems_models_classes_TemplateRenderer($tpl, [
'propLabel' => _dh($this->getDescription()),
'choicesList' => $choicesList
]);
return $templateRenderer->render();
}
}