4require_once 
'./Modules/Test/exceptions/class.ilTestException.php';
 
    5require_once 
'./Services/Object/classes/class.ilObjectGUI.php';
 
    6require_once 
'./Modules/Test/classes/inc.AssessmentConstants.php';
 
    7require_once 
'./Modules/Test/classes/class.ilObjAssessmentFolderGUI.php';
 
    8require_once 
'./Modules/Test/classes/class.ilObjAssessmentFolder.php';
 
    9require_once 
'./Modules/Test/classes/class.ilTestExpressPage.php';
 
   51        'ilpublicuserprofilegui', 
'ilobjportfoliogui' 
   81        $lng->loadLanguageModule(
"assessment");
 
   84        $this->ctrl->saveParameter($this, array(
"ref_id", 
"test_ref_id", 
"calling_test", 
"test_express_mode", 
"q_id"));
 
   85        parent::__construct(
"", 
$_GET[
"ref_id"], 
true, 
false);
 
   88            require_once 
'Modules/Test/classes/class.ilTestQuestionSetConfigFactory.php';
 
   91            require_once 
'Modules/Test/classes/class.ilTestPlayerFactory.php';
 
   94            require_once 
'Modules/Test/classes/class.ilTestSessionFactory.php';
 
   97            require_once 
'Modules/Test/classes/class.ilTestSequenceFactory.php';
 
  101        require_once 
'Modules/Test/classes/class.ilTestObjectiveOrientedContainer.php';
 
  110        global $ilAccess, $ilNavigationHistory, 
$ilCtrl, 
$ilErr, 
$tpl, 
$lng, $ilTabs, $ilPluginAdmin, 
$ilDB, 
$tree, $ilias, 
$ilUser;
 
  112        if ((!$ilAccess->checkAccess(
"read", 
"", 
$_GET[
"ref_id"]))) {
 
  113            $ilias->raiseError($this->lng->txt(
"permission_denied"), $ilias->error_obj->MESSAGE);
 
  116        $cmd = $this->ctrl->getCmd(
"infoScreen");
 
  118        $cmdsDisabledDueToOfflineStatus = array(
 
  119            'resumePlayer', 
'resumePlayer', 
'outUserResultsOverview', 
'outUserListOfAnswerPasses' 
  122        if (!$this->
getCreationMode() && !$this->object->isOnline() && in_array($cmd, $cmdsDisabledDueToOfflineStatus)) {
 
  126        $next_class = $this->ctrl->getNextClass($this);
 
  127        $this->ctrl->setReturn($this, 
"infoScreen");
 
  129        if (method_exists($this->
object, 
"getTestStyleLocation")) {
 
  130            $this->tpl->addCss($this->object->getTestStyleLocation(
"output"), 
"screen");
 
  135            $ilAccess->checkAccess(
"read", 
"", 
$_GET[
"ref_id"])
 
  137            $ilNavigationHistory->addItem(
 
  139                "ilias.php?baseClass=ilObjTestGUI&cmd=infoScreen&ref_id=" . 
$_GET[
"ref_id"],
 
  145        if ($_REQUEST[
'prev_qid']) {
 
  146            global $___prev_question_id;
 
  147            $___prev_question_id = $_REQUEST[
'prev_qid'];
 
  148            $this->ctrl->setParameter($this, 
'prev_qid', $_REQUEST[
'prev_qid']);
 
  151        if (!$this->
getCreationMode() && $this->testQuestionSetConfigFactory->getQuestionSetConfig()->areDepenciesBroken()) {
 
  152            if (!$this->testQuestionSetConfigFactory->getQuestionSetConfig()->isValidRequestOnBrokenQuestionSetDepencies($next_class, $cmd)) {
 
  153                $this->ctrl->redirectByClass(
'ilObjTestGUI', 
'infoScreen');
 
  159        switch ($next_class) {
 
  160            case 'illtiproviderobjectsettinggui':
 
  163                $this->getSettingsSubTabs();
 
  164                $GLOBALS[
'DIC']->tabs()->activateTab(
'settings');
 
  165                $GLOBALS[
'DIC']->tabs()->activateSubTab(
'lti_provider');
 
  167                $lti_gui->setCustomRolesForSelection(
$GLOBALS[
'DIC']->rbac()->review()->getLocalRoles($this->object->getRefId()));
 
  168                $lti_gui->offerLTIRolesForSelection(
false);
 
  169                $this->ctrl->forwardCommand($lti_gui);
 
  173            case 'iltestexportgui':
 
  174                if (!$ilAccess->checkAccess(
'write', 
'', $this->ref_id)) {
 
  175                    $ilErr->raiseError($this->lng->txt(
'permission_denied'), 
$ilErr->WARNING);
 
  180                require_once 
'Modules/Test/classes/class.ilTestExportGUI.php';
 
  184            case "ilinfoscreengui":
 
  189            case 'ilobjectmetadatagui':
 
  190                if (!$ilAccess->checkAccess(
'write', 
'', $this->object->getRefId())) {
 
  191                    $ilErr->raiseError($this->lng->txt(
'permission_denied'), 
$ilErr->WARNING);
 
  196                include_once 
'Services/Object/classes/class.ilObjectMetaDataGUI.php';
 
  198                $this->ctrl->forwardCommand($md_gui);
 
  201            case "iltestplayerfixedquestionsetgui":
 
  203                require_once 
"./Modules/Test/classes/class.ilTestPlayerFixedQuestionSetGUI.php";
 
  204                if (!$this->object->getKioskMode()) {
 
  209                $this->ctrl->forwardCommand($gui);
 
  212            case "iltestplayerrandomquestionsetgui":
 
  214                require_once 
"./Modules/Test/classes/class.ilTestPlayerRandomQuestionSetGUI.php";
 
  215                if (!$this->object->getKioskMode()) {
 
  220                $this->ctrl->forwardCommand($gui);
 
  223            case "iltestplayerdynamicquestionsetgui":
 
  225                require_once 
"./Modules/Test/classes/class.ilTestPlayerDynamicQuestionSetGUI.php";
 
  226                if (!$this->object->getKioskMode()) {
 
  231                $this->ctrl->forwardCommand($gui);
 
  234            case "iltestevaluationgui":
 
  238            case "iltestevalobjectiveorientedgui":
 
  242            case "iltestservicegui":
 
  245                require_once 
"./Modules/Test/classes/class.ilTestServiceGUI.php";
 
  247                $this->ctrl->forwardCommand($serviceGUI);
 
  250            case 'ilpermissiongui':
 
  253                include_once(
"Services/AccessControl/classes/class.ilPermissionGUI.php");
 
  255                $ret      = $this->ctrl->forwardCommand($perm_gui);
 
  258            case "illearningprogressgui":
 
  261                require_once 
'./Services/Tracking/classes/class.ilLearningProgressGUI.php';
 
  263                $this->ctrl->forwardCommand($new_gui);
 
  267            case "ilcertificategui":
 
  270                require_once 
"./Services/Certificate/classes/class.ilCertificateGUI.php";
 
  271                require_once 
"./Modules/Test/classes/class.ilTestCertificateAdapter.php";
 
  273                $this->ctrl->forwardCommand($output_gui);
 
  276            case "iltestscoringgui":
 
  279                require_once 
"./Modules/Test/classes/class.ilTestScoringGUI.php";
 
  281                $this->ctrl->forwardCommand($output_gui);
 
  284            case 'ilmarkschemagui':
 
  285                if (!$ilAccess->checkAccess(
'write', 
'', $this->object->getRefId())) {
 
  287                    $this->ctrl->redirect($this, 
'infoScreen');
 
  291                require_once 
'Modules/Test/classes/class.ilMarkSchemaGUI.php';
 
  293                $this->ctrl->forwardCommand($mark_schema_gui);
 
  296            case 'iltestscoringbyquestionsgui':
 
  299                include_once 
'Modules/Test/classes/class.ilTestScoringByQuestionsGUI.php';
 
  301                $this->ctrl->forwardCommand($output_gui);
 
  304            case 'ilobjtestsettingsgeneralgui':
 
  307                require_once 
'Modules/Test/classes/class.ilObjTestSettingsGeneralGUI.php';
 
  319                $this->ctrl->forwardCommand($gui);
 
  322            case 'ilobjtestsettingsscoringresultsgui':
 
  325                require_once 
'Modules/Test/classes/class.ilObjTestSettingsScoringResultsGUI.php';
 
  336                $this->ctrl->forwardCommand($gui);
 
  339            case 'ilobjtestdynamicquestionsetconfiggui':
 
  342                require_once 
'Modules/Test/classes/class.ilObjTestDynamicQuestionSetConfigGUI.php';
 
  344                $this->ctrl->forwardCommand($gui);
 
  347            case 'iltestrandomquestionsetconfiggui':
 
  350                require_once 
'Modules/Test/classes/class.ilTestRandomQuestionSetConfigGUI.php';
 
  352                $this->ctrl->forwardCommand($gui);
 
  355            case 'iltestquestionbrowsertablegui':
 
  358                require_once 
'Modules/Test/classes/tables/class.ilTestQuestionBrowserTableGUI.php';
 
  360                $gui->setWriteAccess($ilAccess->checkAccess(
"write", 
"", $this->ref_id));
 
  362                $this->ctrl->forwardCommand($gui);
 
  365            case 'iltestskilladministrationgui':
 
  368                require_once 
'Modules/Test/classes/class.ilTestSkillAdministrationGUI.php';
 
  369                $gui = 
new ilTestSkillAdministrationGUI($ilias, $this->ctrl, $ilAccess, $ilTabs, $this->tpl, $this->lng, 
$ilDB, 
$tree, $ilPluginAdmin, $this->
object, $this->ref_id);
 
  370                $this->ctrl->forwardCommand($gui);
 
  373            case 'iltestskillevaluationgui':
 
  377                require_once 
'Modules/TestQuestionPool/classes/class.ilAssQuestionList.php';
 
  378                if ($this->object->isDynamicTest()) {
 
  379                    require_once 
'Modules/Test/classes/class.ilObjTestDynamicQuestionSetConfig.php';
 
  381                    $dynamicQuestionSetConfig->loadFromDb();
 
  383                    $questionList->setParentObjId($dynamicQuestionSetConfig->getSourceQuestionPoolId());
 
  387                    $questionList->setParentObjId($this->object->getId());
 
  390                $questionList->load();
 
  392                require_once 
'Modules/Test/classes/class.ilTestSessionFactory.php';
 
  396                require_once 
'Modules/Test/classes/class.ilTestSkillEvaluationGUI.php';
 
  398                $gui->setQuestionList($questionList);
 
  399                $gui->setTestSession($testSession);
 
  401                $this->ctrl->forwardCommand($gui);
 
  404            case 'ilobjectcopygui':
 
  407                require_once 
'./Services/Object/classes/class.ilObjectCopyGUI.php';
 
  410                $this->ctrl->forwardCommand($cp);
 
  413            case 'ilrepositorysearchgui':
 
  416                require_once 
'./Services/Search/classes/class.ilRepositorySearchGUI.php';
 
  418                $rep_search->setCallback(
 
  420                    'addParticipantsObject',
 
  425                $this->ctrl->setReturn($this, 
'participants');
 
  426                $ret =&$this->ctrl->forwardCommand($rep_search);
 
  427                $this->tabs_gui->setTabActive(
'participants');
 
  430            case 'ilpageeditorgui':
 
  431            case 'iltestexpresspageobjectgui':
 
  433                require_once 
'Modules/TestQuestionPool/classes/class.ilAssIncompleteQuestionPurger.php';
 
  435                $incompleteQuestionPurger->setOwnerId(
$ilUser->getId());
 
  436                $incompleteQuestionPurger->purge();
 
  445                if (!in_array($cmd, array(
'addQuestion', 
'browseForQuestions'))) {
 
  449                if (!$qid || in_array($cmd, array(
'insertQuestions', 
'browseForQuestions'))) {
 
  450                    require_once 
"./Modules/Test/classes/class.ilTestExpressPageObjectGUI.php";
 
  453                    $ret                     =&$this->ctrl->forwardCommand($pageObject);
 
  456                require_once 
"./Services/Style/Content/classes/class.ilObjStyleSheet.php";
 
  457                $this->tpl->setCurrentBlock(
"ContentStyle");
 
  458                $this->tpl->setVariable(
 
  459                    "LOCATION_CONTENT_STYLESHEET",
 
  462                $this->tpl->parseCurrentBlock();
 
  465                $this->tpl->setCurrentBlock(
"SyntaxStyle");
 
  466                $this->tpl->setVariable(
 
  467                    "LOCATION_SYNTAX_STYLESHEET",
 
  470                $this->tpl->parseCurrentBlock();
 
  471                require_once 
"./Modules/TestQuestionPool/classes/class.assQuestionGUI.php";
 
  475                    $this->ctrl->setParameterByClass(
'iltestexpresspageobjectgui', 
'q_id', 
'');
 
  476                    $this->ctrl->redirectByClass(
'iltestexpresspageobjectgui', $this->ctrl->getCmd());
 
  481                $q_gui->outAdditionalOutput();
 
  482                $q_gui->object->setObjId($this->object->getId());
 
  484                $q_gui->setTargetGuiClass(
null);
 
  485                $q_gui->setQuestionActionCmd(
null);
 
  487                $question = $q_gui->object;
 
  488                $this->ctrl->saveParameter($this, 
"q_id");
 
  490                #$this->lng->loadLanguageModule("content");
 
  491                $this->ctrl->setReturnByClass(
"ilTestExpressPageObjectGUI", 
"view");
 
  492                $this->ctrl->setReturn($this, 
"questions");
 
  494                require_once 
"./Modules/TestQuestionPool/classes/class.ilAssQuestionPage.php";
 
  495                require_once 
"./Modules/Test/classes/class.ilTestExpressPageObjectGUI.php";
 
  499                $page_gui->setEditPreview(
true);
 
  500                $page_gui->setEnabledTabs(
false);
 
  501                if (strlen($this->ctrl->getCmd()) == 0) {
 
  502                    $this->ctrl->setCmdClass(get_class($page_gui));
 
  503                    $this->ctrl->setCmd(
"preview");
 
  506                $page_gui->setQuestionHTML(array($q_gui->object->getId() => $q_gui->getPreview(
true)));
 
  507                $page_gui->setTemplateTargetVar(
"ADM_CONTENT");
 
  509                $page_gui->setOutputMode($this->object->evalTotalPersons() == 0 ? 
"edit" : 
'preview');
 
  511                $page_gui->setHeader($question->getTitle());
 
  512                $page_gui->setFileDownloadLink($this->ctrl->getLinkTarget($this, 
"downloadFile"));
 
  513                $page_gui->setFullscreenLink($this->ctrl->getLinkTarget($this, 
"fullscreen"));
 
  514                $page_gui->setSourcecodeDownloadScript($this->ctrl->getLinkTarget($this));
 
  515                $page_gui->setPresentationTitle($question->getTitle() . 
' [' . $this->lng->txt(
'question_id_short') . 
': ' . $question->getId() . 
']');
 
  516                $ret =&$this->ctrl->forwardCommand($page_gui);
 
  519                $ilTabs->activateTab(
'assQuestions');
 
  521                $this->tpl->setContent(
$ret);
 
  524            case 'ilassquestionpreviewgui':
 
  528                $this->ctrl->saveParameter($this, 
"q_id");
 
  530                require_once 
'Modules/TestQuestionPool/classes/class.ilAssQuestionPreviewGUI.php';
 
  534                $gui->initPreviewSettings($this->object->getRefId());
 
  535                $gui->initPreviewSession(
$ilUser->getId(), (
int) 
$_GET[
'q_id']);
 
  536                $gui->initHintTracking();
 
  537                $gui->initStyleSheets();
 
  539                $this->ctrl->forwardCommand($gui);
 
  543            case 'ilassquestionpagegui':
 
  547                require_once 
"./Modules/TestQuestionPool/classes/class.ilAssQuestionPageGUI.php";
 
  549                if ($_REQUEST[
'prev_qid']) {
 
  550                    $this->ctrl->setParameter($this, 
'prev_qid', $_REQUEST[
'prev_qid']);
 
  556                $_GET[
'calling_test'] = $this->
object->getRefId();
 
  557                include_once(
"./Services/Style/Content/classes/class.ilObjStyleSheet.php");
 
  558                $this->tpl->setCurrentBlock(
"ContentStyle");
 
  559                $this->tpl->setVariable(
 
  560                    "LOCATION_CONTENT_STYLESHEET",
 
  563                $this->tpl->parseCurrentBlock();
 
  566                $this->tpl->setCurrentBlock(
"SyntaxStyle");
 
  567                $this->tpl->setVariable(
 
  568                    "LOCATION_SYNTAX_STYLESHEET",
 
  571                $this->tpl->parseCurrentBlock();
 
  572                require_once 
"./Modules/TestQuestionPool/classes/class.assQuestionGUI.php";
 
  575                $q_gui->setQuestionTabs();
 
  576                $q_gui->outAdditionalOutput();
 
  577                $q_gui->object->setObjId($this->object->getId());
 
  578                $question =&$q_gui->object;
 
  579                $this->ctrl->saveParameter($this, 
"q_id");
 
  580                $this->lng->loadLanguageModule(
"content");
 
  581                $this->ctrl->setReturnByClass(
"ilAssQuestionPageGUI", 
"view");
 
  582                $this->ctrl->setReturn($this, 
"questions");
 
  584                $page_gui->setEditPreview(
true);
 
  585                if (strlen($this->ctrl->getCmd()) == 0) {
 
  586                    $this->ctrl->setCmdClass(get_class($page_gui));
 
  587                    $this->ctrl->setCmd(
"preview");
 
  589                $page_gui->setQuestionHTML(array($q_gui->object->getId() => $q_gui->getPreview(
true)));
 
  590                $page_gui->setTemplateTargetVar(
"ADM_CONTENT");
 
  591                $page_gui->setOutputMode($this->object->evalTotalPersons() == 0 ? 
"edit" : 
'preview');
 
  592                $page_gui->setHeader($question->getTitle());
 
  593                $page_gui->setPresentationTitle($question->getTitle() . 
' [' . $this->lng->txt(
'question_id_short') . 
': ' . $question->getId() . 
']');
 
  594                $ret =&$this->ctrl->forwardCommand($page_gui);
 
  595                $this->tpl->setContent(
$ret);
 
  598            case 'ilassspecfeedbackpagegui':
 
  599                require_once 
"./Modules/TestQuestionPool/classes/feedback/class.ilAssSpecFeedbackPageGUI.php";
 
  601                $this->ctrl->forwardCommand($pg_gui);
 
  604            case 'ilassgenfeedbackpagegui':
 
  605                require_once 
"./Modules/TestQuestionPool/classes/feedback/class.ilAssGenFeedbackPageGUI.php";
 
  607                $this->ctrl->forwardCommand($pg_gui);
 
  610            case 'illocalunitconfigurationgui':
 
  614                $this->ctrl->setReturn($this, 
"questions");
 
  617                require_once 
'Modules/TestQuestionPool/classes/class.assQuestionGUI.php';
 
  619                $questionGUI->object->setObjId($this->object->getId());
 
  620                $questionGUI->setQuestionTabs();
 
  622                require_once 
'Modules/TestQuestionPool/classes/class.ilLocalUnitConfigurationGUI.php';
 
  623                require_once 
'Modules/TestQuestionPool/classes/class.ilUnitConfigurationRepository.php';
 
  627                $this->ctrl->forwardCommand($gui);
 
  630            case "ilcommonactiondispatchergui":
 
  631                require_once 
"Services/Object/classes/class.ilCommonActionDispatcherGUI.php";
 
  633                $this->ctrl->forwardCommand($gui);
 
  636            case 'ilassquestionhintsgui':
 
  641                $this->ctrl->setReturn($this, 
"questions");
 
  644                require_once 
'Modules/TestQuestionPool/classes/class.assQuestionGUI.php';
 
  646                $questionGUI->object->setObjId($this->object->getId());
 
  647                $questionGUI->setQuestionTabs();
 
  650                require_once 
'Modules/TestQuestionPool/classes/class.ilAssQuestionHintsGUI.php';
 
  655                $gui->setEditingEnabled(
 
  656                    $DIC->access()->checkAccess(
'write', 
'', $this->object->getRefId())
 
  663            case 'ilassquestionfeedbackeditinggui':
 
  668                $this->ctrl->setReturn($this, 
"questions");
 
  671                require_once 
'Modules/TestQuestionPool/classes/class.assQuestionGUI.php';
 
  673                $questionGUI->object->setObjId($this->object->getId());
 
  674                $questionGUI->setQuestionTabs();
 
  677                require_once 
'Modules/TestQuestionPool/classes/class.ilAssQuestionFeedbackEditingGUI.php';
 
  683            case 'iltesttoplistgui':
 
  685                require_once 
'./Modules/Test/classes/class.ilTestToplistGUI.php';
 
  687                $this->ctrl->forwardCommand($gui);
 
  690            case 'ilscoringadjustmentgui':
 
  692                require_once 
'./Modules/Test/classes/class.ilScoringAdjustmentGUI.php';
 
  694                $this->ctrl->forwardCommand($gui);
 
  701                if ((strcmp($cmd, 
"properties") == 0) && (
$_GET[
"browse"])) {
 
  702                    $this->questionBrowser();
 
  705                if ((strcmp($cmd, 
"properties") == 0) && (
$_GET[
"up"] || 
$_GET[
"down"])) {
 
  710                $ret =&$this->$cmd();
 
  714                if ($_REQUEST[
'prev_qid']) {
 
  715                    global $___prev_question_id;
 
  716                    $___prev_question_id = $_REQUEST[
'prev_qid'];
 
  717                    $this->ctrl->setParameterByClass(
'ilassquestionpagegui', 
'prev_qid', $_REQUEST[
'prev_qid']);
 
  718                    $this->ctrl->setParameterByClass(
$_GET[
'sel_question_types'] . 
'gui', 
'prev_qid', $_REQUEST[
'prev_qid']);
 
  720                $this->create_question_mode = 
true;
 
  723                $this->ctrl->setReturn($this, 
"questions");
 
  724                require_once 
"./Modules/TestQuestionPool/classes/class.assQuestionGUI.php";
 
  727                $q_gui->object->setObjId($this->object->getId());
 
  728                if (!
$_GET[
'sel_question_types']) {
 
  731                    $qType = 
$_GET[
'sel_question_types'];
 
  733                $this->ctrl->setParameterByClass($qType . 
"GUI", 
'prev_qid', $_REQUEST[
'prev_qid']);
 
  734                $this->ctrl->setParameterByClass($qType . 
"GUI", 
'test_ref_id', $_REQUEST[
'ref_id']);
 
  735                $this->ctrl->setParameterByClass($qType . 
"GUI", 
'q_id', $_REQUEST[
'q_id']);
 
  736                if ($_REQUEST[
'test_express_mode']) {
 
  737                    $this->ctrl->setParameterByClass($qType . 
"GUI", 
'test_express_mode', 1);
 
  740                #global $___test_express_mode; 
  741                #$___test_express_mode = true; 
  742                if (!$q_gui->isSaveCommand()) {
 
  743                    $_GET[
'calling_test'] = $this->
object->getRefId();
 
  746                $q_gui->setQuestionTabs();
 
  747                #unset($___test_express_mode); 
  748                $ret =&$this->ctrl->forwardCommand($q_gui);
 
  751        if (!in_array(strtolower(
$_GET[
"baseClass"]), array(
'iladministrationgui', 
'ilrepositorygui')) &&
 
  761        require_once 
'Services/Tracking/classes/class.ilChangeEvent.php';
 
  764            $this->object->getType(),
 
  765            $this->object->getRefId(),
 
  766            $this->object->getId(),
 
  767            $DIC->user()->getId()
 
  778        $DIC->ctrl()->redirectByClass(
'ilTestExportGUI');
 
  786        $qid = $_REQUEST[
'q_id'];
 
  788        if (!$qid || $qid == 
'Array') {
 
  789            $questions = $this->
object->getQuestionTitlesAndIndexes();
 
  790            if (!is_array($questions)) {
 
  791                $questions = array();
 
  794            $keys = array_keys($questions);
 
  797            $_REQUEST[
'q_id'] = $qid;
 
  798            $_GET[
'q_id'] = $qid;
 
  802        if ($this->object->checkQuestionParent($qid)) {
 
  806        throw new ilTestException(
'question id does not relate to parent object!');
 
  811        switch ($this->object->getQuestionSetType()) {
 
  813                $this->ctrl->redirectByClass(
'ilTestExpressPageObjectGUI', 
'showPage');
 
  817                $this->ctrl->redirectByClass(
'ilTestRandomQuestionSetConfigGUI');
 
  821                $this->ctrl->redirectByClass(
'ilObjTestDynamicQuestionSetConfigGUI');
 
  827        $this->ctrl->setCmdClass(
'ilTestEvaluationGUI');
 
  828        $this->ctrl->setCmd(
'outUserResultsOverview');
 
  829        $this->tabs_gui->clearTargets();
 
  839        require_once 
'Modules/Test/classes/class.ilTestEvaluationGUI.php';
 
  843        $this->ctrl->forwardCommand($gui);
 
  851        require_once 
'Modules/Test/classes/class.ilTestEvalObjectiveOrientedGUI.php';
 
  855        $this->ctrl->forwardCommand($gui);
 
  866    public function createUserResults($show_pass_details, $show_answers, $show_reached_points, $show_user_results)
 
  868        global $ilTabs, 
$ilDB;
 
  872            require_once 
'Services/PDFGeneration/classes/class.ilPDFGeneration.php';
 
  876        $ilTabs->setBackTarget(
 
  877            $this->lng->txt(
'back'),
 
  878            $this->ctrl->getLinkTarget($this, 
'participants')
 
  882            require_once 
'Services/Link/classes/class.ilLink.php';
 
  884            $ilTabs->setBack2Target($this->lng->txt(
'back_to_objective_container'), $courseLink);
 
  887        $template = 
new ilTemplate(
"tpl.il_as_tst_participants_result_output.html", 
true, 
true, 
"Modules/Test");
 
  889        require_once 
'Modules/Test/classes/toolbars/class.ilTestResultsToolbarGUI.php';
 
  892        $this->ctrl->setParameter($this, 
'pdf', 
'1');
 
  893        $toolbar->setPdfExportLinkTarget($this->ctrl->getLinkTarget($this, $this->ctrl->getCmd()));
 
  894        $this->ctrl->setParameter($this, 
'pdf', 
'');
 
  897            if (isset(
$_GET[
'show_best_solutions'])) {
 
  898                $_SESSION[
'tst_results_show_best_solutions'] = 
true;
 
  899            } elseif (isset(
$_GET[
'hide_best_solutions'])) {
 
  900                $_SESSION[
'tst_results_show_best_solutions'] = 
false;
 
  901            } elseif (!isset(
$_SESSION[
'tst_results_show_best_solutions'])) {
 
  902                $_SESSION[
'tst_results_show_best_solutions'] = 
false;
 
  905            if (
$_SESSION[
'tst_results_show_best_solutions']) {
 
  906                $this->ctrl->setParameter($this, 
'hide_best_solutions', 
'1');
 
  907                $toolbar->setHideBestSolutionsLinkTarget($this->ctrl->getLinkTarget($this, $this->ctrl->getCmd()));
 
  908                $this->ctrl->setParameter($this, 
'hide_best_solutions', 
'');
 
  910                $this->ctrl->setParameter($this, 
'show_best_solutions', 
'1');
 
  911                $toolbar->setShowBestSolutionsLinkTarget($this->ctrl->getLinkTarget($this, $this->ctrl->getCmd()));
 
  912                $this->ctrl->setParameterByClass(
'', 
'show_best_solutions', 
'');
 
  916        require_once 
'Modules/Test/classes/class.ilTestParticipantData.php';
 
  918        if ($this->object->getFixedParticipants()) {
 
  919            $participantData->setUserIds($show_user_results);
 
  921            $participantData->setActiveIds($show_user_results);
 
  923        $participantData->load($this->object->getTestId());
 
  924        $toolbar->setParticipantSelectorOptions($participantData->getOptionArray($show_user_results));
 
  929        include_once 
"./Modules/Test/classes/class.ilTestServiceGUI.php";
 
  932        $serviceGUI->setParticipantData($participantData);
 
  935        foreach ($show_user_results as 
$key => $active_id) {
 
  938            if ($this->object->getFixedParticipants()) {
 
  939                $active_id = $this->
object->getActiveIdOfUser($active_id);
 
  941            if ($active_id > 0) {
 
  942                $results = $serviceGUI->getResultsOfUserOutput(
 
  943                    $this->testSessionFactory->getSession($active_id),
 
  945                    $this->object->_getResultPass($active_id),
 
  953            if ($count < count($show_user_results)) {
 
  956            $template->setCurrentBlock(
"user_result");
 
  962            require_once 
'Modules/Test/classes/class.ilTestPDFGenerator.php';
 
  967                $this->object->getTitle(),
 
  977        require_once 
'Modules/Test/classes/class.ilObjTestSettingsGeneralGUI.php';
 
  993        $this->tpl->getStandardTemplate();
 
 1005        if ($ilUser->getId() != ANONYMOUS_USER_ID) {
 
 1006            require_once(
'Services/WebDAV/classes/class.ilDAVActivationChecker.php');
 
 1016        $this->ctrl->redirect($this, 
"infoScreen");
 
 1021        $this->ctrl->redirectByClass(
"iltestevaluationgui", 
"outEvaluation");
 
 1030        if (
$form->checkInput()) {
 
 1031            $this->ctrl->setParameter($this, 
"new_type", $this->type);
 
 1036        $form->setValuesByPost();
 
 1037        $this->tpl->setContent(
$form->getHTML());
 
 1042        include_once(
"./Modules/Test/classes/class.ilObjTest.php");
 
 1044        $defaults = $tst->getAvailableDefaults();
 
 1045        if (count($defaults)) {
 
 1046            foreach ($defaults as 
$row) {
 
 1047                $a_options[
"tstdef_" . 
$row[
"test_defaults_id"]] = array(
$row[
"name"],
 
 1048                    $this->lng->txt(
"tst_default_settings"));
 
 1053        include_once 
"Services/Administration/classes/class.ilSettingsTemplate.php";
 
 1056            foreach ($templates as $item) {
 
 1057                $a_options[
"tsttpl_" . $item[
"id"]] = array($item[
"title"],
 
 1058                    nl2br(trim($item[
"description"])));
 
 1071            $testDefaultsId = $tstdef;
 
 1073            $a_new_object->applyDefaults($testDefaults);
 
 1078            include_once 
"Services/Administration/classes/class.ilSettingsTemplate.php";
 
 1081            $template_settings = 
$template->getSettings();
 
 1082            if ($template_settings) {
 
 1089        $a_new_object->saveToDb();
 
 1093        $this->ctrl->setParameter($this, 
'ref_id', $a_new_object->
getRefId());
 
 1094        $this->ctrl->redirectByClass(
'ilObjTestSettingsGeneralGUI');
 
 1099        include_once 
"./Services/Utilities/classes/class.ilUtil.php";
 
 1100        $path = $this->tree->getPathFull($this->object->getRefID());
 
 1109        if ($_FILES[
"xmldoc"][
"error"] > UPLOAD_ERR_OK) {
 
 1114        include_once(
"./Modules/Test/classes/class.ilObjTest.php");
 
 1119        $file = pathinfo($_FILES[
"xmldoc"][
"name"]);
 
 1120        $full_path = $basedir . 
"/" . $_FILES[
"xmldoc"][
"name"];
 
 1121        ilUtil::moveUploadedFile($_FILES[
"xmldoc"][
"tmp_name"], $_FILES[
"xmldoc"][
"name"], $full_path);
 
 1127        $subdir = basename(
$file[
"basename"], 
"." . 
$file[
"extension"]);
 
 1133        if (!is_file($qti_file)) {
 
 1141        include_once 
"./Services/QTI/classes/class.ilQTIParser.php";
 
 1143        $result = $qtiParser->startParsing();
 
 1144        $founditems =&$qtiParser->getFoundItems();
 
 1148        foreach ($founditems as $item) {
 
 1149            if (strlen($item[
"type"])) {
 
 1156        if (count($founditems) && $complete == 0) {
 
 1165        $_SESSION[
"tst_import_results_file"] = $results_file;
 
 1166        $_SESSION[
"tst_import_xml_file"] = $xml_file;
 
 1167        $_SESSION[
"tst_import_qti_file"] = $qti_file;
 
 1168        $_SESSION[
"tst_import_subdir"] = $subdir;
 
 1176        $this->tpl->addBlockFile(
"ADM_CONTENT", 
"adm_content", 
"tpl.tst_import_verification.html", 
"Modules/Test");
 
 1177        $row_class = array(
"tblrow1", 
"tblrow2");
 
 1179        foreach ($founditems as $item) {
 
 1180            $this->tpl->setCurrentBlock(
"verification_row");
 
 1181            $this->tpl->setVariable(
"ROW_CLASS", $row_class[
$counter++ % 2]);
 
 1182            $this->tpl->setVariable(
"QUESTION_TITLE", $item[
"title"]);
 
 1183            $this->tpl->setVariable(
"QUESTION_IDENT", $item[
"ident"]);
 
 1184            include_once 
"./Services/QTI/classes/class.ilQTIItem.php";
 
 1185            switch ($item[
"type"]) {
 
 1188                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assMultipleChoice"));
 
 1192                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assSingleChoice"));
 
 1196                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assKprimChoice"));
 
 1200                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assLongMenu"));
 
 1204                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assNumeric"));
 
 1208                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assFormulaQuestion"));
 
 1212                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assTextSubset"));
 
 1216                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assClozeTest"));
 
 1220                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assErrorText"));
 
 1224                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assImagemapQuestion"));
 
 1228                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assJavaApplet"));
 
 1232                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assFlashApplet"));
 
 1236                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assMatchingQuestion"));
 
 1240                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assOrderingQuestion"));
 
 1244                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assOrderingHorizontal"));
 
 1248                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assTextQuestion"));
 
 1252                    $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"assFileUpload"));
 
 1255            $this->tpl->parseCurrentBlock();
 
 1262        $this->tpl->setCurrentBlock(
"adm_content");
 
 1263        $this->tpl->setVariable(
"TEXT_TYPE", $this->lng->txt(
"question_type"));
 
 1264        $this->tpl->setVariable(
"TEXT_TITLE", $this->lng->txt(
"question_title"));
 
 1265        $this->tpl->setVariable(
"FOUND_QUESTIONS_INTRODUCTION", $this->lng->txt(
"tst_import_verify_found_questions"));
 
 1266        $this->tpl->setVariable(
"VERIFICATION_HEADING", $this->lng->txt(
"import_tst"));
 
 1267        $this->tpl->setVariable(
"FORMACTION", $this->ctrl->getFormAction($this));
 
 1269        $this->tpl->setVariable(
"QUESTIONPOOL_ID", $QplOrTstID);
 
 1270        $this->tpl->setVariable(
"VALUE_IMPORT", $this->lng->txt(
"import"));
 
 1271        $this->tpl->setVariable(
"VALUE_CANCEL", $this->lng->txt(
"cancel"));
 
 1272        $this->tpl->parseCurrentBlock();
 
 1280        include_once 
"./Modules/Test/classes/class.ilObjTest.php";
 
 1284        $newObj->setType(
$_GET[
"new_type"]);
 
 1286        $newObj->setTitle(
"dummy");
 
 1288        $newObj->setDescription(
"test import");
 
 1290        $newObj->create(
true);
 
 1292        $newObj->createReference();
 
 1294        $newObj->putInTree(
$_GET[
"ref_id"]);
 
 1296        $newObj->setPermissions(
$_GET[
"ref_id"]);
 
 1298        $newObj->mark_schema->flush();
 
 1301        include_once 
"./Services/QTI/classes/class.ilQTIParser.php";
 
 1305        if (!isset(
$_POST[
"qpl"]) || 
"-1" === (
string) 
$_POST[
"qpl"]) {
 
 1306            $questionParentObjId = $newObj->getId();
 
 1308            $questionParentObjId = 
$_POST[
"qpl"];
 
 1311        if (is_file(
$_SESSION[
"tst_import_dir"] . 
'/' . 
$_SESSION[
"tst_import_subdir"] . 
"/manifest.xml")) {
 
 1312            $newObj->saveToDb();
 
 1315            $_SESSION[
'tst_import_qst_parent'] = $questionParentObjId;
 
 1317            $fileName = 
$_SESSION[
'tst_import_subdir'] . 
'.zip';
 
 1318            $fullPath = 
$_SESSION[
'tst_import_dir'] . 
'/' . $fileName;
 
 1320            include_once(
"./Services/Export/classes/class.ilImport.php");
 
 1322            $map = $imp->getMapping();
 
 1323            $map->addMapping(
'Modules/Test', 
'tst', 
'new_id', $newObj->getId());
 
 1324            $imp->importObject($newObj, $fullPath, $fileName, 
'tst', 
'Modules/Test', 
true);
 
 1327            if (!isset(
$_POST[
"ident"]) || !is_array(
$_POST[
"ident"]) || !count(
$_POST[
"ident"])) {
 
 1328                $qtiParser->setIgnoreItemsEnabled(
true);
 
 1330            $qtiParser->setTestObject($newObj);
 
 1331            $result = $qtiParser->startParsing();
 
 1332            $newObj->saveToDb();
 
 1335            include_once(
"./Modules/LearningModule/classes/class.ilContObjParser.php");
 
 1337            $contParser->setQuestionMapping($qtiParser->getImportMapping());
 
 1338            $contParser->startParsing();
 
 1340            if (isset(
$_POST[
"ident"]) && is_array(
$_POST[
"ident"]) && count(
$_POST[
"ident"]) == $qtiParser->getNumImportedItems()) {
 
 1342                if (@file_exists(
$_SESSION[
"tst_import_results_file"])) {
 
 1343                    include_once(
"./Modules/Test/classes/class.ilTestResultsImportParser.php");
 
 1345                    $results->setQuestionIdMapping($qtiParser->getQuestionIdMapping());
 
 1357        ilUtil::redirect(
"ilias.php?ref_id=" . $newObj->getRefId() . 
"&baseClass=ilObjTestGUI");
 
 1377        include_once(
"./Modules/File/classes/class.ilObjFile.php");
 
 1379        $fileObj->sendFile();
 
 1388        include_once(
"./Modules/TestQuestionPool/classes/class.ilAssQuestionPageGUI.php");
 
 1390        $page_gui->showMediaFullscreen();
 
 1398        include_once(
"./Modules/TestQuestionPool/classes/class.ilAssQuestionPage.php");
 
 1400        $pg_obj->send_paragraph(
$_GET[
"par_id"], 
$_GET[
"downloadtitle"]);
 
 1413        $this->questionBrowser();
 
 1425        $this->questionBrowser();
 
 1437        $this->ctrl->redirect($this, 
"questions");
 
 1451        $parent_ref = 
$tree->getParentId($this->object->getRefId());
 
 1452        include_once 
"./Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php";
 
 1454        $qpl->setType(
"qpl");
 
 1455        $qpl->setTitle(
$name);
 
 1458        $qpl->createReference();
 
 1459        $qpl->putInTree($parent_ref);
 
 1460        $qpl->setPermissions($parent_ref);
 
 1463        return $qpl->getRefId();
 
 1473        $this->tpl->addBlockFile(
"ADM_CONTENT", 
"adm_content", 
"tpl.il_as_tst_random_select.html", 
"Modules/Test");
 
 1474        $questionpools =&$this->
object->getAvailableQuestionpools(
false, 
false, 
false, 
true);
 
 1475        $this->tpl->setCurrentBlock(
"option");
 
 1476        $this->tpl->setVariable(
"VALUE_OPTION", 
"0");
 
 1477        $this->tpl->setVariable(
"TEXT_OPTION", $this->lng->txt(
"all_available_question_pools"));
 
 1478        $this->tpl->parseCurrentBlock();
 
 1479        foreach ($questionpools as 
$key => $value) {
 
 1480            $this->tpl->setCurrentBlock(
"option");
 
 1481            $this->tpl->setVariable(
"VALUE_OPTION", 
$key);
 
 1482            $this->tpl->setVariable(
"TEXT_OPTION", $value[
"title"]);
 
 1483            $this->tpl->parseCurrentBlock();
 
 1485        $this->tpl->setCurrentBlock(
"hidden");
 
 1486        $this->tpl->setVariable(
"HIDDEN_NAME", 
"sel_question_types");
 
 1487        $this->tpl->setVariable(
"HIDDEN_VALUE", 
$_POST[
"sel_question_types"]);
 
 1488        $this->tpl->parseCurrentBlock();
 
 1489        $this->tpl->setCurrentBlock(
"adm_content");
 
 1490        $this->tpl->setVariable(
"FORM_ACTION", $this->ctrl->getFormAction($this));
 
 1491        $this->tpl->setVariable(
"TXT_QPL_SELECT", $this->lng->txt(
"tst_random_select_questionpool"));
 
 1492        $this->tpl->setVariable(
"TXT_NR_OF_QUESTIONS", $this->lng->txt(
"tst_random_nr_of_questions"));
 
 1493        $this->tpl->setVariable(
"BTN_SUBMIT", $this->lng->txt(
"submit"));
 
 1494        $this->tpl->setVariable(
"BTN_CANCEL", $this->lng->txt(
"cancel"));
 
 1495        $this->tpl->parseCurrentBlock();
 
 1507        $this->ctrl->redirect($this, 
"questions");
 
 1520        $question_array = $this->
object->randomSelectQuestions(
$_POST[
"nr_of_questions"], 
$_POST[
"sel_qpl"]);
 
 1521        $this->tpl->addBlockFile(
"ADM_CONTENT", 
"adm_content", 
"tpl.il_as_tst_random_question_offer.html", 
"Modules/Test");
 
 1522        $color_class = array(
"tblrow1", 
"tblrow2");
 
 1524        $questionpools =&$this->
object->getAvailableQuestionpools(
true);
 
 1525        include_once 
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
 
 1526        foreach ($question_array as $question_id) {
 
 1527            $dataset = $this->
object->getQuestionDataset($question_id);
 
 1528            $this->tpl->setCurrentBlock(
"QTab");
 
 1529            $this->tpl->setVariable(
"COLOR_CLASS", $color_class[
$counter % 2]);
 
 1530            $this->tpl->setVariable(
"QUESTION_TITLE", 
$dataset->title);
 
 1531            $this->tpl->setVariable(
"QUESTION_COMMENT", 
$dataset->description);
 
 1533            $this->tpl->setVariable(
"QUESTION_AUTHOR", 
$dataset->author);
 
 1534            $this->tpl->setVariable(
"QUESTION_POOL", $questionpools[
$dataset->obj_fi][
"title"]);
 
 1535            $this->tpl->parseCurrentBlock();
 
 1538        if (count($question_array) == 0) {
 
 1539            $this->tpl->setCurrentBlock(
"Emptytable");
 
 1540            $this->tpl->setVariable(
"TEXT_NO_QUESTIONS_AVAILABLE", $this->lng->txt(
"no_questions_available"));
 
 1541            $this->tpl->parseCurrentBlock();
 
 1543            $this->tpl->setCurrentBlock(
"Selectionbuttons");
 
 1544            $this->tpl->setVariable(
"BTN_YES", $this->lng->txt(
"random_accept_sample"));
 
 1545            $this->tpl->setVariable(
"BTN_NO", $this->lng->txt(
"random_another_sample"));
 
 1546            $this->tpl->parseCurrentBlock();
 
 1548        $chosen_questions = join($question_array, 
",");
 
 1549        $this->tpl->setCurrentBlock(
"adm_content");
 
 1550        $this->tpl->setVariable(
"FORM_ACTION", $this->ctrl->getFormAction($this));
 
 1551        $this->tpl->setVariable(
"QUESTION_TITLE", $this->lng->txt(
"tst_question_title"));
 
 1552        $this->tpl->setVariable(
"QUESTION_COMMENT", $this->lng->txt(
"description"));
 
 1553        $this->tpl->setVariable(
"QUESTION_TYPE", $this->lng->txt(
"tst_question_type"));
 
 1554        $this->tpl->setVariable(
"QUESTION_AUTHOR", $this->lng->txt(
"author"));
 
 1555        $this->tpl->setVariable(
"QUESTION_POOL", $this->lng->txt(
"qpl"));
 
 1556        $this->tpl->setVariable(
"VALUE_CHOSEN_QUESTIONS", $chosen_questions);
 
 1557        $this->tpl->setVariable(
"VALUE_QUESTIONPOOL_SELECTION", 
$_POST[
"sel_qpl"]);
 
 1558        $this->tpl->setVariable(
"VALUE_NR_OF_QUESTIONS", 
$_POST[
"nr_of_questions"]);
 
 1559        $this->tpl->setVariable(
"TEXT_QUESTION_OFFER", $this->lng->txt(
"tst_question_offer"));
 
 1560        $this->tpl->setVariable(
"BTN_CANCEL", $this->lng->txt(
"cancel"));
 
 1561        $this->tpl->parseCurrentBlock();
 
 1573        $selected_array = explode(
",", 
$_POST[
"chosen_questions"]);
 
 1574        if (!count($selected_array)) {
 
 1577            $total = $this->
object->evalTotalPersons();
 
 1584            foreach ($selected_array as 
$key => $value) {
 
 1585                $this->
object->insertQuestion($this->testQuestionSetConfigFactory->getQuestionSetConfig(), $value);
 
 1587            $this->
object->saveCompleteStatus($this->testQuestionSetConfigFactory->getQuestionSetConfig());
 
 1589            $this->ctrl->redirect($this, 
"questions");
 
 1596        $this->questionBrowser();
 
 1608        $qpl_ref_id = $_REQUEST[
"sel_qpl"];
 
 1610        $qpl_mode = $_REQUEST[
'usage'];
 
 1612        if (isset($_REQUEST[
'qtype'])) {
 
 1613            include_once 
'Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php';
 
 1615        } elseif (isset($_REQUEST[
'sel_question_types'])) {
 
 1616            $sel_question_types = $_REQUEST[
"sel_question_types"];
 
 1619        if (!$qpl_mode || ($qpl_mode == 2 && strcmp($_REQUEST[
"txt_qpl"], 
"") == 0) || ($qpl_mode == 3 && strcmp($qpl_ref_id, 
"") == 0)) {
 
 1622            $_REQUEST[
'sel_question_types'] = $sel_question_types;
 
 1627            $_SESSION[
"test_id"] = $this->
object->getRefId();
 
 1628            if ($qpl_mode == 2 && strcmp($_REQUEST[
"txt_qpl"], 
"") != 0) {
 
 1631            } elseif ($qpl_mode == 1) {
 
 1632                $qpl_ref_id = 
$_GET[
"ref_id"];
 
 1635            include_once 
"./Modules/TestQuestionPool/classes/class.ilObjQuestionPoolGUI.php";
 
 1636            $baselink = 
"ilias.php?baseClass=ilObjQuestionPoolGUI&ref_id=" . $qpl_ref_id . 
"&cmd=createQuestionForTest&test_ref_id=" . 
$_GET[
"ref_id"] . 
"&calling_test=" . 
$_GET[
"ref_id"] . 
"&sel_question_types=" . $sel_question_types;
 
 1638            if (isset($_REQUEST[
'prev_qid'])) {
 
 1639                $baselink .= 
'&prev_qid=' . $_REQUEST[
'prev_qid'];
 
 1640            } elseif (isset($_REQUEST[
'position'])) {
 
 1641                $baselink .= 
'&prev_qid=' . $_REQUEST[
'position'];
 
 1644            if ($_REQUEST[
'test_express_mode']) {
 
 1645                $baselink .= 
'&test_express_mode=1';
 
 1648            if (isset($_REQUEST[
'add_quest_cont_edit_mode'])) {
 
 1651                    "add_quest_cont_edit_mode={$_REQUEST['add_quest_cont_edit_mode']}",
 
 1656            #var_dump($_REQUEST['prev_qid']); 
 1672        $this->ctrl->redirect($this, 
"questions");
 
 1687        $questionpools =&$this->
object->getAvailableQuestionpools(
false, 
false, 
false, 
true, 
false, 
"write");
 
 1689        if ($this->object->getPoolUsage()) {
 
 1692            include_once 
"Services/Form/classes/class.ilPropertyFormGUI.php";
 
 1695            $form->setFormAction(
$ilCtrl->getFormAction($this, 
"executeCreateQuestion"));
 
 1696            $form->setTitle(
$lng->txt(
"ass_create_question"));
 
 1697            include_once 
'Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php';
 
 1701            $hidden->setValue($_REQUEST[
"sel_question_types"]);
 
 1702            $form->addItem($hidden);
 
 1709                    $lng->txt(
'tst_add_quest_cont_edit_mode_default'),
 
 1714                    $lng->txt(
'tst_add_quest_cont_edit_mode_page_object'),
 
 1720                $form->addItem($ri, 
true);
 
 1724                $form->addItem($hi, 
true);
 
 1729            $usage->setRequired(
true);
 
 1730            $no_pool = 
new ilRadioOption($this->lng->txt(
"assessment_no_pool"), 1);
 
 1731            $usage->addOption($no_pool);
 
 1732            $existing_pool = 
new ilRadioOption($this->lng->txt(
"assessment_existing_pool"), 3);
 
 1733            $usage->addOption($existing_pool);
 
 1734            $new_pool = 
new ilRadioOption($this->lng->txt(
"assessment_new_pool"), 2);
 
 1735            $usage->addOption($new_pool);
 
 1736            $form->addItem($usage);
 
 1738            $usage->setValue(1);
 
 1741            $pools_data = array();
 
 1742            foreach ($questionpools as 
$key => $p) {
 
 1743                $pools_data[
$key] = $p[
'title'];
 
 1745            $pools = 
new ilSelectInputGUI($this->lng->txt(
"select_questionpool"), 
"sel_qpl");
 
 1746            $pools->setOptions($pools_data);
 
 1747            $existing_pool->addSubItem($pools);
 
 1750            $this->lng->loadLanguageModule(
'rbac');
 
 1753            $name->setMaxLength(50);
 
 1754            $new_pool->addSubItem(
$name);
 
 1756            $form->addCommandButton(
"executeCreateQuestion", 
$lng->txt(
"submit"));
 
 1757            $form->addCommandButton(
"cancelCreateQuestion", 
$lng->txt(
"cancel"));
 
 1759            return $this->tpl->setVariable(
'ADM_CONTENT', 
$form->getHTML());
 
 1763            $ilCtrl->setParameterByClass(
'iltestexpresspageobjectgui', 
'sel_question_types', $_REQUEST[
"sel_question_types"]);
 
 1764            $ilCtrl->setParameterByClass(
'iltestexpresspageobjectgui', 
'add_quest_cont_edit_mode', $_REQUEST[
"add_quest_cont_edit_mode"]);
 
 1765            $link = 
$ilCtrl->getLinkTargetByClass(
'iltestexpresspageobjectgui', 
'handleToolbarCommand', 
'', 
false, 
false);
 
 1775        $removeQuestionIds = (array) 
$_POST[
"q_id"];
 
 1777        $questions = $this->
object->getQuestionTitlesAndIndexes();
 
 1779        $this->
object->removeQuestions($removeQuestionIds);
 
 1781        $this->
object->saveCompleteStatus($this->testQuestionSetConfigFactory->getQuestionSetConfig());
 
 1785        if ($_REQUEST[
'test_express_mode']) {
 
 1788            $deleted_tmp = $removeQuestionIds;
 
 1789            $first       = array_shift($deleted_tmp);
 
 1790            foreach ((array) $questions as 
$key => $value) {
 
 1791                if (!in_array(
$key, $removeQuestionIds)) {
 
 1799                } elseif (
$key == $first) {
 
 1804                    $first = array_shift($deleted_tmp);
 
 1809                count($questions) == count($removeQuestionIds) ||
 
 1812                $this->ctrl->setParameter($this, 
'q_id', 
'');
 
 1813                $this->ctrl->redirect($this, 
'showPage');
 
 1816            $this->ctrl->setParameter($this, 
'q_id', $return_to);
 
 1817            $this->ctrl->redirect($this, 
"showPage");
 
 1819            $this->ctrl->setParameter($this, 
'q_id', 
'');
 
 1820            $this->ctrl->redirect($this, 
'questions');
 
 1833        if ($_REQUEST[
'test_express_mode']) {
 
 1834            $this->ctrl->setParameter($this, 
'q_id', $_REQUEST[
'q_id']);
 
 1835            $this->ctrl->redirect($this, 
"showPage");
 
 1837            $this->ctrl->redirect($this, 
"questions");
 
 1850        $total = $this->
object->evalTotalPersons();
 
 1853            $question = 
sprintf($this->lng->txt(
"tst_remove_questions_and_results"), 
$total);
 
 1855            if (count($checked_questions) == 1) {
 
 1856                $question = $this->lng->txt(
"tst_remove_question");
 
 1858                $question = $this->lng->txt(
"tst_remove_questions");
 
 1862        include_once(
"./Services/Utilities/classes/class.ilConfirmationGUI.php");
 
 1864        $cgui->setHeaderText($question);
 
 1866        $this->ctrl->saveParameter($this, 
'test_express_mode');
 
 1867        $this->ctrl->saveParameter($this, 
'q_id');
 
 1869        $cgui->setFormAction($this->ctrl->getFormAction($this));
 
 1870        $cgui->setCancel($this->lng->txt(
"cancel"), 
"cancelRemoveQuestions");
 
 1871        $cgui->setConfirm($this->lng->txt(
"confirm"), 
"confirmRemoveQuestions");
 
 1873        include_once 
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
 
 1874        $removablequestions =&$this->
object->getTestQuestions();
 
 1875        if (count($removablequestions)) {
 
 1876            foreach ($removablequestions as 
$data) {
 
 1877                if (in_array(
$data[
"question_id"], $checked_questions)) {
 
 1879                    $txt .= 
' [' . $this->lng->txt(
'question_id_short') . 
': ' . 
$data[
'question_id'] . 
']';
 
 1881                    if (
$data[
"description"]) {
 
 1882                        $txt .= 
"<div class=\"small\">" . 
$data[
"description"] . 
"</div>";
 
 1885                    $cgui->addItem(
"q_id[]", 
$data[
"question_id"], 
$txt);
 
 1890        $this->tpl->setContent($cgui->getHTML());
 
 1899        $checked_questions = $_REQUEST[
"q_id"];
 
 1901        if (!is_array($checked_questions) && $checked_questions) {
 
 1902            $checked_questions = array($checked_questions);
 
 1905        if (!is_array($checked_questions)) {
 
 1906            $checked_questions = [];
 
 1909        if (count($checked_questions) > 0) {
 
 1911        } elseif (0 === count($checked_questions)) {
 
 1913            $this->ctrl->redirect($this, 
"questions");
 
 1922        $selected_questions = 
null;
 
 1923        $selected_questions = 
$_POST[
'q_id'];
 
 1924        if (is_array($selected_questions)) {
 
 1925            $_SESSION[
'tst_qst_move_' . $this->
object->getTestId()] = 
$_POST[
'q_id'];
 
 1930        $this->ctrl->redirect($this, 
'questions');
 
 1939        $move_questions = 
$_SESSION[
'tst_qst_move_' . $this->
object->getTestId()];
 
 1941        if (!is_array(
$_POST[
'q_id']) || 0 === count(
$_POST[
'q_id'])) {
 
 1943            $this->ctrl->redirect($this, 
'questions');
 
 1945        if (count(
$_POST[
'q_id']) > 1) {
 
 1947            $this->ctrl->redirect($this, 
'questions');
 
 1950        $this->
object->moveQuestions(
$_SESSION[
'tst_qst_move_' . $this->object->getTestId()], 
$_POST[
'q_id'][0], $insert_mode);
 
 1952        unset(
$_SESSION[
'tst_qst_move_' . $this->object->getTestId()]);
 
 1953        $this->ctrl->redirect($this, 
"questions");
 
 1962        $move_questions = 
$_SESSION[
'tst_qst_move_' . $this->
object->getTestId()];
 
 1963        if (!is_array(
$_POST[
'q_id']) || 0 === count(
$_POST[
'q_id'])) {
 
 1965            $this->ctrl->redirect($this, 
'questions');
 
 1967        if (count(
$_POST[
'q_id']) > 1) {
 
 1969            $this->ctrl->redirect($this, 
'questions');
 
 1972        $this->
object->moveQuestions(
$_SESSION[
'tst_qst_move_' . $this->object->getTestId()], 
$_POST[
'q_id'][0], $insert_mode);
 
 1974        unset(
$_SESSION[
'tst_qst_move_' . $this->object->getTestId()]);
 
 1975        $this->ctrl->redirect($this, 
"questions");
 
 1985        $selected_array = (is_array(
$_POST[
'q_id'])) ? 
$_POST[
'q_id'] : array();
 
 1986        if (!count($selected_array)) {
 
 1988            $this->ctrl->redirect($this, 
"browseForQuestions");
 
 1990            include_once 
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
 
 1991            $manscoring = 
false;
 
 1992            foreach ($selected_array as 
$key => $value) {
 
 1993                $this->
object->insertQuestion($this->testQuestionSetConfigFactory->getQuestionSetConfig(), $value);
 
 1998            $this->
object->saveCompleteStatus($this->testQuestionSetConfigFactory->getQuestionSetConfig());
 
 2004            $this->ctrl->redirect($this, 
"questions");
 
 2013        $ilHelp = 
$DIC[
'ilHelp']; 
 
 2015        $subScreenId = array(
'createQuestion');
 
 2017        include_once 
"Services/Form/classes/class.ilPropertyFormGUI.php";
 
 2019        $ilCtrl->setParameter($this, 
'qtype', $_REQUEST[
'qtype']);
 
 2023        $form->setFormAction(
$ilCtrl->getFormAction($this, 
"executeCreateQuestion"));
 
 2024        $form->setTitle(
$lng->txt(
"ass_create_question"));
 
 2025        include_once 
'Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php';
 
 2028        $questionTypes = $pool->getQuestionTypes(
false, 
true);
 
 2032        foreach ($questionTypes as $label => 
$data) {
 
 2036        include_once(
"./Services/Form/classes/class.ilSelectInputGUI.php");
 
 2042        $questions = $this->
object->getQuestionTitlesAndIndexes();
 
 2050            $si->setValue($_REQUEST[
'q_id']);
 
 2056            $subScreenId[] = 
'editMode';
 
 2061                $lng->txt(
'tst_add_quest_cont_edit_mode_default'),
 
 2066                $lng->txt(
'tst_add_quest_cont_edit_mode_page_object'),
 
 2072            $form->addItem($ri, 
true);
 
 2076            $form->addItem($hi, 
true);
 
 2079        if ($this->object->getPoolUsage()) {
 
 2080            $subScreenId[] = 
'poolSelect';
 
 2084            $usage->setRequired(
true);
 
 2085            $no_pool = 
new ilRadioOption($this->lng->txt(
"assessment_no_pool"), 1);
 
 2086            $usage->addOption($no_pool);
 
 2087            $existing_pool = 
new ilRadioOption($this->lng->txt(
"assessment_existing_pool"), 3);
 
 2088            $usage->addOption($existing_pool);
 
 2089            $new_pool = 
new ilRadioOption($this->lng->txt(
"assessment_new_pool"), 2);
 
 2090            $usage->addOption($new_pool);
 
 2091            $form->addItem($usage);
 
 2093            $usage->setValue(1);
 
 2096            $pools_data = array();
 
 2097            foreach ($questionpools as 
$key => $p) {
 
 2098                $pools_data[
$key] = $p[
'title'];
 
 2100            $pools = 
new ilSelectInputGUI($this->lng->txt(
"select_questionpool"), 
"sel_qpl");
 
 2101            $pools->setOptions($pools_data);
 
 2102            $existing_pool->addSubItem($pools);
 
 2106            $name->setMaxLength(50);
 
 2107            $new_pool->addSubItem(
$name);
 
 2110        $form->addCommandButton(
"executeCreateQuestion", 
$lng->txt(
"create"));
 
 2111        $form->addCommandButton(
"questions", 
$lng->txt(
"cancel"));
 
 2113        $ilHelp->setScreenId(
'assQuestions');
 
 2114        $ilHelp->setSubScreenId(implode(
'_', $subScreenId));
 
 2116        return $tpl->setContent(
$form->getHTML());
 
 2121        global $ilAccess, $ilTabs;
 
 2123        $ilTabs->activateTab(
'assQuestions');
 
 2126        $this->ctrl->setParameter($this, 
'test_express_mode', 
'');
 
 2128        if (!$ilAccess->checkAccess(
"write", 
"", $this->ref_id)) {
 
 2131            $this->ctrl->redirect($this, 
"infoScreen");
 
 2134        if (
$_GET[
'browse']) {
 
 2135            return $this->questionbrowser();
 
 2141        $this->ctrl->setParameter($this, 
'q_id', 
'');
 
 2144            ilUtil::redirect(
"ilias.php?baseClass=ilObjQuestionPoolGUI&ref_id=" . 
$_GET[
"eqpl"] . 
"&cmd=editQuestionForTest&calling_test=" . 
$_GET[
"ref_id"] . 
"&q_id=" . 
$_GET[
"eqid"]);
 
 2147        if (
$_GET[
"up"] > 0) {
 
 2148            $this->
object->questionMoveUp(
$_GET[
"up"]);
 
 2150        if (
$_GET[
"down"] > 0) {
 
 2151            $this->
object->questionMoveDown(
$_GET[
"down"]);
 
 2155            $selected_array = array();
 
 2156            array_push($selected_array, 
$_GET[
"add"]);
 
 2157            $total = $this->
object->evalTotalPersons();
 
 2164            $this->insertQuestions($selected_array);
 
 2168        $this->tpl->addBlockFile(
"ADM_CONTENT", 
"adm_content", 
"tpl.il_as_tst_questions.html", 
"Modules/Test");
 
 2170        $total = $this->
object->evalTotalPersons();
 
 2171        if ($ilAccess->checkAccess(
"write", 
"", $this->ref_id)) {
 
 2173                $link = $this->ctrl->getLinkTarget($this, 
"participants");
 
 2174                $link = 
"<a href=\"" . $link . 
"\">" . $this->lng->txt(
"test_has_datasets_warning_page_view_link") . 
"</a>";
 
 2175                ilUtil::sendInfo($this->lng->txt(
"test_has_datasets_warning_page_view") . 
" " . $link);
 
 2179                $ilToolbar->addButton($this->lng->txt(
"ass_create_question"), $this->ctrl->getLinkTarget($this, 
"addQuestion"));
 
 2181                if ($this->object->getPoolUsage()) {
 
 2182                    $ilToolbar->addSeparator();
 
 2184                    require_once 
'Modules/Test/classes/tables/class.ilTestQuestionBrowserTableGUI.php';
 
 2189                $ilToolbar->addSeparator();
 
 2190                $ilToolbar->addButton($this->lng->txt(
"random_selection"), $this->ctrl->getLinkTarget($this, 
"randomselect"));
 
 2194                $online_access = 
false;
 
 2195                if ($this->object->getFixedParticipants()) {
 
 2196                    include_once 
"./Modules/Test/classes/class.ilObjTestAccess.php";
 
 2198                    if ($online_access_result === 
true) {
 
 2199                        $online_access = 
true;
 
 2203                if ($this->object->isOnline() && $this->object->isComplete($this->testQuestionSetConfigFactory->getQuestionSetConfig())) {
 
 2204                    if ((!$this->object->getFixedParticipants() || $online_access) && $ilAccess->checkAccess(
"read", 
"", $this->ref_id)) {
 
 2205                        $testSession = $this->testSessionFactory->getSession();
 
 2206                        $testSequence = $this->testSequenceFactory->getSequenceByTestSession($testSession);
 
 2208                        $testPlayerGUI = $this->testPlayerFactory->getPlayerGUI();
 
 2210                        $executable = $this->
object->isExecutable($testSession, 
$ilUser->getId(), $allowPassIncrease = 
true);
 
 2212                        if ($executable[
"executable"]) {
 
 2213                            if ($testSession->getActiveId() > 0) {
 
 2216                                if ($testSequence->hasStarted($testSession)) {
 
 2217                                    $execTestLabel = $this->lng->txt(
"tst_resume_test");
 
 2218                                    $execTestLink = $this->ctrl->getLinkTarget($testPlayerGUI, 
'resumePlayer');
 
 2220                                    $execTestLabel = $this->
object->getStartTestLabel($testSession->getActiveId());
 
 2221                                    $execTestLink = $this->ctrl->getLinkTarget($testPlayerGUI, 
'startPlayer');
 
 2226                                $execTestLabel = $this->
object->getStartTestLabel($testSession->getActiveId());
 
 2227                                $execTestLink = $this->ctrl->getLinkTarget($testPlayerGUI, 
'startPlayer');
 
 2230                            $ilToolbar->addSeparator();
 
 2231                            $ilToolbar->addButton($execTestLabel, $execTestLink);
 
 2238        $this->tpl->setCurrentBlock(
"adm_content");
 
 2239        include_once 
"./Modules/Test/classes/tables/class.ilTestQuestionsTableGUI.php";
 
 2240        $checked_move = is_array(
$_SESSION[
'tst_qst_move_' . $this->object->getTestId()]) && (count(
$_SESSION[
'tst_qst_move_' . $this->object->getTestId()]));
 
 2241        $table_gui = 
new ilTestQuestionsTableGUI($this, 
'questions', (($ilAccess->checkAccess(
"write", 
"", $this->ref_id) ? 
true : 
false)), $checked_move, 
$total);
 
 2242        $data = $this->
object->getTestQuestions();
 
 2243        $table_gui->setData(
$data);
 
 2244        $this->tpl->setVariable(
'QUESTIONBROWSER', $table_gui->getHTML());
 
 2245        $this->tpl->setVariable(
"ACTION_QUESTION_FORM", $this->ctrl->getFormAction($this));
 
 2246        $this->tpl->parseCurrentBlock();
 
 2255        require_once 
'Modules/Test/classes/tables/class.ilTestQuestionBrowserTableGUI.php';
 
 2283        require_once 
'Modules/Test/classes/class.ilTestParticipantData.php';
 
 2286        $participantData->load($this->object->getTestId());
 
 2288        $this->
object->removeTestResults($participantData);
 
 2291        $this->ctrl->redirect($this, 
"participants");
 
 2305        require_once 
'Modules/Test/classes/class.ilTestParticipantData.php';
 
 2308        if ($this->object->getFixedParticipants()) {
 
 2309            $participantData->setUserIds(
$_POST[
"chbUser"]);
 
 2311            $participantData->setActiveIds(
$_POST[
"chbUser"]);
 
 2314        $participantData->load($this->object->getTestId());
 
 2316        $this->
object->removeTestResults($participantData);
 
 2319        $this->ctrl->redirect($this, 
"participants");
 
 2331        $this->ctrl->redirect($this, 
"participants");
 
 2346        $this->tpl->addBlockFile(
"ADM_CONTENT", 
"adm_content", 
"tpl.il_as_tst_maintenance.html", 
"Modules/Test");
 
 2348        $this->tpl->setCurrentBlock(
"confirm_delete");
 
 2349        $this->tpl->setVariable(
"BTN_CONFIRM_DELETE_ALL", $this->lng->txt(
"confirm"));
 
 2350        $this->tpl->setVariable(
"BTN_CANCEL_DELETE_ALL", $this->lng->txt(
"cancel"));
 
 2351        $this->tpl->parseCurrentBlock();
 
 2353        $this->tpl->setCurrentBlock(
"adm_content");
 
 2354        $this->tpl->setVariable(
"FORM_ACTION", $this->ctrl->getFormAction($this));
 
 2355        $this->tpl->parseCurrentBlock();
 
 2364        include_once(
"./Services/Utilities/classes/class.ilConfirmationGUI.php");
 
 2366        $cgui->setFormAction($this->ctrl->getFormAction($this, 
"participants"));
 
 2367        $cgui->setHeaderText($this->lng->txt(
"delete_all_user_data_confirmation"));
 
 2368        $cgui->setCancel($this->lng->txt(
"cancel"), 
"participants");
 
 2369        $cgui->setConfirm($this->lng->txt(
"proceed"), 
"confirmDeleteAllUserResults");
 
 2371        $this->tpl->setContent($cgui->getHTML());
 
 2383        if (count(
$_POST[
"chbUser"]) == 0) {
 
 2385            $this->ctrl->redirect($this, 
"participants");
 
 2388        include_once(
"./Services/Utilities/classes/class.ilConfirmationGUI.php");
 
 2390        $cgui->setHeaderText($this->lng->txt(
"confirm_delete_single_user_data"));
 
 2392        $cgui->setFormAction($this->ctrl->getFormAction($this));
 
 2393        $cgui->setCancel($this->lng->txt(
"cancel"), 
"cancelDeleteSelectedUserData");
 
 2394        $cgui->setConfirm($this->lng->txt(
"confirm"), 
"confirmDeleteSelectedUserData");
 
 2396        include_once 
'./Services/User/classes/class.ilObjUser.php';
 
 2397        foreach (
$_POST[
"chbUser"] as 
$key => $active_id) {
 
 2398            if ($this->object->getFixedParticipants()) {
 
 2399                $user_id = $active_id;
 
 2401                $user_id = $this->
object->_getUserIdFromActiveId($active_id);
 
 2405            if ($this->object->getAnonymity()) {
 
 2406                $name = $this->lng->txt(
"anonymous");
 
 2407            } elseif (
$user[
"lastname"]) {
 
 2409                    $user[
"login"] . 
")";
 
 2411                $name = $this->lng->txt(
"deleted_user");
 
 2419                $this->lng->txt(
"usr")
 
 2423        $this->tpl->setContent($cgui->getHTML());
 
 2435        include_once 
"./Modules/Test/classes/tables/class.ilTestHistoryTableGUI.php";
 
 2437        $table_gui->setTestObject($this->
object);
 
 2438        include_once 
"./Modules/Test/classes/class.ilObjAssessmentFolder.php";
 
 2440        $table_gui->setData(
$log);
 
 2441        $this->tpl->setVariable(
'ADM_CONTENT', $table_gui->getHTML());
 
 2446        include_once(
"Services/Form/classes/class.ilPropertyFormGUI.php");
 
 2448        $form->setTarget(
"_top");
 
 2450        $this->ctrl->setParameter($this, 
"new_type", $new_type);
 
 2451        $form->setFormAction($this->ctrl->getFormAction($this));
 
 2452        $form->setTitle($this->lng->txt(
"import_tst"));
 
 2455        include_once(
"./Services/Form/classes/class.ilFileInputGUI.php");
 
 2456        $fi = 
new ilFileInputGUI($this->lng->txt(
"import_file"), 
"xmldoc");
 
 2457        $fi->setSuffixes(array(
"zip"));
 
 2458        $fi->setRequired(
true);
 
 2459        $form->addItem($fi);
 
 2462        include_once(
"./Modules/Test/classes/class.ilObjTest.php");
 
 2464        $questionpools = $tst->getAvailableQuestionpools(
true, 
false, 
true, 
true);
 
 2465        if (count($questionpools)) {
 
 2466            $options = array(
"-1" => $this->lng->txt(
"dont_use_questionpool"));
 
 2467            foreach ($questionpools as 
$key => $value) {
 
 2471            $pool = 
new ilSelectInputGUI($this->lng->txt(
"select_questionpool"), 
"qpl");
 
 2472            $pool->setInfo($this->lng->txt(
'select_question_pool_info'));
 
 2474            $form->addItem($pool);
 
 2477        $form->addCommandButton(
"importFile", $this->lng->txt(
"import"));
 
 2478        $form->addCommandButton(
"cancel", $this->lng->txt(
"cancel"));
 
 2490        $command = 
$_POST[
"command"];
 
 2491        if (strlen($command)) {
 
 2492            $method = $command . 
"Object";
 
 2493            if (method_exists($this, $method)) {
 
 2498        $this->ctrl->redirect($this, 
"participants");
 
 2508        global $ilAccess, $ilToolbar, 
$lng;
 
 2512        if (!$ilAccess->checkAccess(
"write", 
"", $this->ref_id)) {
 
 2515            $this->ctrl->redirect($this, 
"infoScreen");
 
 2518        if ($this->testQuestionSetConfigFactory->getQuestionSetConfig()->areDepenciesBroken()) {
 
 2520                $this->testQuestionSetConfigFactory->getQuestionSetConfig()->getDepenciesBrokenMessage($this->lng)
 
 2522        } elseif ($this->testQuestionSetConfigFactory->getQuestionSetConfig()->areDepenciesInVulnerableState()) {
 
 2524                $this->testQuestionSetConfigFactory->getQuestionSetConfig()->getDepenciesInVulnerableStateMessage($this->lng)
 
 2528        if ($this->object->getFixedParticipants()) {
 
 2530            include_once 
'./Services/Search/classes/class.ilRepositorySearchGUI.php';
 
 2535                    'auto_complete_name'        => 
$lng->txt(
'user'),
 
 2536                    'submit_name'                       => 
$lng->txt(
'add')
 
 2540            $ilToolbar->addSeparator();
 
 2542            $search_btn->setCaption(
'tst_search_users');
 
 2543            $search_btn->setUrl($this->ctrl->getLinkTargetByClass(
'ilRepositorySearchGUI', 
'start'));
 
 2544            $ilToolbar->addButtonInstance($search_btn);
 
 2545            require_once  
'Services/UIComponent/Button/classes/class.ilLinkButton.php';
 
 2547            $participants =&$this->
object->getInvitedUsers();
 
 2549            $unfinished_passes = 
false;
 
 2550            foreach ($participants as 
$data) {
 
 2551                $maxpass = $this->
object->_getMaxPass($data[
"active_id"]);
 
 2552                if (!is_null($maxpass)) {
 
 2556                if (strlen(
$data[
"active_id"])) {
 
 2557                    $last_access = $this->
object->_getLastAccess($data[
"active_id"]);
 
 2560                $this->ctrl->setParameterByClass(
'iltestevaluationgui', 
'active_id', 
$data[
'active_id']);
 
 2562                if (
$data[
'active_id'] == 
null) { 
 
 2563                    if (strlen(
$data[
"firstname"] . 
$data[
"lastname"]) == 0) {
 
 2564                        $fullname = 
$lng->txt(
"deleted_user");
 
 2565                    } elseif ($this->object->getAnonymity()) {
 
 2566                        $fullname = 
$lng->txt(
'anonymous');
 
 2568                        $fullname = trim(
$data[
"lastname"] . 
", " . 
$data[
"firstname"] . 
" " . 
$data[
"title"]);
 
 2571                    include_once 
"./Modules/Test/classes/class.ilObjTestAccess.php";
 
 2575                $unfinished_pass_data = 0;
 
 2576                if (
$data[
"unfinished_passes"] == 1) {
 
 2577                    $unfinished_pass_data = 1;
 
 2578                    $unfinished_passes = 
true;
 
 2581                array_push(
$rows, array(
 
 2582                    'usr_id' => 
$data[
"usr_id"],
 
 2583                    'active_id' => 
$data[
'active_id'],
 
 2584                    'login' => 
$data[
"login"],
 
 2585                    'clientip' => 
$data[
"clientip"],
 
 2586                    'firstname' => 
$data[
"firstname"],
 
 2587                    'lastname' => 
$data[
"lastname"],
 
 2588                    'name' => $fullname,
 
 2589                    'started' => (
$data[
"active_id"] > 0) ? 1 : 0,
 
 2590                    'unfinished' => $unfinished_pass_data,
 
 2591                    'finished' => (
$data[
"test_finished"] == 1) ? 1 : 0,
 
 2593                    'maxpass' => $maxpass,
 
 2594                    'result' => $this->ctrl->getLinkTargetByClass(
'iltestevaluationgui', 
'outParticipantsResultsOverview'),
 
 2595                    'finish_link' => $this->ctrl->getLinkTargetByClass(
'iltestevaluationgui', 
'finishTestPassForSingleUser')
 
 2598            include_once 
"./Modules/Test/classes/tables/class.ilTestFixedParticipantsTableGUI.php";
 
 2602                $this->testQuestionSetConfigFactory->getQuestionSetConfig()->areDepenciesBroken(),
 
 2603                $this->object->getAnonymity(),
 
 2606            $table_gui->setFilterCommand(
'fpSetFilter');
 
 2607            $table_gui->setResetCommand(
'fpResetFiler');
 
 2609            $table_gui->setData(
$rows);
 
 2610            $this->tpl->setVariable(
'ADM_CONTENT', $table_gui->getHTML());
 
 2612            if (count(
$rows) > 0) {
 
 2613                $ilToolbar->addSeparator();
 
 2615                $delete_all_results_btn->setCaption(
'delete_all_user_data');
 
 2616                $delete_all_results_btn->setUrl($this->ctrl->getLinkTarget($this, 
'deleteAllUserResults'));
 
 2617                $ilToolbar->addButtonInstance($delete_all_results_btn);
 
 2621            $participants =&$this->
object->getTestParticipants();
 
 2623            $unfinished_passes = 
false;
 
 2625            foreach ($participants as 
$data) {
 
 2626                $maxpass = $this->
object->_getMaxPass($data[
"active_id"]);
 
 2627                if (!is_null($maxpass)) {
 
 2631                if (strlen(
$data[
"active_id"])) {
 
 2632                    $last_access = $this->
object->_getLastAccess($data[
"active_id"]);
 
 2635                $this->ctrl->setParameterByClass(
'iltestevaluationgui', 
'active_id', 
$data[
'active_id']);
 
 2637                $unfinished_pass_data = 0;
 
 2638                if (
$data[
"unfinished_passes"] == 1) {
 
 2639                    $unfinished_pass_data = 1;
 
 2640                    $unfinished_passes = 
true;
 
 2643                include_once 
"./Modules/Test/classes/class.ilObjTestAccess.php";
 
 2645                array_push(
$rows, array(
 
 2646                    'usr_id'            => 
$data[
"active_id"],
 
 2647                    'active_id'         => 
$data[
'active_id'],
 
 2648                    'login'                     => 
$data[
"login"],
 
 2649                    'name'                      => $fullname,
 
 2650                    'firstname'         => 
$data[
"firstname"],
 
 2651                    'lastname'          => 
$data[
"lastname"],
 
 2652                    'started'           => (
$data[
"active_id"] > 0) ? 1 : 0,
 
 2653                    'unfinished'        => $unfinished_pass_data,
 
 2654                    'finished'          => (
$data[
"test_finished"] == 1) ? 1 : 0,
 
 2656                    'maxpass'           => $maxpass,
 
 2657                    'result'            => $this->ctrl->getLinkTargetByClass(
'iltestevaluationgui', 
'outParticipantsResultsOverview'),
 
 2658                    'finish_link'       => $this->ctrl->getLinkTargetByClass(
'iltestevaluationgui', 
'finishTestPassForSingleUser')
 
 2661            include_once 
"./Modules/Test/classes/tables/class.ilTestParticipantsTableGUI.php";
 
 2665                $this->testQuestionSetConfigFactory->getQuestionSetConfig()->areDepenciesBroken(),
 
 2666                $this->object->getAnonymity(),
 
 2670            if (count(
$rows) > 0) {
 
 2671                require_once  
'Services/UIComponent/Button/classes/class.ilLinkButton.php';
 
 2673                $delete_all_results_btn->setCaption(
'delete_all_user_data');
 
 2674                $delete_all_results_btn->setUrl($this->ctrl->getLinkTarget($this, 
'deleteAllUserResults'));
 
 2675                $ilToolbar->addStickyItem($delete_all_results_btn);
 
 2680            $table_gui->setFilterCommand(
'npSetFilter');
 
 2681            $table_gui->setResetCommand(
'npResetFilter');
 
 2683            $table_gui->setData(
$rows);
 
 2684            $this->tpl->setVariable(
'ADM_CONTENT', $table_gui->getHTML());
 
 2694        if ($unfinished_passes) {
 
 2695            $ilToolbar->addSeparator();
 
 2697            $finish_all_user_passes_btn->setCaption(
'finish_all_user_passes');
 
 2698            $finish_all_user_passes_btn->setUrl($this->ctrl->getLinkTargetByClass(
'iltestevaluationgui', 
'finishAllUserPasses'));
 
 2699            $ilToolbar->addButtonInstance($finish_all_user_passes_btn);
 
 2707        include_once 
"./Modules/Test/classes/tables/class.ilTimingOverviewTableGUI.php";
 
 2710        $participants =&$this->
object->getTestParticipants();#
 
 2711        $times = $this->
object->getStartingTimeOfParticipants();
 
 2712        $addons = $this->
object->getTimeExtensionsOfParticipants();
 
 2714        $tbl_data = array();
 
 2715        foreach ($participants as $participant) {
 
 2719            if ($times[$participant[
'active_id']]) {
 
 2721                $tblRow[
'started'] = $started;
 
 2723                $tblRow[
'started'] = 
'';
 
 2726            if ($addons[$participant[
'active_id']] > 0) {
 
 2727                $tblRow[
'extratime'] = $addons[$participant[
'active_id']];
 
 2730            $tblRow[
'login'] = $participant[
'login'];
 
 2732            if ($this->object->getAnonymity()) {
 
 2733                $tblRow[
'name'] = $this->lng->txt(
"anonymous");
 
 2735                $tblRow[
'name'] = $participant[
'lastname'] . 
', ' . $participant[
'firstname'];
 
 2738            $tbl_data[] = $tblRow;
 
 2740        $table_gui->setData($tbl_data);
 
 2742        $this->tpl->setContent($table_gui->getHTML());
 
 2751        if (!$ilAccess->checkAccess(
"write", 
"", $this->ref_id)) {
 
 2754            $this->ctrl->redirect($this, 
"infoScreen");
 
 2757        if ($this->object->getProcessingTimeInSeconds() > 0 && $this->object->getNrOfTries() == 1) {
 
 2760                $res = $this->
object->addExtraTime(
$form->getInput(
'participant'), 
$form->getInput(
'extratime'));
 
 2762                $this->ctrl->redirect($this, 
'timingOverview');
 
 2764                return $this->tpl->setVariable(
"ADM_CONTENT", 
$form->getHTML());
 
 2775        include_once(
"./Services/Form/classes/class.ilPropertyFormGUI.php");
 
 2777        $form->setFormAction($this->ctrl->getFormAction($this));
 
 2778        $form->setTableWidth(
"100%");
 
 2779        $form->setId(
"tst_change_workingtime");
 
 2780        $form->setTitle($this->lng->txt(
"tst_change_workingtime"));
 
 2783        $participantslist = 
new ilSelectInputGUI($this->lng->txt(
'participants'), 
"participant");
 
 2784        $participants =&$this->
object->getTestParticipants();
 
 2785        $times = $this->
object->getStartingTimeOfParticipants();
 
 2786        $addons = $this->
object->getTimeExtensionsOfParticipants();
 
 2788            '' => $this->lng->txt(
'please_select'),
 
 2789            '0' => $this->lng->txt(
'all_participants')
 
 2791        foreach ($participants as $participant) {
 
 2794            if ($this->object->getAnonymity()) {
 
 2795                $name = $this->lng->txt(
"anonymous");
 
 2797                $name = $participant[
'lastname'] . 
', ' . $participant[
'firstname'];
 
 2801            if ($times[$participant[
'active_id']]) {
 
 2804            if ($addons[$participant[
'active_id']] > 0) {
 
 2805                $started .= 
", " . $this->lng->txt(
'extratime') . 
': ' . $addons[$participant[
'active_id']] . 
' ' . $this->lng->txt(
'minutes');
 
 2807            $options[$participant[
'active_id']] = $participant[
'login'] . 
' (' . 
$name . 
')' . $started;
 
 2809        $participantslist->setRequired(
true);
 
 2810        $participantslist->setOptions(
$options);
 
 2811        $form->addItem($participantslist);
 
 2814        $extratime = 
new ilNumberInputGUI($this->lng->txt(
"extratime"), 
"extratime");
 
 2815        $extratime->setInfo($this->lng->txt(
'tst_extratime_info'));
 
 2816        $extratime->setRequired(
true);
 
 2817        $extratime->setMinValue(0);
 
 2818        $extratime->setMinvalueShouldBeGreater(
false);
 
 2819        $extratime->setSuffix($this->lng->txt(
'minutes'));
 
 2820        $extratime->setSize(5);
 
 2821        $form->addItem($extratime);
 
 2823        if (is_array(
$_POST) && strlen(
$_POST[
'cmd'][
'timing'])) {
 
 2827        if ($ilAccess->checkAccess(
"write", 
"", 
$_GET[
"ref_id"])) {
 
 2828            $form->addCommandButton(
"timing", $this->lng->txt(
"save"));
 
 2830        $form->addCommandButton(
'timingOverview', $this->lng->txt(
"cancel"));
 
 2837        $this->tpl->setContent(
$form->getHTML());
 
 2844        $sess_filter = str_replace(
'"', 
'', $sess_filter);
 
 2845        $sess_filter = explode(
':', $sess_filter);
 
 2846        $filter = substr($sess_filter[2], 0, strlen($sess_filter[2])-1);
 
 2848        if ($filter == 
'all' || $filter == 
false) {
 
 2849            return $in_rows; #unchanged - no filter.
 
 2852        $with_result = array();
 
 2853        $without_result = array();
 
 2854        foreach ($in_rows as 
$row) {
 
 2856                'SELECT count(solution_id) count 
 2858                                WHERE active_fi = ' . 
$ilDB->quote(
$row[
'active_id'])
 
 2861            $count = $count[
'count'];
 
 2864                $without_result[] = 
$row;
 
 2866                $with_result[] = 
$row;
 
 2870        if ($filter == 
'withSolutions') {
 
 2871            return $with_result;
 
 2873        return $without_result;
 
 2878        include_once(
"./Modules/Test/classes/tables/class.ilTestFixedParticipantsTableGUI.php");
 
 2880        $table_gui->writeFilterToSession();        
 
 2881        $table_gui->resetOffset();                
 
 2887        include_once(
"./Modules/Test/classes/tables/class.ilTestFixedParticipantsTableGUI.php");
 
 2892            $this->object->getAnonymity(),
 
 2895        $table_gui->resetFilter();        
 
 2896        $table_gui->resetOffset();                
 
 2902        include_once(
"./Modules/Test/classes/tables/class.ilTestParticipantsTableGUI.php");
 
 2907            $this->object->getAnonymity(),
 
 2910        $table_gui->writeFilterToSession();        
 
 2911        $table_gui->resetOffset();                
 
 2917        include_once(
"./Modules/Test/classes/tables/class.ilTestParticipantsTableGUI.php");
 
 2922            $this->object->getAnonymity(),
 
 2925        $table_gui->resetFilter();        
 
 2926        $table_gui->resetOffset();                
 
 2940        $this->
showUserResults($show_pass_details = 
true, $show_answers = 
true, $show_reached_points = 
true);
 
 2953        $this->
showUserResults($show_pass_details = 
false, $show_answers = 
true);
 
 2966        $this->
showUserResults($show_pass_details = 
true, $show_answers = 
false);
 
 2974    public function showUserResults($show_pass_details, $show_answers, $show_reached_points = 
false)
 
 2976        $show_user_results = 
$_SESSION[
"show_user_results"];
 
 2978        if (count($show_user_results) == 0) {
 
 2980            $this->ctrl->redirect($this, 
"participants");
 
 2987            $this->tpl->setVariable(
"ADM_CONTENT", 
$template->get());
 
 2989            if ($this->object->getShowSolutionAnswersOnly()) {
 
 2997        if (is_array(
$_POST[
"chbUser"])) {
 
 2998            foreach (
$_POST[
"chbUser"] as $user_id) {
 
 2999                $this->
object->disinviteUser($user_id);
 
 3004        $this->ctrl->redirect($this, 
"participants");
 
 3009        if (is_array(
$_POST[
"chbUser"])) {
 
 3010            foreach (
$_POST[
"chbUser"] as $user_id) {
 
 3011                $this->
object->setClientIP($user_id, 
$_POST[
"clientip_" . $user_id]);
 
 3016        $this->ctrl->redirect($this, 
"participants");
 
 3028        global $ilAccess, $ilias;
 
 3029        if (!$ilAccess->checkAccess(
"write", 
"", $this->ref_id)) {
 
 3032            $this->ctrl->redirect($this, 
"infoScreen");
 
 3035        $isPdfDeliveryRequest = isset(
$_GET[
'pdf']) && 
$_GET[
'pdf'];
 
 3038        $template = 
new ilTemplate(
"tpl.il_as_tst_print_test_confirm.html", 
true, 
true, 
"Modules/Test");
 
 3040        if (!$isPdfDeliveryRequest) { 
 
 3041            $this->ctrl->setParameter($this, 
"pdf", 
"1");
 
 3042            $template->setCurrentBlock(
"pdf_export");
 
 3043            $template->setVariable(
"PDF_URL", $this->ctrl->getLinkTarget($this, 
"print"));
 
 3044            $this->ctrl->setParameter($this, 
"pdf", 
"");
 
 3045            $template->setVariable(
"PDF_TEXT", $this->lng->txt(
"pdf_export"));
 
 3048            $template->setCurrentBlock(
"navigation_buttons");
 
 3049            $template->setVariable(
"BUTTON_PRINT", $this->lng->txt(
"print"));
 
 3054            require_once 
'Services/PDFGeneration/classes/class.ilPDFGeneration.php';
 
 3065        require_once 
'Modules/Test/classes/class.ilTestQuestionHeaderBlockBuilder.php';
 
 3067        $questionHeaderBlockBuilder->setHeaderMode($this->object->getTitleOutput());
 
 3069        if ($isPdfDeliveryRequest) {
 
 3070            require_once 
'Services/WebAccessChecker/classes/class.ilWACSignedPath.php';
 
 3074        foreach ($this->object->questions as $question) {
 
 3076            $question_gui = $this->
object->createQuestionGUI(
"", $question);
 
 3078            if ($isPdfDeliveryRequest) {
 
 3082            $questionHeaderBlockBuilder->setQuestionTitle($question_gui->object->getTitle());
 
 3083            $questionHeaderBlockBuilder->setQuestionPoints($question_gui->object->getMaximumPoints());
 
 3084            $questionHeaderBlockBuilder->setQuestionPosition(
$counter);
 
 3085            $template->setVariable(
"QUESTION_HEADER", $questionHeaderBlockBuilder->getHTML());
 
 3087            $template->setVariable(
"TXT_QUESTION_ID", $this->lng->txt(
'question_id_short'));
 
 3088            $template->setVariable(
"QUESTION_ID", $question_gui->object->getId());
 
 3089            $result_output = $question_gui->getSolutionOutput(
"", 
null, 
false, 
true, 
false, $this->object->getShowSolutionFeedback());
 
 3090            $template->setVariable(
"SOLUTION_OUTPUT", $result_output);
 
 3091            $template->parseCurrentBlock(
"question");
 
 3093            $max_points += $question_gui->object->getMaximumPoints();
 
 3103        if ($isPdfDeliveryRequest) {
 
 3104            require_once 
'Modules/Test/classes/class.ilTestPDFGenerator.php';
 
 3107            $this->tpl->setVariable(
"PRINT_CONTENT", 
$template->get());
 
 3122        if (!$ilAccess->checkAccess(
"write", 
"", $this->ref_id)) {
 
 3125            $this->ctrl->redirect($this, 
"infoScreen");
 
 3128        $template = 
new ilTemplate(
"tpl.il_as_tst_print_test_confirm.html", 
true, 
true, 
"Modules/Test");
 
 3132        $isPdfDeliveryRequest = isset(
$_GET[
'pdf']) && 
$_GET[
'pdf'];
 
 3137        require_once 
'Modules/Test/classes/class.ilTestQuestionHeaderBlockBuilder.php';
 
 3139        $questionHeaderBlockBuilder->setHeaderMode($this->object->getTitleOutput());
 
 3141        if ($isPdfDeliveryRequest) {
 
 3142            require_once 
'Services/WebAccessChecker/classes/class.ilWACSignedPath.php';
 
 3146            require_once 
'Services/PDFGeneration/classes/class.ilPDFGeneration.php';
 
 3150        foreach ($this->object->questions as $question) {
 
 3152            $question_gui = $this->
object->createQuestionGUI(
"", $question);
 
 3155            $questionHeaderBlockBuilder->setQuestionTitle($question_gui->object->getTitle());
 
 3156            $questionHeaderBlockBuilder->setQuestionPoints($question_gui->object->getMaximumPoints());
 
 3157            $questionHeaderBlockBuilder->setQuestionPosition(
$counter);
 
 3158            $template->setVariable(
"QUESTION_HEADER", $questionHeaderBlockBuilder->getHTML());
 
 3160            $template->setVariable(
"SOLUTION_OUTPUT", $question_gui->getPreview(
false));
 
 3161            $template->parseCurrentBlock(
"question");
 
 3163            $max_points += $question_gui->object->getMaximumPoints();
 
 3179        if ($isPdfDeliveryRequest) {
 
 3180            require_once 
'Modules/Test/classes/class.ilTestPDFGenerator.php';
 
 3183            $this->ctrl->setParameter($this, 
"pdf", 
"1");
 
 3184            $template->setCurrentBlock(
"pdf_export");
 
 3185            $template->setVariable(
"PDF_URL", $this->ctrl->getLinkTarget($this, 
"review"));
 
 3186            $this->ctrl->setParameter($this, 
"pdf", 
"");
 
 3187            $template->setVariable(
"PDF_TEXT", $this->lng->txt(
"pdf_export"));
 
 3190            $template->setCurrentBlock(
"navigation_buttons");
 
 3191            $template->setVariable(
"BUTTON_PRINT", $this->lng->txt(
"print"));
 
 3195            $this->tpl->setVariable(
"PRINT_CONTENT", 
$template->get());
 
 3203        if (is_array($a_user_ids)) {
 
 3205            foreach ($a_user_ids as $user_id) {
 
 3206                $client_ip = 
$_POST[
"client_ip"][
$i];
 
 3207                $this->
object->inviteUser($user_id, $client_ip);
 
 3214            $message = $this->lng->txt(
"tst_invited_selected_users");
 
 3223        $this->ctrl->redirect($this, 
"participants");
 
 3229    public function defaultsObject()
 
 3236        global $ilAccess, $ilToolbar, 
$tpl;
 
 3238        if (!$ilAccess->checkAccess(
"write", 
"", $this->ref_id)) {
 
 3240            $this->ctrl->redirect($this, 
"infoScreen");
 
 3243        $ilToolbar->setFormAction($this->ctrl->getFormAction($this, 
'addDefaults'));
 
 3244        $ilToolbar->addFormButton($this->lng->txt(
'add'), 
'addDefaults');
 
 3245        require_once 
'Services/Form/classes/class.ilTextInputGUI.php';
 
 3246        $ilToolbar->addInputItem(
new ilTextInputGUI($this->lng->txt(
'tst_defaults_defaults_of_test'), 
'name'), 
true);
 
 3248        require_once 
'Modules/Test/classes/tables/class.ilTestPersonalDefaultSettingsTableGUI.php';
 
 3250        $defaults = $this->
object->getAvailableDefaults();
 
 3251        $table->setData((array) $defaults);
 
 3260        if (isset(
$_POST[
'chb_defaults']) && is_array(
$_POST[
'chb_defaults']) && count(
$_POST[
'chb_defaults'])) {
 
 3261            foreach (
$_POST[
'chb_defaults'] as $test_default_id) {
 
 3262                $this->
object->deleteDefaults($test_default_id);
 
 3267        $this->defaultsObject();
 
 3284        if (!is_array(
$_POST[
"chb_defaults"]) || 1 !== count(
$_POST[
"chb_defaults"])) {
 
 3286                $this->lng->txt(
"tst_defaults_apply_select_one")
 
 3289            return $this->defaultsObject();
 
 3293        if ($this->object->evalTotalPersons() > 0) {
 
 3295                $this->lng->txt(
"tst_defaults_apply_not_possible")
 
 3298            return $this->defaultsObject();
 
 3301        $defaults =&$this->
object->getTestDefaults(
$_POST[
"chb_defaults"][0]);
 
 3302        $defaultSettings = unserialize($defaults[
"defaults"]);
 
 3304        if (isset($defaultSettings[
'isRandomTest'])) {
 
 3305            if ($defaultSettings[
'isRandomTest']) {
 
 3312        } elseif (isset($defaultSettings[
'questionSetType'])) {
 
 3313            $newQuestionSetType = $defaultSettings[
'questionSetType'];
 
 3315        $oldQuestionSetType = $this->
object->getQuestionSetType();
 
 3316        $questionSetTypeSettingSwitched = ($oldQuestionSetType != $newQuestionSetType);
 
 3318        $oldQuestionSetConfig = $this->testQuestionSetConfigFactory->getQuestionSetConfigByType($oldQuestionSetType);
 
 3321            case !$questionSetTypeSettingSwitched:
 
 3322            case !$oldQuestionSetConfig->doesQuestionSetRelatedDataExist():
 
 3329                require_once 
'Modules/Test/classes/confirmations/class.ilTestSettingsChangeConfirmationGUI.php';
 
 3332                $confirmation->setFormAction($this->ctrl->getFormAction($this));
 
 3333                $confirmation->setCancel($this->lng->txt(
'cancel'), 
'defaults');
 
 3334                $confirmation->setConfirm($this->lng->txt(
'confirm'), 
'confirmedApplyDefaults');
 
 3336                $confirmation->setOldQuestionSetType($this->object->getQuestionSetType());
 
 3337                $confirmation->setNewQuestionSetType($newQuestionSetType);
 
 3338                $confirmation->setQuestionLossInfoEnabled(
false);
 
 3339                $confirmation->build();
 
 3341                $confirmation->populateParametersFromPost();
 
 3343                $this->tpl->setContent($this->ctrl->getHTML($confirmation));
 
 3348        if ($questionSetTypeSettingSwitched && $this->object->isOnline()) {
 
 3349            $this->
object->setOnline(
false);
 
 3351            $info = $this->lng->txt(
"tst_set_offline_due_to_switched_question_set_type_setting");
 
 3356        $this->
object->applyDefaults($defaults);
 
 3360        if ($questionSetTypeSettingSwitched && $oldQuestionSetConfig->doesQuestionSetRelatedDataExist()) {
 
 3361            $oldQuestionSetConfig->removeQuestionSetRelatedData();
 
 3364        $this->ctrl->redirect($this, 
'defaults');
 
 3372        if (strlen(
$_POST[
"name"]) > 0) {
 
 3373            $this->
object->addDefaults(
$_POST[
'name']);
 
 3377        $this->defaultsObject();
 
 3382        if (in_array($this->ctrl->getCmdClass(), self::$infoScreenChildClasses)) {
 
 3396        #if( !include 'competenzenRocker.php' ) exit; 
 3398        $this->ctrl->setCmd(
"showSummary");
 
 3399        $this->ctrl->setCmdClass(
"ilinfoscreengui");
 
 3400        $this->infoScreen();
 
 3405        $this->ctrl->setCmd(
"showSummary");
 
 3406        $this->ctrl->setCmdClass(
"ilinfoscreengui");
 
 3407        $this->infoScreen(
$_GET[
'lock']);
 
 3413    public function infoScreen($session_lock = 
"")
 
 3420        global $ilAccess, 
$ilUser, $ilToolbar;
 
 3422        if (
$_GET[
'createRandomSolutions']) {
 
 3425            $this->
object->createRandomSolutions(
$_GET[
'createRandomSolutions']);
 
 3427            $ilCtrl->redirect($this);
 
 3430        if (!$ilAccess->checkAccess(
"read", 
"", $this->ref_id)) {
 
 3431            $this->
ilias->raiseError($this->lng->txt(
"msg_no_perm_read"), $this->ilias->error_obj->MESSAGE);
 
 3436        include_once(
"./Services/InfoScreen/classes/class.ilInfoScreenGUI.php");
 
 3438        $info->setOpenFormTag(
false);
 
 3441            return $this->ctrl->forwardCommand(
$info);
 
 3444        require_once 
'Modules/Test/classes/class.ilTestInfoScreenToolbarFactory.php';
 
 3446        $toolbarFactory->setTestOBJ($this->
object);
 
 3447        $toolbar = $toolbarFactory->getToolbarInstance();
 
 3452        $toolbar->setSessionLockString($session_lock);
 
 3456        if ($this->object->getShowInfo()) {
 
 3457            $info->enablePrivateNotes();
 
 3460        if (strlen($this->object->getIntroduction())) {
 
 3461            $info->addSection($this->lng->txt(
"tst_introduction"));
 
 3462            $info->addProperty(
"", $this->object->prepareTextareaOutput($this->object->getIntroduction(), 
true) .
 
 3463                    $info->getHiddenToggleButton());
 
 3465            $info->addSection(
"");
 
 3466            $info->addProperty(
"", 
$info->getHiddenToggleButton());
 
 3469        $info->addSection($this->lng->txt(
"tst_general_properties"));
 
 3470        if ($this->object->getShowInfo()) {
 
 3471            $info->addProperty($this->lng->txt(
"author"), $this->object->getAuthor());
 
 3472            $info->addProperty($this->lng->txt(
"title"), $this->object->getTitle());
 
 3474        if ($this->object->isOnline() && $this->object->isComplete($this->testQuestionSetConfigFactory->getQuestionSetConfig())) {
 
 3475            if ((!$this->object->getFixedParticipants() || $online_access) && $ilAccess->checkAccess(
"read", 
"", $this->ref_id)) {
 
 3476                if ($this->object->getShowInfo() || !$this->object->getForceJS()) {
 
 3478                    $checked_javascript = 
false;
 
 3479                    if ($this->object->getJavaScriptOutput()) {
 
 3480                        $checked_javascript = 
true;
 
 3484                if (!$this->object->isRandomTest() && !$this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired()) {
 
 3485                    if ($this->object->getNrOfTries() != 1) {
 
 3486                        if ($this->object->getUsePreviousAnswers() == 0) {
 
 3487                            if ($this->object->getShowInfo()) {
 
 3488                                $info->addProperty($this->lng->txt(
"tst_use_previous_answers"), $this->lng->txt(
"tst_dont_use_previous_answers"));
 
 3491                            $use_previous_answers = 
false;
 
 3492                            if (
$ilUser->prefs[
"tst_use_previous_answers"]) {
 
 3493                                $checked_previous_answers = 
true;
 
 3495                            $info->addPropertyCheckbox($this->lng->txt(
"tst_use_previous_answers"), 
"chb_use_previous_answers", 1, $this->lng->txt(
"tst_use_previous_answers_user"), $checked_previous_answers);
 
 3502        $info->hideFurtherSections(
false);
 
 3504        if ($this->object->getShowInfo()) {
 
 3505            $info->addSection($this->lng->txt(
"tst_sequence_properties"));
 
 3506            $info->addProperty($this->lng->txt(
"tst_sequence"), $this->lng->txt(($this->object->getSequenceSettings() == 
TEST_FIXED_SEQUENCE)? 
"tst_sequence_fixed":
"tst_sequence_postpone"));
 
 3508            $info->addSection($this->lng->txt(
"tst_heading_scoring"));
 
 3509            $info->addProperty($this->lng->txt(
"tst_text_count_system"), $this->lng->txt(($this->object->getCountSystem() == 
COUNT_PARTIAL_SOLUTIONS)? 
"tst_count_partial_solutions":
"tst_count_correct_solutions"));
 
 3510            $info->addProperty($this->lng->txt(
"tst_score_mcmr_questions"), $this->lng->txt(($this->object->getMCScoring() == 
SCORE_ZERO_POINTS_WHEN_UNANSWERED)? 
"tst_score_mcmr_zero_points_when_unanswered":
"tst_score_mcmr_use_scoring_system"));
 
 3511            if ($this->object->isRandomTest()) {
 
 3512                $info->addProperty($this->lng->txt(
"tst_pass_scoring"), $this->lng->txt(($this->object->getPassScoring() == 
SCORE_BEST_PASS)? 
"tst_pass_best_pass":
"tst_pass_last_pass"));
 
 3515            $info->addSection($this->lng->txt(
"tst_score_reporting"));
 
 3516            $score_reporting_text = 
"";
 
 3517            switch ($this->object->getScoreReporting()) {
 
 3519                    $score_reporting_text = $this->lng->txt(
"tst_report_after_test");
 
 3522                    $score_reporting_text = $this->lng->txt(
"tst_report_after_first_question");
 
 3525                    $score_reporting_text = $this->lng->txt(
"tst_report_after_date");
 
 3528                    $score_reporting_text = $this->lng->txt(
"tst_report_never");
 
 3531            $info->addProperty($this->lng->txt(
"tst_score_reporting"), $score_reporting_text);
 
 3532            $reporting_date = $this->
object->getReportingDate();
 
 3533            if ($reporting_date) {
 
 3534                #preg_match("/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $reporting_date, $matches);
 
 3535                #$txt_reporting_date = date($this->lng->text["lang_dateformat"] . " " . $this->lng->text["lang_timeformat"], mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]));
 
 3536                #$info->addProperty($this->lng->txt("tst_score_reporting_date"), $txt_reporting_date);
 
 3538                    $this->lng->txt(
'tst_score_reporting_date'),
 
 3543            $info->addSection($this->lng->txt(
"tst_session_settings"));
 
 3544            $info->addProperty($this->lng->txt(
"tst_nr_of_tries"), ($this->object->getNrOfTries() == 0)?$this->lng->txt(
"unlimited"):$this->object->getNrOfTries());
 
 3545            if ($this->object->getNrOfTries() != 1) {
 
 3546                $info->addProperty($this->lng->txt(
"tst_nr_of_tries_of_user"), (
$toolbar->getTestSession()->getPass() == 
false)?$this->lng->txt(
"tst_no_tries"):
$toolbar->getTestSequence()->getPass());
 
 3549            if ($this->object->getEnableProcessingTime()) {
 
 3550                $info->addProperty($this->lng->txt(
"tst_processing_time"), $this->object->getProcessingTime());
 
 3552            if (strlen($this->object->getAllowedUsers()) && ($this->object->getAllowedUsersTimeGap())) {
 
 3553                $info->addProperty($this->lng->txt(
"tst_allowed_users"), $this->object->getAllowedUsers());
 
 3556            $starting_time = $this->
object->getStartingTime();
 
 3557            if ($this->object->isStartingTimeEnabled() && $starting_time != 0) {
 
 3560            $ending_time = $this->
object->getEndingTime();
 
 3561            if ($this->object->isEndingTimeEnabled() && $ending_time != 0) {
 
 3564            $info->addMetaDataSections($this->object->getId(), 0, $this->object->getType());
 
 3568        $this->ctrl->forwardCommand(
$info);
 
 3573        require_once 
'Modules/TestQuestionPool/classes/questions/class.ilAssQuestionSkillAssignmentImportFails.php';
 
 3575        $qsaImportFails->deleteRegisteredImportFails();
 
 3577        require_once 
'Modules/Test/classes/class.ilTestSkillLevelThresholdImportFails.php';
 
 3579        $sltImportFails->deleteRegisteredImportFails();
 
 3581        $this->ctrl->redirect($this, 
'infoScreen');
 
 3587        switch ($this->ctrl->getCmd()) {
 
 3590            case "redirectToInfoScreen":
 
 3597            case "outCorrectSolution":
 
 3599            case "showAnswersOfUser":
 
 3600            case "outUserResultsOverview":
 
 3601            case "backFromSummary":
 
 3602            case "show_answers":
 
 3605            case "outTestSummary":
 
 3606            case "outQuestionSummary":
 
 3607            case "gotoQuestion":
 
 3608            case "selectImagemapRegion":
 
 3609            case "confirmSubmitAnswers":
 
 3610            case "finalSubmission":
 
 3612            case "outUserPassDetails":
 
 3613            case "checkPassword":
 
 3614                $ilLocator->addItem($this->object->getTitle(), $this->ctrl->getLinkTarget($this, 
"infoScreen"), 
"", 
$_GET[
"ref_id"]);
 
 3617            case "evalAllUsers":
 
 3618            case "evalUserDetail":
 
 3619                $ilLocator->addItem($this->object->getTitle(), $this->ctrl->getLinkTarget($this, 
"eval_stat"), 
"", 
$_GET[
"ref_id"]);
 
 3626            case "importVerifiedFile":
 
 3627            case "cancelImport":
 
 3630                $ilLocator->addItem($this->object->getTitle(), $this->ctrl->getLinkTarget($this, 
""), 
"", 
$_GET[
"ref_id"]);
 
 3638        if ($ilAccess->checkAccess(
"write", 
"", $this->ref_id)) {
 
 3639            $this->ctrl->saveParameterByClass($this->ctrl->getCmdClass(), 
'q_id');
 
 3641            $tabs_gui->setBackTarget($this->lng->txt(
"backtocallingtest"), $this->ctrl->getLinkTargetByClass($this->ctrl->getCmdClass(), 
"questions"));
 
 3643                "tst_browse_for_questions",
 
 3644                $this->ctrl->getLinkTarget($this, 
"browseForQuestions"),
 
 3645                array(
"browseForQuestions", 
"filter", 
"resetFilter", 
"resetTextFilter", 
"insertQuestions"),
 
 3656        if ($ilAccess->checkAccess(
"write", 
"", $this->ref_id)) {
 
 3658            $tabs_gui->setBackTarget($this->lng->txt(
"backtocallingtest"), $this->ctrl->getLinkTarget($this, 
"questions"));
 
 3661                $this->ctrl->getLinkTarget($this, 
"randomQuestions"),
 
 3662                array(
"randomQuestions"),
 
 3678        include_once 
"./Services/Certificate/classes/class.ilCertificateGUI.php";
 
 3679        include_once 
"./Modules/Test/classes/class.ilTestCertificateAdapter.php";
 
 3681        $output_gui->certificateEditor();
 
 3687        $ilTabs->activateTab(
'assQuestions');
 
 3690        if (!$this->object->isRandomTest()) {
 
 3691            #if (in_array($this->object->getEnabledViewMode(), array('both', 'express'))) { 
 3692            $questions_per_page = ($a_cmd == 
'questions_per_page' || ($a_cmd == 
'removeQuestions' && $_REQUEST[
'test_express_mode'])) ? true : 
false;
 
 3694            $this->tabs_gui->addSubTabTarget(
 
 3695                        "questions_per_page_view",
 
 3696                        $this->ctrl->getLinkTargetByClass(
'iltestexpresspageobjectgui', 
'showPage'),
 
 3704        include_once 
"Services/Administration/classes/class.ilSettingsTemplate.php";
 
 3707        if (!in_array(
'questions', 
$template->getHiddenTabs())) {
 
 3709            $ilTabs->addSubTabTarget(
 
 3710                        "edit_test_questions",
 
 3711                        $this->ctrl->getLinkTarget($this, 
'questions'),
 
 3712                        array(
"questions", 
"browseForQuestions", 
"questionBrowser", 
"createQuestion",
 
 3713                             "randomselect", 
"filter", 
"resetFilter", 
"insertQuestions",
 
 3714                             "back", 
"createRandomSelection", 
"cancelRandomSelect",
 
 3715                             "insertRandomSelection", 
"removeQuestions", 
"moveQuestions",
 
 3716                             "insertQuestionsBefore", 
"insertQuestionsAfter", 
"confirmRemoveQuestions",
 
 3717                             "cancelRemoveQuestions", 
"executeCreateQuestion", 
"cancelCreateQuestion",
 
 3718                             "addQuestionpool", 
"saveRandomQuestions", 
"saveQuestionSelectionMode"),
 
 3722            if (in_array($a_cmd, array(
'questions', 
'createQuestion')) || ($a_cmd == 
'removeQuestions' && !$_REQUEST[
'test_express_mode'])) {
 
 3723                $this->tabs_gui->activateSubTab(
'edit_test_questions');
 
 3729        if (!$this->object->isRandomTest()) {
 
 3730            $ilTabs->addSubTabTarget(
 
 3732                $this->ctrl->getLinkTarget($this, 
'print'),
 
 3736                $this->ctrl->getCmd() == 
'print' 
 3738            $ilTabs->addSubTabTarget(
 
 3740                $this->ctrl->getLinkTarget($this, 
'review'),
 
 3744                $this->ctrl->getCmd() == 
'review' 
 3754        $ilTabs->addSubTabTarget(
 
 3756            $this->ctrl->getLinkTargetByClass(
"iltestevaluationgui", 
"outEvaluation"),
 
 3757            array(
"outEvaluation", 
"detailedEvaluation", 
"exportEvaluation", 
"evalUserDetail", 
"passDetails",
 
 3758                "outStatisticsResultsOverview", 
"statisticsPassDetails"),
 
 3763        $ilTabs->addSubTabTarget(
 
 3764            "tst_results_aggregated",
 
 3765            $this->ctrl->getLinkTargetByClass(
"iltestevaluationgui", 
"eval_a"),
 
 3772        $ilTabs->addSubTabTarget(
 
 3773            "tst_single_results",
 
 3774            $this->ctrl->getLinkTargetByClass(
"iltestevaluationgui", 
"singleResults"),
 
 3775            array(
"singleResults"),
 
 3781    public function getSettingsSubTabs($hiddenTabs = array())
 
 3786        global $ilTabs, $ilias;
 
 3789        $ilTabs->addSubTabTarget(
 
 3791            $this->ctrl->getLinkTargetByClass(
'ilObjTestSettingsGeneralGUI'),
 
 3793             array(
'ilobjtestsettingsgeneralgui')                       
 
 3796        if (!in_array(
'mark_schema', $hiddenTabs)) {
 
 3797            $ilTabs->addSubTabTarget(
 
 3799                $this->ctrl->getLinkTargetByClass(
'ilmarkschemagui', 
'showMarkSchema'),
 
 3801                array(
'ilmarkschemagui')
 
 3806        $ilTabs->addSubTabTarget(
 
 3808            $this->ctrl->getLinkTargetByClass(
'ilObjTestSettingsScoringResultsGUI'),
 
 3810            array(
'ilobjtestsettingsscoringresultsgui')     
 
 3814        include_once 
"Services/Certificate/classes/class.ilCertificate.php";
 
 3816            $ilTabs->addSubTabTarget(
 
 3818                $this->ctrl->getLinkTarget($this, 
'certificate'),
 
 3819                array(
"certificate", 
"certificateEditor", 
"certificateRemoveBackground", 
"certificateSave",
 
 3820                    "certificatePreview", 
"certificateDelete", 
"certificateUpload", 
"certificateImport"),
 
 3821                array(
"", 
"ilobjtestgui", 
"ilcertificategui")
 
 3825        if (!in_array(
'defaults', $hiddenTabs)) {
 
 3827            $ilTabs->addSubTabTarget(
 
 3828                        "tst_default_settings",
 
 3829                        $this->ctrl->getLinkTarget($this, 
"defaults"),
 
 3830                        array(
"defaults", 
"deleteDefaults", 
"addDefaults", 
"applyDefaults"),
 
 3831                        array(
"", 
"ilobjtestgui", 
"ilcertificategui")
 
 3836        if ($lti_settings->hasSettingsAccess()) {
 
 3837            $this->tabs_gui->addSubTabTarget(
 
 3839                $this->ctrl->getLinkTargetByClass(ilLTIProviderObjectSettingGUI::class),
 
 3841                [ilLTIProviderObjectSettingGUI::class]
 
 3851        $ilTabs->addSubTabTarget(
 
 3853            $this->ctrl->getLinkTarget($this, 
'participants'),
 
 3855                "participants", 
"saveClientIP",
 
 3856                "removeParticipant",
 
 3857                "showParticipantAnswersForAuthor",
 
 3858                "deleteAllUserResults",
 
 3859                "cancelDeleteAllUserData", 
"deleteSingleUserResults",
 
 3860                "outParticipantsResultsOverview", 
"outParticipantsPassDetails",
 
 3861                "showPassOverview", 
"showUserAnswers", 
"participantsAction",
 
 3862                "showDetailedResults",
 
 3863                'npResetFilter', 
'npSetFilter' 
 3868        if (!$this->testQuestionSetConfigFactory->getQuestionSetConfig()->areDepenciesBroken()) {
 
 3869            if ($this->object->getProcessingTimeInSeconds() > 0 && $this->object->getNrOfTries() == 1) {
 
 3871                $ilTabs->addSubTabTarget(
 
 3873                    $this->ctrl->getLinkTarget($this, 
'timingOverview'),
 
 3874                    array(
"timing", 
"timingOverview"),
 
 3889        global $ilAccess, $ilHelp;
 
 3891        if (preg_match(
'/^ass(.*?)gui$/i', $this->ctrl->getNextClass($this))) {
 
 3893        } elseif ($this->ctrl->getNextClass($this) == 
'ilassquestionpagegui') {
 
 3897        $ilHelp->setScreenIdComponent(
"tst");
 
 3899        $hidden_tabs = array();
 
 3901        $template = $this->
object->getTemplate();
 
 3903            include_once 
"Services/Administration/classes/class.ilSettingsTemplate.php";
 
 3906            $hidden_tabs = 
$template->getHiddenTabs();
 
 3910        $curUserHasWriteAccess = $ilAccess->checkAccess(
"write", 
"", $this->ref_id);
 
 3912        switch ($this->ctrl->getCmdClass()) {
 
 3914            case 'iltestoutputgui':
 
 3917            case 'iltestevaluationgui':
 
 3918                $nonSelfTabbingCommands = array(
 
 3919                    'outParticipantsResultsOverview', 
'outEvaluation',
 
 3920                    'eval_a', 
'singleResults', 
'detailedEvaluation' 
 3922                if (in_array($this->ctrl->getCmd(), $nonSelfTabbingCommands)) {
 
 3926            case 'iltestevalobjectiveorientedgui':
 
 3929            case 'ilmarkschemagui':
 
 3930            case 'ilobjtestsettingsgeneralgui':
 
 3931            case 'ilobjtestsettingsscoringresultsgui':
 
 3933                if ($curUserHasWriteAccess) {
 
 3934                    $this->getSettingsSubTabs($hidden_tabs);
 
 3941            require_once 
'Services/Link/classes/class.ilLink.php';
 
 3943            $this->tabs_gui->setBack2Target($this->lng->txt(
'back_to_objective_container'), $courseLink);
 
 3946        switch ($this->ctrl->getCmd()) {
 
 3951            case "directfeedback":
 
 3953            case "outCorrectSolution":
 
 3955            case "showAnswersOfUser":
 
 3956            case "outUserResultsOverview":
 
 3957            case "backFromSummary":
 
 3958            case "show_answers":
 
 3961            case "confirmFinish":
 
 3962            case "outTestSummary":
 
 3963            case "outQuestionSummary":
 
 3964            case "gotoQuestion":
 
 3965            case "selectImagemapRegion":
 
 3966            case "confirmSubmitAnswers":
 
 3967            case "finalSubmission":
 
 3969            case "outUserPassDetails":
 
 3970            case "checkPassword":
 
 3971            case "exportCertificate":
 
 3972            case "finishListOfAnswers":
 
 3973            case "backConfirmFinish":
 
 3974            case "showFinalStatement":
 
 3977            case "browseForQuestions":
 
 3980            case "resetTextFilter":
 
 3981            case "insertQuestions":
 
 3983                if ($this->ctrl->getNextClass($this) != 
"illearningprogressgui") {
 
 3989            case "certificateservice":
 
 3990            case "certificateImport":
 
 3991            case "certificateUpload":
 
 3992            case "certificateEditor":
 
 3993            case "certificateDelete":
 
 3994            case "certificateSave":
 
 3996            case "deleteDefaults":
 
 3998            case "applyDefaults":
 
 3999            case "inviteParticipants":
 
 4000            case "searchParticipants":
 
 4001                if ($curUserHasWriteAccess && in_array($this->ctrl->getCmdClass(), array(
'ilobjtestgui', 
'ilcertificategui'))) {
 
 4002                    $this->getSettingsSubTabs($hidden_tabs);
 
 4010            case "detailedEvaluation":
 
 4011            case "outEvaluation":
 
 4012            case "singleResults":
 
 4013            case "exportEvaluation":
 
 4014            case "evalUserDetail":
 
 4015            case "outStatisticsResultsOverview":
 
 4016            case "statisticsPassDetails":
 
 4021        if (strcmp(strtolower(get_class($this->
object)), 
"ilobjtest") == 0) {
 
 4023            if ($ilAccess->checkAccess(
"write", 
"", $this->ref_id) && !in_array(
'assQuestions', $hidden_tabs)) {
 
 4024                $force_active = (
$_GET[
"up"] != 
"" || 
$_GET[
"down"] != 
"")
 
 4027                if (!$force_active) {
 
 4028                    if (
$_GET[
"browse"] == 1) {
 
 4029                        $force_active = 
true;
 
 4033                switch ($this->object->getQuestionSetType()) {
 
 4035                        $target = $this->ctrl->getLinkTargetByClass(
'iltestexpresspageobjectgui', 
'showPage');
 
 4039                        $target = $this->ctrl->getLinkTargetByClass(
'ilTestRandomQuestionSetConfigGUI');
 
 4043                        $target = $this->ctrl->getLinkTargetByClass(
'ilObjTestDynamicQuestionSetConfigGUI');
 
 4047                $this->tabs_gui->addTarget(
 
 4051                    array(
"questions", 
"browseForQuestions", 
"questionBrowser", 
"createQuestion",
 
 4052                     "randomselect", 
"filter", 
"resetFilter", 
"insertQuestions",
 
 4053                     "back", 
"createRandomSelection", 
"cancelRandomSelect",
 
 4054                     "insertRandomSelection", 
"removeQuestions", 
"moveQuestions",
 
 4055                     "insertQuestionsBefore", 
"insertQuestionsAfter", 
"confirmRemoveQuestions",
 
 4056                     "cancelRemoveQuestions", 
"executeCreateQuestion", 
"cancelCreateQuestion",
 
 4057                     "addQuestionpool", 
"saveRandomQuestions", 
"saveQuestionSelectionMode", 
"print",
 
 4058                    "addsource", 
"removesource", 
"randomQuestions"),
 
 4066            if ($ilAccess->checkAccess(
"read", 
"", $this->ref_id) && !in_array(
'info_short', $hidden_tabs)) {
 
 4067                $this->tabs_gui->addTarget(
 
 4069                    $this->ctrl->getLinkTarget($this, 
'infoScreen'),
 
 4070                    array(
"infoScreen", 
"outIntroductionPage", 
"showSummary",
 
 4071                     "setAnonymousId", 
"outUserListOfAnswerPasses", 
"redirectToInfoScreen")
 
 4076            if ($ilAccess->checkAccess(
"write", 
"", $this->ref_id)) {
 
 4077                if (!in_array(
'settings', $hidden_tabs)) {
 
 4078                    $settingsCommands = array(
 
 4079                        "marks", 
"showMarkSchema",
"addMarkStep", 
"deleteMarkSteps", 
"addSimpleMarkSchema", 
"saveMarks",
 
 4080                        "certificate", 
"certificateEditor", 
"certificateRemoveBackground", 
"certificateSave",
 
 4081                        "certificatePreview", 
"certificateDelete", 
"certificateUpload", 
"certificateImport",
 
 4082                        "scoring", 
"defaults", 
"addDefaults", 
"deleteDefaults", 
"applyDefaults",
 
 4083                        "inviteParticipants", 
"saveFixedParticipantsStatus", 
"searchParticipants", 
"addParticipants"  
 4086                    require_once 
'Modules/Test/classes/class.ilObjTestSettingsGeneralGUI.php';
 
 4087                    $reflection = 
new ReflectionClass(
'ilObjTestSettingsGeneralGUI');
 
 4088                    foreach ($reflection->getConstants() as 
$name => $value) {
 
 4089                        if (substr(
$name, 0, 4) == 
'CMD_') {
 
 4090                            $settingsCommands[] = $value;
 
 4094                    require_once 
'Modules/Test/classes/class.ilObjTestSettingsScoringResultsGUI.php';
 
 4095                    $reflection = 
new ReflectionClass(
'ilObjTestSettingsScoringResultsGUI');
 
 4096                    foreach ($reflection->getConstants() as 
$name => $value) {
 
 4097                        if (substr(
$name, 0, 4) == 
'CMD_') {
 
 4098                            $settingsCommands[] = $value;
 
 4102                    $settingsCommands[] = 
""; 
 
 4104                    $this->tabs_gui->addTarget(
 
 4106                        $this->ctrl->getLinkTargetByClass(
'ilObjTestSettingsGeneralGUI'),
 
 4108                        array(
"ilmarkschemagui", 
"ilobjtestsettingsgeneralgui", 
"ilobjtestsettingsscoringresultsgui", 
"ilobjtestgui", 
"ilcertificategui")
 
 4114                    require_once 
'Modules/TestQuestionPool/classes/class.ilAssQuestionSkillAssignmentsGUI.php';
 
 4116                    $link = $this->ctrl->getLinkTargetByClass(
 
 4117                        array(
'ilTestSkillAdministrationGUI', 
'ilAssQuestionSkillAssignmentsGUI'),
 
 4121                    $this->tabs_gui->addTarget(
'tst_tab_competences', $link, array(), array());
 
 4124                if (!in_array(
'participants', $hidden_tabs)) {
 
 4126                    $this->tabs_gui->addTarget(
 
 4128                        $this->ctrl->getLinkTarget($this, 
'participants'),
 
 4130                            "participants", 
"saveClientIP",
 
 4131                            "removeParticipant",
 
 4132                            "showParticipantAnswersForAuthor",
 
 4133                            "deleteAllUserResults",
 
 4134                            "cancelDeleteAllUserData", 
"deleteSingleUserResults",
 
 4135                            "outParticipantsResultsOverview", 
"outParticipantsPassDetails",
 
 4136                            "showPassOverview", 
"showUserAnswers", 
"participantsAction",
 
 4137                            "showDetailedResults",
 
 4138                            'timing', 
'timingOverview', 
'npResetFilter', 
'npSetFilter', 
'showTimingForm' 
 4145            include_once 
'./Services/Tracking/classes/class.ilLearningProgressAccess.php';
 
 4147                $this->tabs_gui->addTarget(
 
 4148                    'learning_progress',
 
 4149                    $this->ctrl->getLinkTargetByClass(array(
'illearningprogressgui'), 
''),
 
 4151                    array(
'illplistofobjectsgui',
'illplistofsettingsgui',
'illearningprogressgui',
'illplistofprogressgui')
 
 4155            if ($ilAccess->checkAccess(
"write", 
"", $this->ref_id)  && !in_array(
'manscoring', $hidden_tabs)) {
 
 4156                include_once 
"./Modules/Test/classes/class.ilObjAssessmentFolder.php";
 
 4158                if (count($scoring)) {
 
 4160                    $this->tabs_gui->addTarget(
 
 4162                        $this->ctrl->getLinkTargetByClass(
'ilTestScoringByQuestionsGUI', 
'showManScoringByQuestionParticipantsTable'),
 
 4164                                'showManScoringParticipantsTable', 
'applyManScoringParticipantsFilter', 
'resetManScoringParticipantsFilter', 
'showManScoringParticipantScreen',
 
 4165                                'showManScoringByQuestionParticipantsTable', 
'applyManScoringByQuestionFilter', 
'resetManScoringByQuestionFilter', 
'saveManScoringByQuestion' 
 4175            $scoring_adjust_active = (bool) $setting->get(
'assessment_adjustments_enabled', 
false);
 
 4176            if ($ilAccess->checkAccess(
"write", 
"", $this->ref_id) && $scoring_adjust_active && !in_array(
'scoringadjust', $hidden_tabs)) {
 
 4178                $this->tabs_gui->addTarget(
 
 4180                    $this->ctrl->getLinkTargetByClass(
'ilScoringAdjustmentGUI', 
'showquestionlist'),
 
 4183                        'savescoringfortest',
 
 4184                        'adjustscoringfortest' 
 4190            if ((($ilAccess->checkAccess(
"tst_statistics", 
"", $this->ref_id)) || ($ilAccess->checkAccess(
"write", 
"", $this->ref_id)))  && !in_array(
'statistics', $hidden_tabs)) {
 
 4192                $this->tabs_gui->addTarget(
 
 4194                    $this->ctrl->getLinkTargetByClass(
"iltestevaluationgui", 
"outEvaluation"),
 
 4196                        "statistics", 
"outEvaluation", 
"exportEvaluation", 
"detailedEvaluation", 
"eval_a", 
"evalUserDetail",
 
 4197                        "passDetails", 
"outStatisticsResultsOverview", 
"statisticsPassDetails", 
"singleResults" 
 4203            if ($ilAccess->checkAccess(
"write", 
"", $this->ref_id)) {
 
 4204                if (!in_array(
'history', $hidden_tabs)) {
 
 4207                    $this->tabs_gui->addTarget(
 
 4209                    $this->ctrl->getLinkTarget($this, 
'history'),
 
 4215                if (!in_array(
'meta_data', $hidden_tabs)) {
 
 4217                    include_once 
"Services/Object/classes/class.ilObjectMetaDataGUI.php";
 
 4219                    $mdtab = $mdgui->getTab();
 
 4221                        $this->tabs_gui->addTarget(
 
 4230                if (!in_array(
'export', $hidden_tabs)) {
 
 4232                    $this->tabs_gui->addTarget(
 
 4234                        $this->ctrl->getLinkTargetByClass(
'iltestexportgui', 
''),
 
 4236                        array(
'iltestexportgui')
 
 4241            if ($ilAccess->checkAccess(
"edit_permission", 
"", $this->ref_id)&& !in_array(
'permissions', $hidden_tabs)) {
 
 4242                $this->tabs_gui->addTarget(
 
 4244                    $this->ctrl->getLinkTargetByClass(array(get_class($this),
'ilpermissiongui'), 
"perm"),
 
 4245                    array(
"perm",
"info",
"owner"),
 
 4251        if ($this->testQuestionSetConfigFactory->getQuestionSetConfig()->areDepenciesBroken()) {
 
 4252            $hideTabs = $this->testQuestionSetConfigFactory->getQuestionSetConfig()->getHiddenTabsOnBrokenDepencies();
 
 4254            foreach ($hideTabs as $tabId) {
 
 4255                $this->tabs_gui->removeTab($tabId);
 
 4265        $DIC->ctrl()->redirectByClass(
'ilObjTestGUI', 
"infoScreen");
 
 4280        if ($ilAccess->checkAccess(
"read", 
"", $a_target)) {
 
 4282            $_GET[
"baseClass"] = 
"ilObjTestGUI";
 
 4283            $_GET[
"cmd"] = 
"infoScreen";
 
 4284            $_GET[
"ref_id"] = $a_target;
 
 4285            include_once(
"ilias.php");
 
 4288        } elseif ($ilAccess->checkAccess(
"read", 
"", ROOT_FOLDER_ID)) {
 
 4290                $lng->txt(
"msg_no_perm_read_item"),
 
 4307        if ($this->create_question_mode) {
 
 4313        require_once 
'Services/UIComponent/Button/classes/class.ilLinkButton.php';
 
 4317        $ilCtrl->saveParameter($this, 
'q_mode');
 
 4319        $ilCtrl->setParameterByClass(
'iltestexpresspageobjectgui', 
'test_express_mode', 1);
 
 4320        $ilCtrl->setParameter($this, 
'test_express_mode', 1);
 
 4321        $ilCtrl->setParameterByClass(
'iltestexpresspageobjectgui', 
'q_id', $_REQUEST[
'q_id']);
 
 4322        $ilCtrl->setParameter($this, 
'q_id', $_REQUEST[
'q_id']);
 
 4323        $ilToolbar->setFormAction(
$ilCtrl->getFormActionByClass(
'iltestexpresspageobjectgui', 
'edit'));
 
 4325        if ($this->object->evalTotalPersons() == 0) {
 
 4346            $ilToolbar->addFormButton(
$lng->txt(
"ass_create_question"), 
"addQuestion");
 
 4348            $ilToolbar->addSeparator();
 
 4350            if ($this->object->getPoolUsage()) {
 
 4351                require_once 
'Modules/Test/classes/tables/class.ilTestQuestionBrowserTableGUI.php';
 
 4355                $show_separator = 
true;
 
 4359        $questions = $this->
object->getQuestionTitlesAndIndexes();
 
 4363        foreach ($questions as 
$id => $label) {
 
 4364            $options[
$id] = $label . 
' [' . $this->lng->txt(
'question_id_short') . 
': ' . 
$id . 
']';
 
 4367        $optionKeys = array_keys(
$options);
 
 4396        if (count($questions)) {
 
 4397            if (isset($show_separator) && $show_separator) {
 
 4398                $ilToolbar->addSeparator();
 
 4402            $btn->setCaption(
"test_prev_question");
 
 4403            $btn->setUrl(
$ilCtrl->getLinkTargetByClass(
'iltestexpresspageobjectgui', 
'prevQuestion'));
 
 4404            $ilToolbar->addButtonInstance($btn);
 
 4406            if (count(
$options) <= 1 || $optionKeys[0] == $qid) {
 
 4407                $btn->setDisabled(
true);
 
 4411            $btn->setCaption(
"test_next_question");
 
 4412            $btn->setUrl(
$ilCtrl->getLinkTargetByClass(
'iltestexpresspageobjectgui', 
'nextQuestion'));
 
 4413            $ilToolbar->addButtonInstance($btn);
 
 4415            if (count(
$options) <= 1 || $optionKeys[count($optionKeys) - 1] == $qid) {
 
 4416                $btn->setDisabled(
true);
 
 4420        if (count($questions) > 1) {
 
 4421            $ilToolbar->addSeparator();
 
 4423            include_once(
"./Services/Form/classes/class.ilSelectInputGUI.php");
 
 4425            $si->addCustomAttribute(
"onChange=\"forms['ilToolbar'].submit();\"");
 
 4429                $si->setValue($qid);
 
 4432            $ilToolbar->addInputItem(
$si, 
true);
 
 4435        $total = $this->
object->evalTotalPersons();
 
 4450        if (count($questions) && !
$total) {
 
 4451            $ilCtrl->setParameter($this, 
'q_id', $_REQUEST[
'q_id']);
 
 4452            $ilToolbar->addSeparator();
 
 4453            $ilToolbar->addButton(
$lng->txt(
"test_delete_page"), 
$ilCtrl->getLinkTarget($this, 
"removeQuestions"));
 
 4456        if (count($questions) > 1 && !
$total) {
 
 4457            $ilToolbar->addSeparator();
 
 4458            $ilToolbar->addButton(
$lng->txt(
"test_move_page"), 
$ilCtrl->getLinkTarget($this, 
"movePageForm"));
 
 4463        $online_access = 
false;
 
 4464        if ($this->object->getFixedParticipants()) {
 
 4465            include_once 
"./Modules/Test/classes/class.ilObjTestAccess.php";
 
 4467            if ($online_access_result === 
true) {
 
 4468                $online_access = 
true;
 
 4472        if ($this->object->isOnline() && $this->object->isComplete($this->testQuestionSetConfigFactory->getQuestionSetConfig())) {
 
 4473            if ((!$this->object->getFixedParticipants() || $online_access) && $ilAccess->checkAccess(
"read", 
"", $this->ref_id)) {
 
 4474                $testSession = $this->testSessionFactory->getSession();
 
 4476                $executable = $this->
object->isExecutable($testSession, 
$ilUser->getId(), $allowPassIncrease = 
true);
 
 4478                if ($executable[
"executable"]) {
 
 4480                    $player_instance = $player_factory->getPlayerGUI();
 
 4482                    if ($testSession->getActiveId() > 0) {
 
 4483                        $ilToolbar->addSeparator();
 
 4484                        $ilToolbar->addButton(
$lng->txt(
'tst_resume_test'), 
$ilCtrl->getLinkTarget($player_instance, 
'resumePlayer'));
 
 4486                        $ilToolbar->addSeparator();
 
 4487                        $ilToolbar->addButton(
$lng->txt(
'tst_start_test'), 
$ilCtrl->getLinkTarget($player_instance, 
'startTest'));
 
 4497        $this->ctrl->redirect($this, 
'questions');
 
 4503        foreach ($questionIds as $q_id) {
 
 4505            $newIds[$q_id] = $newId;
 
 4517        require_once 
'Modules/TestQuestionPool/classes/class.assQuestion.php';
 
 4520        $newtitle = $question_gui->object->getTitle();
 
 4521        if ($question_gui->object->questionTitleExists($targetParentId, $question_gui->object->getTitle())) {
 
 4523            while ($question_gui->object->questionTitleExists($targetParentId, $question_gui->object->getTitle() . 
" ($counter)")) {
 
 4526            $newtitle = $question_gui->object->getTitle() . 
" ($counter)";
 
 4529        return $question_gui->object->createNewOriginalFromThisDuplicate($targetParentId, $newtitle);
 
 4537        global $ilObjDataCache;
 
 4539        $qplId = $ilObjDataCache->lookupObjId($_REQUEST[
'sel_qpl']);
 
 4542        foreach (
$result->ids as $oldId => $newId) {
 
 4547                $oldOriginal->delete($oldOriginal->getId());
 
 4550            $questionInstance->setNewOriginalId($newId);
 
 4554        $this->ctrl->redirect($this, 
'questions');
 
 4560        include_once 
'Services/Form/classes/class.ilPropertyFormGUI.php';
 
 4564        $title->setRequired(
true);
 
 4570        $form->addCommandButton(
'createQuestionPoolAndCopy', 
$lng->txt(
'create'));
 
 4572        if (isset($_REQUEST[
'q_id']) && is_array($_REQUEST[
'q_id'])) {
 
 4573            foreach ($_REQUEST[
'q_id'] as 
$id) {
 
 4575                $hidden->setValue(
$id);
 
 4576                $form->addItem($hidden);
 
 4592        require_once 
'Modules/TestQuestionPool/classes/class.assQuestion.php';
 
 4596            'copyAndLinkToQuestionpool' == $this->ctrl->getCmd() &&
 
 4597            (!isset($_REQUEST[
'q_id']) || !is_array($_REQUEST[
'q_id']))
 
 4600            $this->ctrl->redirect($this, 
'questions');
 
 4603        if (isset($_REQUEST[
'q_id']) && is_array($_REQUEST[
'q_id'])) {
 
 4604            foreach ($_REQUEST[
'q_id'] as $q_id) {
 
 4611                if (
$type !== 
'tst') {
 
 4613                    $this->ctrl->redirect($this, 
'questions');
 
 4626        if ($_REQUEST[
'title']) {
 
 4627            $title = $_REQUEST[
'title'];
 
 4629            $title = $_REQUEST[
'txt_qpl'];
 
 4638        $_REQUEST[
'sel_qpl'] = 
$ref_id;
 
 4660        $ilTabs->activateSubTab(
'edit_test_questions');
 
 4662        $this->tpl->addBlockFile(
"ADM_CONTENT", 
"adm_content", 
"tpl.il_as_tst_qpl_select_copy.html", 
"Modules/Test");
 
 4663        $questionpools =&$this->
object->getAvailableQuestionpools(
false, 
false, 
false, 
true, 
false, 
"write");
 
 4664        if (count($questionpools) == 0) {
 
 4665            $this->tpl->setCurrentBlock(
"option");
 
 4666            $this->tpl->setVariable(
"VALUE_QPL", 
"");
 
 4667            $this->tpl->parseCurrentBlock();
 
 4669            foreach ($questionpools as 
$key => $value) {
 
 4670                $this->tpl->setCurrentBlock(
"option");
 
 4671                $this->tpl->setVariable(
"VALUE_OPTION", 
$key);
 
 4672                $this->tpl->setVariable(
"TEXT_OPTION", $value[
"title"]);
 
 4673                $this->tpl->parseCurrentBlock();
 
 4677        if (isset($_REQUEST[
'q_id']) && is_array($_REQUEST[
'q_id'])) {
 
 4678            foreach ($_REQUEST[
'q_id'] as 
$id) {
 
 4679                $this->tpl->setCurrentBlock(
"hidden");
 
 4680                $this->tpl->setVariable(
"HIDDEN_NAME", 
"q_id[]");
 
 4681                $this->tpl->setVariable(
"HIDDEN_VALUE", 
$id);
 
 4682                $this->tpl->parseCurrentBlock();
 
 4683                $this->tpl->setCurrentBlock(
"adm_content");
 
 4686        $this->tpl->setVariable(
"FORM_ACTION", $this->ctrl->getFormAction($this));
 
 4688        if (count($questionpools) == 0) {
 
 4689            $this->tpl->setVariable(
"TXT_QPL_SELECT", $this->lng->txt(
"tst_enter_questionpool"));
 
 4690            $cmd = 
'createQuestionPoolAndCopy';
 
 4692            $this->tpl->setVariable(
"TXT_QPL_SELECT", $this->lng->txt(
"tst_select_questionpool"));
 
 4695        $this->tpl->setVariable(
"CMD_SUBMIT", $cmd);
 
 4696        $this->tpl->setVariable(
"BTN_SUBMIT", $this->lng->txt(
"submit"));
 
 4697        $this->tpl->setVariable(
"BTN_CANCEL", $this->lng->txt(
"cancel"));
 
 4701            case 'copyAndLinkQuestionsToPool':
 
 4703                $hidden->setValue(1);
 
 4704                $createForm->addItem($hidden);
 
 4706            case 'copyQuestionsToPool':
 
 4709        $createForm->setFormAction($this->ctrl->getFormAction($this));
 
 4711        $this->tpl->parseCurrentBlock();
 
 4719        $simpleSetters = array(
 
 4722            'use_pool' => 
'setPoolUsage',
 
 4723            'question_set_type' => 
'setQuestionSetType',
 
 4726            'intro_enabled' => 
'setIntroductionEnabled',
 
 4727            'showinfo' => 
'setShowInfo',
 
 4730            'chb_starting_time' => 
'setStartingTimeEnabled',
 
 4731            'chb_ending_time' => 
'setEndingTimeEnabled',
 
 4732            'password_enabled' => 
'setPasswordEnabled',
 
 4733            'fixedparticipants' => 
'setFixedParticipants',
 
 4734            'limitUsers' => 
'setLimitUsersEnabled',
 
 4737            'nr_of_tries' => 
'setNrOfTries',
 
 4738            'chb_processing_time' => 
'setEnableProcessingTime',
 
 4739            'kiosk' => 
'setKiosk',
 
 4740            'examid_in_test_pass' => 
'setShowExamIdInTestPassEnabled',
 
 4743            'title_output' => 
'setTitleOutput',
 
 4745            'chb_shuffle_questions' => 
'setShuffleQuestions',
 
 4746            'offer_hints' => 
'setOfferingQuestionHintsEnabled',
 
 4747            'instant_feedback' => 
'setScoringFeedbackOptionsByArray',
 
 4748            'obligations_enabled' => 
'setObligationsEnabled',
 
 4751            'chb_use_previous_answers' => 
'setUsePreviousAnswers',
 
 4752            'chb_show_cancel' => 
'setShowCancel',
 
 4753            'chb_postpone' => 
'setPostponingEnabled',
 
 4754            'list_of_questions' => 
'setListOfQuestionsSettings',
 
 4755            'chb_show_marker' => 
'setShowMarker',
 
 4758            'enable_examview' => 
'setEnableExamview',
 
 4759            'showfinalstatement' => 
'setShowFinalStatement',
 
 4760            'redirection_enabled' => 
null, 
 
 4761            'sign_submission' => 
'setSignSubmission',
 
 4762            'mailnotification' => 
'setMailNotification',
 
 4765            'count_system' => 
'setCountSystem',
 
 4766            'mc_scoring' => 
'setMCScoring',
 
 4767            'score_cutting' => 
'setScoreCutting',
 
 4768            'pass_scoring' => 
'setPassScoring',
 
 4769            'pass_deletion_allowed' => 
'setPassDeletionAllowed',
 
 4772            'results_access_enabled' => 
'setScoreReporting',
 
 4773            'grading_status' => 
'setShowGradingStatusEnabled',
 
 4774            'grading_mark' => 
'setShowGradingMarkEnabled',
 
 4777            'solution_details' => 
'setShowSolutionDetails',
 
 4778            'solution_feedback' => 
'setShowSolutionFeedback',
 
 4779            'solution_suggested' => 
'setShowSolutionSuggested',
 
 4780            'solution_printview' => 
'setShowSolutionPrintview',
 
 4781            'highscore_enabled' => 
'setHighscoreEnabled',
 
 4782            'solution_signature' => 
'setShowSolutionSignature',
 
 4783            'examid_in_test_res' => 
'setShowExamIdInTestResultsEnabled',
 
 4784            'exp_sc_short' => 
'setExportSettingsSingleChoiceShort',
 
 4787            'anonymity' => 
'setAnonymity',
 
 4788            'enable_archiving' => 
'setEnableArchiving' 
 4791        if (!$templateData[
'results_presentation'][
'value']) {
 
 4792            $templateData[
'results_presentation'][
'value'] = array();
 
 4795        foreach ($simpleSetters as $field => $setter) {
 
 4796            if ($templateData[$field] && strlen($setter)) {
 
 4797                $object->$setter($templateData[$field][
'value']);
 
 4803                    if ($templateData[$field][
'value'] > 0) {
 
 4805                        $object->setAutosaveIval($templateData[$field][
'value'] * 1000);
 
 4811                case 'redirection_enabled':
 
 4820                    if (strlen($templateData[$field][
'value'])) {
 
 4822                        $object->setRedirectionUrl($templateData[$field][
'value']);
 
 4825                        $object->setRedirectionUrl(
'');
 
 4834        if (!$ilAccess->checkAccess(
"write", 
"", $this->ref_id)) {
 
 4837            $this->ctrl->redirect($this, 
"infoScreen");
 
 4842        $orders = $obligations = array();
 
 4844        foreach ((array) $_REQUEST[
'order'] as $qId => $order) {
 
 4845            $id = (int) str_replace(
'q_', 
'', $qId);
 
 4847            $orders[
$id] = $order;
 
 4850        if ($this->object->areObligationsEnabled() && isset($_REQUEST[
'obligatory']) && is_array($_REQUEST[
'obligatory'])) {
 
 4851            foreach ($_REQUEST[
'obligatory'] as $qId => $obligation) {
 
 4852                $id = (int) str_replace(
'q_', 
'', $qId);
 
 4855                    $obligations[
$id] = $obligation;
 
 4860        $this->
object->setQuestionOrderAndObligations(
 
 4866        $ilCtrl->redirect($this, 
'questions');
 
 4876        include_once 
"Services/Form/classes/class.ilPropertyFormGUI.php";
 
 4878        $form->setFormAction(
$ilCtrl->getFormAction($this, 
"movePage"));
 
 4879        $form->setTitle(
$lng->txt(
"test_move_page"));
 
 4882        $old_pos->setValue($_REQUEST[
'q_id']);
 
 4883        $form->addItem($old_pos);
 
 4885        $questions = $this->
object->getQuestionTitlesAndIndexes();
 
 4886        if (!is_array($questions)) {
 
 4887            $questions = array();
 
 4890        foreach ($questions as $k => $q) {
 
 4891            if ($k == $_REQUEST[
'q_id']) {
 
 4892                unset($questions[$k]);
 
 4895            $questions[$k] = 
$lng->txt(
'behind') . 
' ' . $q;
 
 4897        #$questions['0'] = $lng->txt('first'); 
 4900            0 => 
$lng->txt(
'first')
 
 4902        foreach ($questions as $k => $q) {
 
 4903            $options[$k] = $q . 
' [' . $this->lng->txt(
'question_id_short') . 
': ' . $k . 
']';
 
 4908        $form->addItem($pos);
 
 4910        $form->addCommandButton(
"movePage", 
$lng->txt(
"submit"));
 
 4911        $form->addCommandButton(
"showPage", 
$lng->txt(
"cancel"));
 
 4913        return $tpl->setContent(
$form->getHTML());
 
 4919        if (!$ilAccess->checkAccess(
"write", 
"", $this->ref_id)) {
 
 4922            $this->ctrl->redirect($this, 
"infoScreen");
 
 4925        $this->
object->moveQuestionAfter($_REQUEST[
'q_id'], $_REQUEST[
'position_after']);
 
 4933        $ilCtrl->setParameterByClass(
'iltestexpresspageobjectgui', 
'q_id', $_REQUEST[
'q_id']);
 
 4934        $ilCtrl->redirectByClass(
'iltestexpresspageobjectgui', 
'showPage');
 
 4940        if (!$ilAccess->checkAccess(
"write", 
"", $this->ref_id)) {
 
 4943            $this->ctrl->redirect($this, 
"infoScreen");
 
 4946        if ($_REQUEST[
'q_id'] && !is_array($_REQUEST[
'q_id'])) {
 
 4947            $ids = array($_REQUEST[
'q_id']);
 
 4948        } elseif ($_REQUEST[
'q_id']) {
 
 4949            $ids = $_REQUEST[
'q_id'];
 
 4952            $this->ctrl->redirect($this, 
'questions');
 
 4957        $questionTitles = $this->
object->getQuestionTitles();
 
 4959        foreach ($ids as 
$id) {
 
 4960            include_once 
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
 
 4963                $title = $question->object->getTitle();
 
 4965                while (in_array(
$title . 
' (' . 
$i . 
')', $questionTitles)) {
 
 4971                $questionTitles[] = 
$title;
 
 4973                $new_id = $question->object->duplicate(
false, 
$title);
 
 4976                $clone->object->setObjId($this->object->getId());
 
 4977                $clone->object->saveToDb();
 
 4979                $this->
object->insertQuestion($this->testQuestionSetConfigFactory->getQuestionSetConfig(), $new_id, 
true);
 
 4987        $this->ctrl->redirect($this, 
'questions');
 
 4995        if (!isset(
$_GET[
'pdf'])) {
 
 4999        if (!(
bool) 
$_GET[
'pdf']) {
 
 5008        require_once 
'Modules/Course/classes/Objectives/class.ilLOSettings.php';
 
 5013        $this->objectiveOrientedContainer->setObjId($containerObjId);
 
 5014        $this->objectiveOrientedContainer->setRefId($containerRefId);
 
sprintf('%.4f', $callTime)
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
if(!isset( $_REQUEST[ 'ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
An exception for terminatinating execution or to throw for unit testing.
const QT_MULTIPLE_CHOICE_MR
const QT_ORDERING_HORIZONTAL
const QT_MULTIPLE_CHOICE_SR
Basic GUI class for assessment questions.
static _getQuestionGUI($question_type, $question_id=-1)
Creates a question gui representation and returns the alias to the question gui note: please do not u...
const RENDER_PURPOSE_PRINT_PDF
const EDIT_CONTEXT_AUTHORING
const RENDER_PURPOSE_PREVIEW
static _getOriginalId($question_id)
Returns the original id of a question.
static instantiateQuestionGUI($a_question_id)
Creates an instance of a question gui with a given question id.
static originalQuestionExists($questionId)
const ADDITIONAL_CONTENT_EDITING_MODE_DEFAULT
constant for additional content editing mode "default"
static _getQuestionTypeName($type_tag)
Return the translation for a given question type tag.
static _needsManualScoring($question_id)
static & _instanciateQuestionGUI($question_id)
Creates an instance of a question gui with a given question id.
static lookupParentObjId($questionId)
@global ilDBInterface $ilDB
const ADDITIONAL_CONTENT_EDITING_MODE_PAGE_OBJECT
constant for additional content editing mode "pageobject"
static getQuestionTypeFromDb($question_id)
get question type for question id
static _instanciateQuestion($question_id)
Creates an instance of a question with a given question id.
Generic feedback page GUI class.
const QUESTION_INSTANCE_TYPE_ORIGINALS
const QUESTION_INSTANCE_TYPE_DUPLICATES
const CMD_SHOW_SKILL_QUEST_ASSIGNS
Specific feedback page GUI class.
GUI class to create PDF certificates.
static _recordReadEvent( $a_type, $a_ref_id, $obj_id, $usr_id, $isCatchupWriteEvents=true, $a_ext_rc=false, $a_ext_time=false)
Records a read event and catches up with write events.
static getInstanceFromAjaxCall()
(Re-)Build instance from ajax call
Confirmation screen class.
static _isActive()
Static getter.
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false)
Format a date @access public.
static setUseRelativeDates($a_status)
set use relative dates
static useRelativeDates()
check if relative dates are used
@classDescription Date and time handling
static isObjectiveTest($a_trst_ref_id)
Check if test ref_id is used in an objective course.
GUI class for LTI provider object settings.
static checkAccess($a_ref_id, $a_allow_only_read=true)
check access to learning progress
const LP_CONTEXT_REPOSITORY
Class ilObjUserTrackingGUI.
static _getLink($a_ref_id, $a_type='', $a_params=array(), $append="")
Class ilLocalUnitConfigurationGUI.
static getSettingsTemplateConfig()
static isAdditionalQuestionContentEditingModePageObjectEnabled()
returns the fact wether content editing with ilias page editor is enabled for questions or not
static _getManualScoring()
Retrieve the manual scoring settings.
static _getLog($ts_from, $ts_to, $test_id, $test_only=false)
Retrieve assessment log datasets from the database.
static getQuestionTypeByTypeId($type_id)
static _getAvailableQuestionpools($use_object_id=false, $equal_points=false, $could_be_offline=false, $showPath=false, $with_questioncount=false, $permission="read", $usr_id="")
Returns the available question pools for the active user.
static getSyntaxStylePath()
get syntax style path
static getContentStylePath($a_style_id, $add_random=true)
get content style path
static _lookupOnlineTestAccess($a_test_id, $a_user_id)
Checks if a user is allowd to run an online exam.
static _getParticipantData($active_id)
Retrieves a participant name from active id.
importFileObject($parent_id=null, $a_catch_errors=true)
form for new test object import
applyFilterCriteria($in_rows)
trackTestObjectReadEvent()
cancelDeleteSelectedUserDataObject()
Cancels the deletion of all user data for the test object.
showDetailedResultsObject()
Shows the pass overview and the answers of one ore more users for the scored pass.
createQuestionObject()
Called when a new question should be created from a test.
createQuestionpoolTargetObject($cmd)
Called when a new question should be created from a test Important: $cmd may be overwritten if no que...
browseForQuestionsObject()
download_paragraphObject()
download source code paragraph
getRandomQuestionsTab(&$tabs_gui)
printobject()
Print tab to create a print of all questions with points and solutions.
addLocatorItems()
should be overwritten to add object specific items (repository items are preloaded)
userResultsGatewayObject()
backObject()
Called when the back button in the question browser was pressed.
removeQuestionsForm($checked_questions)
Displays a form to confirm the removal of questions from the test.
$objectiveOrientedContainer
insertQuestionsBeforeObject()
Insert checked questions before the actual selection.
cancelRemoveQuestionsObject()
Cancels the removal of questions from the test.
createQuestionPool($name="dummy", $description="")
Creates a new questionpool and returns the reference id.
forwardToEvalObjectiveOrientedGUI()
infoScreenObject()
this one is called from the info button in the repository not very nice to set cmdClass/Cmd manually,...
static $infoScreenChildClasses
showUserAnswersObject()
Shows the answers of one ore more users for the scored pass.
removeParticipantObject()
deleteSingleUserResultsObject()
Asks for a confirmation to delete selected user data of the test object.
copyAndLinkQuestionsToPoolObject()
@global ilObjectDataCache $ilObjDataCache
applyTemplate($templateData, $object)
addDidacticTemplateOptions(array &$a_options)
Add custom templates.
createQuestionPoolAndCopyObject()
afterSave(ilObject $a_new_object)
save object @access public
movePageFormObject()
Move current page.
createUserResults($show_pass_details, $show_answers, $show_reached_points, $show_user_results)
prepareSubGuiOutput()
prepares ilias to get output rendered by sub gui class
buildPageViewToolbar($qid=0)
Questions per page.
participantsActionObject()
Evaluates the actions on the participants page.
isCommandClassAnyInfoScreenChild()
executeCreateQuestionObject()
Called when a new question should be created from a test after confirmation.
confirmDeleteSelectedUserDataObject()
Deletes the selected user data for the test object.
confirmDeleteAllUserResultsObject()
Deletes all user data for the test object.
getBrowseForQuestionsTab(&$tabs_gui)
executeCommand()
execute command
addParticipantsObject($a_user_ids=array())
insertQuestionsObject()
Insert questions from the questionbrowser into the test.
fetchAuthoringQuestionIdParameter()
getObjectiveOrientedContainer()
determineObjectiveOrientedContainer()
static _goto($a_target)
Redirect script to call a test with the test reference id.
copyQuestionToPool($sourceQuestionId, $targetParentId)
$testQuestionSetConfigFactory
cancelRandomSelectObject()
Cancels the form for random selection of questions.
insertRandomSelectionObject()
Inserts a random selection into the test.
applyDefaultsObject($confirmed=false)
Applies the selected test defaults.
removeQuestionsObject()
Called when a selection of questions should be removed from the test.
createRandomSelectionObject()
Offers a random selection for insertion in the test.
downloadFileObject()
download file
showUserResults($show_pass_details, $show_answers, $show_reached_points=false)
Shows the pass overview of the scored pass for one ore more users.
copyQuestionsToPoolObject()
importVerifiedFileObject()
imports question(s) into the questionpool (after verification)
copyToQuestionpoolObject()
uploadObject($redirect=true)
display status information or report errors messages in case of error
moveQuestionsObject()
Marks selected questions for moving.
copyAndLinkToQuestionpoolObject()
getTabs()
adds tabs to tab gui object
questionsTabGatewayObject()
fullscreenObject()
show fullscreen view
redirectTo_ilObjTestSettingsGeneralGUI_showForm_Object()
participantsObject()
Creates the output of the test participants.
confirmRemoveQuestionsObject()
Remove questions from the test after confirmation.
showPassOverviewObject()
Shows the pass overview of the scored pass for one ore more users.
deleteAllUserResultsObject()
Asks for a confirmation to delete all user data of the test object.
redirectToInfoScreenObject()
__construct()
Constructor @access public.
cancelCreateQuestionObject()
Called when the creation of a new question is cancelled.
populateQuestionBrowserToolbarButtons(ilToolbarGUI $toolbar, $context)
reviewobject()
Review tab to create a print of all questions without points and solutions.
initImportForm($a_new_type)
Init object import form.
exportObject()
Gateway for exports initiated from workspace, as there is a generic forward to {objTypeMainGUI}::expo...
deleteDefaultsObject()
Deletes selected test defaults.
historyObject()
Creates the change history for a test.
uploadTstObject()
imports test and question(s)
insertQuestionsAfterObject()
Insert checked questions after the actual selection.
getQuestionpoolCreationForm()
copyQuestionsToPool($questionIds, $qplId)
addFinishAllPassesButton($unfinished_passes, $ilToolbar)
resetFilterObject()
Resets the filter for the question browser.
removeImportFailsObject()
saveOrderAndObligationsObject()
randomselectObject()
Creates a form for random selection of questions.
confirmedApplyDefaultsObject()
addDefaultsObject()
Adds the defaults of this test to the defaults.
deleteAllUserDataObject()
Asks for a confirmation to delete all user data of the test object.
filterObject()
Sets the filter for the question browser.
certificateObject()
Shows the certificate editor.
static accessViolationRedirect()
const CMD_SHOW_FORM
command constants
const QUESTION_SET_TYPE_DYNAMIC
type setting value for dynamic question set (continues testing mode)
static _getTestDefaults($test_defaults_id)
const QUESTION_SET_TYPE_RANDOM
type setting value for random question set
const QUESTION_SET_TYPE_FIXED
type setting value for fixed question set
static isSkillManagementGloballyActivated()
static _setImportDirectory($a_import_dir=null)
set import directory
static _getImportDirectory()
Get the import directory location of the test.
static isQuestionObligationPossible($questionId)
checks wether the obligation for question with given id is possible or not
static _createImportDirectory()
creates data directory for import files (data_dir/tst_data/tst_<id>/import, depending on data directo...
static _lookupName($a_user_id)
lookup user name
GUI class for the workflow of copying objects.
Class ilObjectGUI Basic methods of all Output classes.
getDidacticTemplateVar($a_type)
Get didactic template setting from creation screen.
prepareOutput($a_show_subobjects=true)
prepare output
getReturnLocation($a_cmd, $a_location="")
get return location for command (command is method name without "Object", e.g.
static _gotoRepositoryRoot($a_raise_error=false)
Goto repository root.
getCreationMode()
get creation mode
addHeaderAction()
Add header action menu.
createObject()
create new object form
setTitleAndDescription()
called by prepare output
Class ilObject Basic functions for all objects.
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
getRefId()
get reference id @access public
static _getAllReferences($a_id)
get all reference ids of object
static _lookupType($a_id, $a_reference=false)
lookup object type
static prepareGeneration()
Prepare the PDF generation This initializes the purpose for MathJax rendering It has to be called bef...
New PermissionGUI (extends from old ilPermission2GUI) RBAC related output.
This class represents an option in a radio group.
static fillAutoCompleteToolbar($parent_object, ilToolbarGUI $toolbar=null, $a_options=array(), $a_sticky=false)
fill toolbar with
Class ilScoringAdjustmentGUI.
Settings template application class.
static getAllSettingsTemplates($a_type, $a_include_auto_generated=false)
Get all settings templates of type.
special template class to simplify handling of ITX/PEAR
Test certificate adapter.
Output class for assessment test evaluation.
Base Exception for all Exceptions relating to Modules/Test.
Export User Interface Class.
@ilCtrl_Calls ilTestExpressPageObjectGUI: assMultipleChoiceGUI, assClozeTestGUI, assMatchingQuestionG...
static generatePDF($pdf_output, $output_mode, $filename=null, $purpose=null)
const PDF_OUTPUT_DOWNLOAD
Class ilTestPersonalDefaultSettingsTableGUI.
const CMD_BROWSE_QUESTIONS
Test results import parser.
ilTestScoringByQuestionsGUI
Service GUI class for tests.
This class represents a text area property in a property form.
This class represents a text property in a property form.
Class ilTimingOverviewTableGUI.
Class ilUnitConfigurationRepository.
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
static appendUrlParameterString($a_url, $a_par, $xml_style=false)
append URL parameter string ("par1=value1&par2=value2...") to given URL string
static sendQuestion($a_info="", $a_keep=false)
Send Question to Screen.
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
static redirect($a_script)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static unzip($a_file, $overwrite=false, $a_flat=false)
unzip file
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
static infoPanel($a_keep=true)
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms @access public
static setTokenMaxLifetimeInSeconds($token_max_lifetime_in_seconds)
if(!array_key_exists('StateId', $_REQUEST)) $id
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
const CLOZE_TEST_IDENTIFIER
Question identifier constants.
const REDIRECT_NONE
Redirect after finishing test constants.
const FLASHAPPLET_QUESTION_IDENTIFIER
const IMAGEMAP_QUESTION_IDENTIFIER
const SINGLE_CHOICE_QUESTION_IDENTIFIER
const FORMULA_QUESTION_IDENTIFIER
const ERROR_TEXT_IDENTIFIER
const SCORE_ZERO_POINTS_WHEN_UNANSWERED
const TEXTSUBSET_QUESTION_IDENTIFIER
const COUNT_PARTIAL_SOLUTIONS
const NUMERIC_QUESTION_IDENTIFIER
const JAVAAPPLET_QUESTION_IDENTIFIER
const TEST_FIXED_SEQUENCE
Test constants.
const FILE_UPLOAD_IDENTIFIER
const TEXT_QUESTION_IDENTIFIER
const PDF_PRINT_VIEW_QUESTIONS
const LONG_MENU_QUESTION_IDENTIFIER
const KPRIM_CHOICE_QUESTION_IDENTIFIER
const ORDERING_HORIZONTAL_IDENTIFIER
const MATCHING_QUESTION_IDENTIFIER
const MULTIPLE_CHOICE_QUESTION_IDENTIFIER
const PDF_USER_RESULT
PDF Purposes.
const ORDERING_QUESTION_IDENTIFIER
catch(Exception $e) $message
redirection script todo: (a better solution should control the processing via a xml file)
if(empty($password)) $table
if(isset($_POST['submit'])) $form
if(!file_exists("$old.txt")) if( $old===$new) if(file_exists("$new.txt")) $file
foreach($_POST as $key=> $value) $res