176 lines
6.7 KiB
PHP
176 lines
6.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) 2013-2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
use oat\taoResultServer\models\classes\ResultStorageWrapper;
|
||
|
use qtism\runtime\tests\AbstractSessionManager;
|
||
|
use qtism\runtime\tests\TestResultsSubmission;
|
||
|
use qtism\runtime\tests\Route;
|
||
|
use qtism\runtime\tests\AssessmentTestSession;
|
||
|
use qtism\runtime\tests\AssessmentItemSession;
|
||
|
use qtism\data\AssessmentTest;
|
||
|
use qtism\data\IAssessmentItem;
|
||
|
use qtism\common\datatypes\QtiDuration;
|
||
|
|
||
|
/**
|
||
|
* A TAO specific implementation of QTISM's AbstractSessionManager.
|
||
|
*
|
||
|
* @author Jérôme Bogaerts <jerome@taotesting.com>
|
||
|
*
|
||
|
*/
|
||
|
class taoQtiTest_helpers_SessionManager extends AbstractSessionManager
|
||
|
{
|
||
|
|
||
|
/**
|
||
|
* The class name of the default TestSession
|
||
|
*/
|
||
|
const DEFAULT_TEST_SESSION = '\\taoQtiTest_helpers_TestSession';
|
||
|
|
||
|
/**
|
||
|
* The result server to be used by tao_helpers_TestSession created by the factory.
|
||
|
*
|
||
|
* @var ResultStorageWrapper
|
||
|
*/
|
||
|
private $resultServer;
|
||
|
|
||
|
/**
|
||
|
* The TAO Resource describing the Test definition to be set to the AssessmentTestSession to be built.
|
||
|
*
|
||
|
* @var core_kernel_classes_Resource
|
||
|
*/
|
||
|
private $test;
|
||
|
|
||
|
/**
|
||
|
* Create a new SessionManager object.
|
||
|
*
|
||
|
* @param ResultStorageWrapper $resultServer The ResultServer to be set to the AssessmentTestSession to be built.
|
||
|
* @param core_kernel_classes_Resource $test The TAO Resource describing the Test definition to be set to the AssessmentTestSession to be built.
|
||
|
* @throws \InvalidArgumentException
|
||
|
* @throws common_Exception
|
||
|
*/
|
||
|
public function __construct(ResultStorageWrapper $resultServer, core_kernel_classes_Resource $test)
|
||
|
{
|
||
|
parent::__construct();
|
||
|
$this->setAcceptableLatency(new QtiDuration(taoQtiTest_models_classes_QtiTestService::singleton()->getQtiTestAcceptableLatency()));
|
||
|
$this->setResultServer($resultServer);
|
||
|
$this->setTest($test);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the result server to be used by tao_helpers_TestSession created by the factory.
|
||
|
*
|
||
|
* @param ResultStorageWrapper $resultServer
|
||
|
*/
|
||
|
public function setResultServer(ResultStorageWrapper $resultServer)
|
||
|
{
|
||
|
$this->resultServer = $resultServer;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the result server to be used by tao_helpers_TestSession created by the factory.
|
||
|
*
|
||
|
* @return ResultStorageWrapper
|
||
|
*/
|
||
|
public function getResultServer()
|
||
|
{
|
||
|
return $this->resultServer;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the TAO Resource describing the Test definition to be set to the AssessmentTestSession to be built.
|
||
|
*
|
||
|
* @param core_kernel_classes_Resource $test A TAO Test Resource.
|
||
|
*/
|
||
|
public function setTest(core_kernel_classes_Resource $test)
|
||
|
{
|
||
|
$this->test = $test;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the TAO Resource describing the Test definition to be set to the AssessmentTestSession to be built.
|
||
|
*
|
||
|
* @return core_kernel_classes_Resource A TAO Resource.
|
||
|
*/
|
||
|
public function getTest()
|
||
|
{
|
||
|
return $this->test;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Instantiates an AssessmentTestSession with the default implementation provided by QTISM.
|
||
|
* @param AssessmentTest $test
|
||
|
* @param Route $route
|
||
|
* @return AssessmentTestSession
|
||
|
* @throws common_ext_ExtensionException
|
||
|
*/
|
||
|
protected function instantiateAssessmentTestSession(AssessmentTest $test, Route $route)
|
||
|
{
|
||
|
$config = \common_ext_ExtensionsManager::singleton()->getExtensionById('taoQtiTest')->getConfig('testRunner');
|
||
|
|
||
|
// Test Session class instantiation, depending on configuration.
|
||
|
if (!isset($config) || !isset($config['test-session'])) {
|
||
|
$className = self::DEFAULT_TEST_SESSION;
|
||
|
\common_Logger::w("Missing configuration for TestRunner session class, using '${className}' by default!");
|
||
|
} else {
|
||
|
$className = $config['test-session'];
|
||
|
}
|
||
|
|
||
|
$assessmentTestSession = new $className($test, $this, $route, $this->getResultServer(), $this->getTest());
|
||
|
|
||
|
$forceBranchrules = (isset($config['force-branchrules'])) ? $config['force-branchrules'] : false;
|
||
|
$forcePreconditions = (isset($config['force-preconditions'])) ? $config['force-preconditions'] : false;
|
||
|
$pathTracking = (isset($config['path-tracking'])) ? $config['path-tracking'] : false;
|
||
|
$alwaysAllowJumps = (isset($config['always-allow-jumps'])) ? $config['always-allow-jumps'] : false;
|
||
|
|
||
|
$assessmentTestSession->setForceBranching($forceBranchrules);
|
||
|
$assessmentTestSession->setForcePreconditions($forcePreconditions);
|
||
|
$assessmentTestSession->setAlwaysAllowJumps($alwaysAllowJumps);
|
||
|
$assessmentTestSession->setPathTracking($pathTracking);
|
||
|
|
||
|
return $assessmentTestSession;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Extra configuration for newly instantiated AssessmentTestSession objects. This implementation
|
||
|
* forces test results to be sent at the end of the candidate session, and get the acceptable
|
||
|
* latency time from the taoQtiTest extension's configuration.
|
||
|
*
|
||
|
* @param AssessmentTestSession $assessmentTestSession
|
||
|
*/
|
||
|
protected function configureAssessmentTestSession(AssessmentTestSession $assessmentTestSession)
|
||
|
{
|
||
|
$assessmentTestSession->setTestResultsSubmission(TestResultsSubmission::END);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Instantiates an AssessmentItemSession with the default implementation provided by QTISM.
|
||
|
*
|
||
|
* @param IAssessmentItem $assessmentItem
|
||
|
* @param integer $navigationMode A value from the NavigationMode enumeration.
|
||
|
* @param integer $submissionMode A value from the SubmissionMode enumeration.
|
||
|
* @return AssessmentItemSession A freshly instantiated AssessmentItemSession.
|
||
|
* @throws \InvalidArgumentException
|
||
|
*/
|
||
|
protected function instantiateAssessmentItemSession(IAssessmentItem $assessmentItem, $navigationMode, $submissionMode)
|
||
|
{
|
||
|
return new AssessmentItemSession($assessmentItem, $this, $navigationMode, $submissionMode);
|
||
|
}
|
||
|
}
|