ILIAS  release_7 Revision v7.30-3-g800a261c036
ilTestEvaluationGUI Class Reference

Output class for assessment test evaluation. More...

+ Inheritance diagram for ilTestEvaluationGUI:
+ Collaboration diagram for ilTestEvaluationGUI:

Public Member Functions

 __construct (ilObjTest $a_object)
 ilTestEvaluationGUI constructor More...
 
 getTestAccess ()
 
 setTestAccess ($testAccess)
 
 executeCommand ()
 execute command More...
 
getHeaderNames ()
 
getHeaderVars ()
 
 filterEvaluation ()
 
 resetfilterEvaluation ()
 
 outEvaluation ()
 Creates the evaluation output for the test. More...
 
 detailedEvaluation ()
 Creates the detailed evaluation output for a selected participant. More...
 
 exportQuestionForAllParticipants ()
 Creates a PDF representation of the answers for a given question in a test. More...
 
 exportFileUploadsForAllParticipants ()
 Creates a ZIP file containing all file uploads for a given question in a test. More...
 
 eval_a ()
 Output of anonymous aggregated results for the test. More...
 
 exportEvaluation ()
 Exports the evaluation data to a selected file format. More...
 
 exportAggregatedResults ()
 Exports the aggregated results. More...
 
 exportCertificate ()
 Exports the user results as PDF certificates using XSL-FO via XML:RPC calls. More...
 
 getEvaluationQuestionId ($question_id, $original_id="")
 Returns the ID of a question for evaluation purposes. More...
 
 outParticipantsPassDetails ()
 Output of the pass details of an existing test pass for the test statistics. More...
 
 outParticipantsResultsOverview ()
 Output of the pass overview for a test called from the statistics. More...
 
 outUserPassDetailsSetTableFilter ()
 
 outUserPassDetailsResetTableFilter ()
 
 outParticipantsPassDetailsSetTableFilter ()
 
 outParticipantsPassDetailsResetTableFilter ()
 
 outUserPassDetails ()
 Output of the pass details of an existing test pass for the active test participant. More...
 
 outUserResultsOverview ()
 Output of the pass overview for a test called by a test participant. More...
 
 outUserListOfAnswerPasses ()
 Output of the pass overview for a user when he/she wants to see his/her list of answers. More...
 
 passDetails ()
 Output of the learners view of an existing test pass. More...
 
 singleResults ()
 Creates user results for single questions. More...
 
 outCertificate ()
 Output of a test certificate. More...
 
 confirmDeletePass ()
 
 cancelDeletePass ()
 
 finishTestPassForSingleUser ()
 
 confirmFinishTestPassForUser ()
 
 finishAllUserPasses ()
 
 confirmFinishTestPassForAllUser ()
 
- Public Member Functions inherited from ilTestServiceGUI
 isContextResultPresentation ()
 
 setContextResultPresentation ($contextResultPresentation)
 
 __construct (ilObjTest $a_object)
 The constructor takes the test object reference as parameter. More...
 
 setParticipantData ($participantData)
 
 getParticipantData ()
 
 getPassOverviewTableData (ilTestSession $testSession, $passes, $withResults)
 
 setObjectiveOrientedContainer (ilTestObjectiveOrientedContainer $objectiveOrientedContainer)
 
 getObjectiveOrientedContainer ()
 
 executeCommand ()
 execute command More...
 
 getCommand ($cmd)
 Retrieves the ilCtrl command. More...
 
 buildPassOverviewTableGUI ($targetGUI)
 
 getPassListOfAnswers (&$result_array, $active_id, $pass, $show_solutions=false, $only_answered_questions=false, $show_question_only=false, $show_reached_points=false, $anchorNav=false, ilTestQuestionRelatedObjectivesList $objectivesList=null, ilTestResultHeaderLabelBuilder $testResultHeaderLabelBuilder=null)
 Returns the list of answers of a users test pass. More...
 
 getPassListOfAnswersWithScoring (&$result_array, $active_id, $pass, $show_solutions=false)
 Returns the list of answers of a users test pass and offers a scoring option. More...
 
 getResultsSignature ()
 Returns HTML code for a signature field. More...
 
 getAdditionalUsrDataHtmlAndPopulateWindowTitle ($testSession, $active_id, $overwrite_anonymity=false)
 Returns the user data for a test results output. More...
 
 getCorrectSolutionOutput ($question_id, $active_id, $pass, ilTestQuestionRelatedObjectivesList $objectivesList=null)
 Returns an output of the solution to an answer compared to the correct solution. More...
 
 getResultsOfUserOutput ($testSession, $active_id, $pass, $targetGUI, $show_pass_details=true, $show_answers=true, $show_question_only=false, $show_reached_points=false)
 Output of the pass overview for a test called by a test participant. More...
 
 getResultsHeadUserAndPass ($active_id, $pass)
 Returns the user and pass data for a test results output. More...
 
 getQuestionResultForTestUsers ($question_id, $test_id)
 Creates a HTML representation for the results of a given question in a test. More...
 
 populatePassFinishDate ($tpl, $passFinishDate)
 
 populateExamId (ilTemplate $tpl, int $activeId, int $pass)
 

Protected Member Functions

 getFilteredTestResult ($active_id, $pass, $considerHiddenQuestions, $considerOptionalQuestions)
 
 finishTestPass ($active_id, $obj_id)
 
 redirectBackToParticipantsScreen ()
 
- Protected Member Functions inherited from ilTestServiceGUI
 isPdfDeliveryRequest ()
 
 buildQuestionAnswerShuffler (string $question_id, string $active_id, string $active_pass)
 
 buildFixedShufflerSeedFromBasicSeed (string $basic_seed)
 
 getPassDetailsOverviewTableGUI ($result_array, $active_id, $pass, $targetGUI, $targetCMD, $questionDetailsCMD, $questionAnchorNav, ilTestQuestionRelatedObjectivesList $objectivesList=null, $multipleObjectivesInvolved=true)
 
 buildPassDetailsOverviewTableGUI ($targetGUI, $targetCMD)
 
 isGradingMessageRequired ()
 
 getGradingMessageBuilder ($activeId)
 
 buildQuestionRelatedObjectivesList (ilLOTestQuestionAdapter $objectivesAdapter, ilTestQuestionSequence $testSequence)
 
 getFilteredTestResult ($active_id, $pass, $considerHiddenQuestions, $considerOptionalQuestions)
 
 populateContent ($content)
 
 buildUserTestResultsToolbarGUI ()
 
 outCorrectSolutionCmd ()
 
 outCorrectSolution ()
 Creates an output of the solution of an answer compared to the correct solution. More...
 

Protected Attributes

 $testAccess
 
 $processLockerFactory
 
- Protected Attributes inherited from ilTestServiceGUI
const FIXED_SHUFFLER_SEED_MIN_LENGTH = 8
 
 $db
 
 $refinery
 
 $tabs
 
 $objCache
 
 $testSessionFactory = null
 
 $testSequenceFactory = null
 
 $participantData
 

Private Member Functions

 redirectToPassDeletionContext ($context)
 

Additional Inherited Members

- Data Fields inherited from ilTestServiceGUI
 $object = null
 
 $service = null
 
 $lng
 
 $tpl
 
 $ctrl
 
 $ilias
 
 $tree
 
 $ref_id
 

Detailed Description

Output class for assessment test evaluation.

The ilTestEvaluationGUI class creates the output for the ilObjTestGUI class when authors evaluate a test. This saves some heap space because the ilObjTestGUI class will be much smaller then

Author
Helmut Schottmüller helmu.nosp@m.t.sc.nosp@m.hottm.nosp@m.uell.nosp@m.er@ma.nosp@m.c.co.nosp@m.m
Björn Heyser bheys.nosp@m.er@d.nosp@m.ataba.nosp@m.y.de
Maximilian Becker mbeck.nosp@m.er@d.nosp@m.ataba.nosp@m.y.de
Version
$Id$

@ilCtrl_Calls ilTestEvaluationGUI: ilTestPassDetailsOverviewTableGUI @ilCtrl_Calls ilTestEvaluationGUI: ilTestResultsToolbarGUI @ilCtrl_Calls ilTestEvaluationGUI: ilTestPassDeletionConfirmationGUI

Definition at line 28 of file class.ilTestEvaluationGUI.php.

Constructor & Destructor Documentation

◆ __construct()

ilTestEvaluationGUI::__construct ( ilObjTest  $a_object)

ilTestEvaluationGUI constructor

The constructor takes possible arguments an creates an instance of the ilTestEvaluationGUI object.

Parameters
ilObjTest$a_objectAssociated ilObjTest class

Reimplemented from ilTestServiceGUI.

Definition at line 48 of file class.ilTestEvaluationGUI.php.

49 {
50 parent::__construct($a_object);
51
52 global $DIC; /* @var ILIAS\DI\Container $DIC */
53
54 require_once 'Modules/Test/classes/class.ilTestProcessLockerFactory.php';
55 $this->processLockerFactory = new ilTestProcessLockerFactory(
56 new ilSetting('assessment'),
57 $DIC->database()
58 );
59 }
ILIAS Setting Class.
global $DIC
Definition: goto.php:24
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc

References $DIC, and ILIAS\GlobalScreen\Provider\__construct().

+ Here is the call graph for this function:

Member Function Documentation

◆ cancelDeletePass()

ilTestEvaluationGUI::cancelDeletePass ( )

Definition at line 1767 of file class.ilTestEvaluationGUI.php.

1768 {
1769 $this->redirectToPassDeletionContext($_POST['context']);
1770 }
$_POST["username"]

References $_POST, and redirectToPassDeletionContext().

+ Here is the call graph for this function:

◆ confirmDeletePass()

ilTestEvaluationGUI::confirmDeletePass ( )

Definition at line 1745 of file class.ilTestEvaluationGUI.php.

1746 {
1747 if (isset($_GET['context']) && strlen($_GET['context'])) {
1748 $context = $_GET['context'];
1749 } else {
1751 }
1752
1753 if (!$this->object->isPassDeletionAllowed() && !$this->object->isDynamicTest()) {
1755 }
1756
1757 require_once 'Modules/Test/classes/confirmations/class.ilTestPassDeletionConfirmationGUI.php';
1758
1759 $confirm = new ilTestPassDeletionConfirmationGUI($this->ctrl, $this->lng, $this);
1760 $confirm->build((int) $_GET['active_id'], (int) $_GET['pass'], $context);
1761
1762 global $DIC;
1763 $tpl = $DIC['tpl'];
1764 $tpl->setContent($this->ctrl->getHTML($confirm));
1765 }
$_GET["client_id"]
$context
Definition: webdav.php:26

References $_GET, $context, $DIC, ilTestServiceGUI\$tpl, ilTestPassDeletionConfirmationGUI\CONTEXT_PASS_OVERVIEW, and redirectToPassDeletionContext().

+ Here is the call graph for this function:

◆ confirmFinishTestPassForAllUser()

ilTestEvaluationGUI::confirmFinishTestPassForAllUser ( )

Definition at line 2233 of file class.ilTestEvaluationGUI.php.

2234 {
2235 require_once 'Modules/Test/classes/class.ilTestParticipantAccessFilter.php';
2237
2238 require_once 'Modules/Test/classes/class.ilTestParticipantList.php';
2239 $participantList = new ilTestParticipantList($this->object);
2240 $participantList->initializeFromDbRows($this->object->getTestParticipants());
2241 $participantList = $participantList->getAccessFilteredList($accessFilter);
2242
2243 foreach ($participantList as $participant) {
2244 if (!$participant->hasUnfinishedPasses()) {
2245 continue;
2246 }
2247
2248 $testSession = new ilTestSession();
2249 $testSession->loadFromDb($participant->getActiveId());
2250
2251 assQuestion::_updateTestPassResults(
2252 $participant->getActiveId(),
2253 $testSession->getPass(),
2254 $this->object->areObligationsEnabled(),
2255 null,
2256 $this->object->getId()
2257 );
2258
2259 $this->finishTestPass($participant->getActiveId(), $this->object->getId());
2260 }
2261
2263 }
finishTestPass($active_id, $obj_id)
Test session handler.

References finishTestPass(), ilTestParticipantAccessFilter\getManageParticipantsUserFilter(), and redirectBackToParticipantsScreen().

+ Here is the call graph for this function:

◆ confirmFinishTestPassForUser()

ilTestEvaluationGUI::confirmFinishTestPassForUser ( )

Definition at line 2164 of file class.ilTestEvaluationGUI.php.

2165 {
2166 global $DIC; /* @var ILIAS\DI\Container $DIC */
2167
2168 $activeId = (int) $_GET["active_id"];
2169
2170 require_once 'Modules/Test/classes/class.ilTestParticipantAccessFilter.php';
2172
2173 require_once 'Modules/Test/classes/class.ilTestParticipantList.php';
2174 $participantData = new ilTestParticipantData($DIC->database(), $DIC->language());
2175 $participantData->setActiveIdsFilter(array($activeId));
2176 $participantData->setParticipantAccessFilter($accessFilter);
2177 $participantData->load($this->object->getTestId());
2178
2179 if (in_array($activeId, $participantData->getActiveIds())) {
2180 $testSession = new ilTestSession();
2181 $testSession->loadFromDb($activeId);
2182
2183 assQuestion::_updateTestPassResults(
2184 $activeId,
2185 $testSession->getPass(),
2186 $this->object->areObligationsEnabled(),
2187 null,
2188 $this->object->getId()
2189 );
2190
2191 $this->finishTestPass($activeId, $this->object->getId());
2192 }
2193
2194
2196 }

References $_GET, $DIC, ilTestServiceGUI\$participantData, finishTestPass(), ilTestParticipantAccessFilter\getManageParticipantsUserFilter(), and redirectBackToParticipantsScreen().

+ Here is the call graph for this function:

◆ detailedEvaluation()

ilTestEvaluationGUI::detailedEvaluation ( )

Creates the detailed evaluation output for a selected participant.

Creates the detailed evaluation output for a selected participant

@access public

Definition at line 364 of file class.ilTestEvaluationGUI.php.

365 {
366 global $DIC; /* @var ILIAS\DI\Container $DIC */
367
368 if (!$this->getTestAccess()->checkStatisticsAccess()) {
370 }
371
372 $DIC->tabs()->activateTab(ilTestTabsManager::TAB_ID_STATISTICS);
373
374 $active_id = $_GET['active_id'];
375
376 if (!$this->getTestAccess()->checkResultsAccessForActiveId($active_id)) {
378 }
379
380 if (strlen($active_id) == 0) {
381 ilUtil::sendInfo($this->lng->txt('detailed_evaluation_missing_active_id'), true);
382 $this->ctrl->redirect($this, 'outEvaluation');
383 }
384
385 $this->tpl->addCss(ilUtil::getStyleSheetLocation('output', 'test_print.css', 'Modules/Test'), 'print');
386
387 $toolbar = $DIC['ilToolbar'];
388
389 require_once 'Services/UIComponent/Button/classes/class.ilLinkButton.php';
390 $backBtn = ilLinkButton::getInstance();
391 $backBtn->setCaption('back');
392 $backBtn->setUrl($this->ctrl->getLinkTarget($this, 'outEvaluation'));
393 $toolbar->addInputItem($backBtn);
394
395 $this->object->setAccessFilteredParticipantList(
396 $this->object->buildStatisticsAccessFilteredParticipantList()
397 );
398
399 $data = &$this->object->getCompleteEvaluationData();
400
401 require_once 'Services/Form/classes/class.ilPropertyFormGUI.php';
402 $form = new ilPropertyFormGUI();
403 $form->setTitle(sprintf(
404 $this->lng->txt('detailed_evaluation_for'),
405 $data->getParticipant($active_id)->getName()
406 ));
407
408 $resultPoints = new ilNonEditableValueGUI($this->lng->txt('tst_stat_result_resultspoints'));
409 $resultPoints->setValue($data->getParticipant($active_id)->getReached() . " " . strtolower($this->lng->txt("of")) . " " . $data->getParticipant($active_id)->getMaxpoints() . " (" . sprintf("%2.2f", $data->getParticipant($active_id)->getReachedPointsInPercent()) . " %" . ")");
410 $form->addItem($resultPoints);
411
412 if (strlen($data->getParticipant($active_id)->getMark())) {
413 $resultMarks = new ilNonEditableValueGUI($this->lng->txt('tst_stat_result_resultsmarks'));
414 $resultMarks->setValue($data->getParticipant($active_id)->getMark());
415 $form->addItem($resultMarks);
416 if (strlen($data->getParticipant($active_id)->getECTSMark())) {
417 $ectsGrade = new ilNonEditableValueGUI($this->lng->txt('ects_grade'));
418 $ectsGrade->setValue($data->getParticipant($active_id)->getECTSMark());
419 $form->addItem($ectsGrade);
420 }
421 }
422
423 if ($this->object->isOfferingQuestionHintsEnabled()) {
424 $requestHints = new ilNonEditableValueGUI($this->lng->txt('tst_question_hints_requested_hint_count_header'));
425 $requestHints->setValue($data->getParticipant($active_id)->getRequestedHintsCountFromScoredPass());
426 $form->addItem($requestHints);
427 }
428
429 $time_seconds = $data->getParticipant($active_id)->getTimeOfWork();
430 $atime_seconds = $data->getParticipant($active_id)->getNumberOfQuestions() ? $time_seconds / $data->getParticipant($active_id)->getNumberOfQuestions() : 0;
431 $time_hours = floor($time_seconds / 3600);
432 $time_seconds -= $time_hours * 3600;
433 $time_minutes = floor($time_seconds / 60);
434 $time_seconds -= $time_minutes * 60;
435 $timeOfWork = new ilNonEditableValueGUI($this->lng->txt('tst_stat_result_timeofwork'));
436 $timeOfWork->setValue(sprintf("%02d:%02d:%02d", $time_hours, $time_minutes, $time_seconds));
437 $form->addItem($timeOfWork);
438
439 $this->tpl->setVariable("TXT_ATIMEOFWORK", $this->lng->txt(""));
440 $time_hours = floor($atime_seconds / 3600);
441 $atime_seconds -= $time_hours * 3600;
442 $time_minutes = floor($atime_seconds / 60);
443 $atime_seconds -= $time_minutes * 60;
444 $avgTimeOfWork = new ilNonEditableValueGUI($this->lng->txt('tst_stat_result_atimeofwork'));
445 $avgTimeOfWork->setValue(sprintf("%02d:%02d:%02d", $time_hours, $time_minutes, $atime_seconds));
446 $form->addItem($avgTimeOfWork);
447
448 $firstVisit = new ilNonEditableValueGUI($this->lng->txt('tst_stat_result_firstvisit'));
449 $firstVisit->setValue(ilDatePresentation::formatDate(new ilDateTime($data->getParticipant($active_id)->getFirstVisit(), IL_CAL_UNIX)));
450 $form->addItem($firstVisit);
451
452 $lastVisit = new ilNonEditableValueGUI($this->lng->txt('tst_stat_result_lastvisit'));
453 $lastVisit->setValue(ilDatePresentation::formatDate(new ilDateTime($data->getParticipant($active_id)->getLastVisit(), IL_CAL_UNIX)));
454 $form->addItem($lastVisit);
455
456 $nrPasses = new ilNonEditableValueGUI($this->lng->txt('tst_nr_of_passes'));
457 $nrPasses->setValue($data->getParticipant($active_id)->getLastPass() + 1);
458 $form->addItem($nrPasses);
459
460 $scoredPass = new ilNonEditableValueGUI($this->lng->txt('scored_pass'));
461 if ($this->object->getPassScoring() == SCORE_BEST_PASS) {
462 $scoredPass->setValue($data->getParticipant($active_id)->getBestPass() + 1);
463 } else {
464 $scoredPass->setValue($data->getParticipant($active_id)->getLastPass() + 1);
465 }
466 $form->addItem($scoredPass);
467
468 $median = $data->getStatistics()->getStatistics()->median();
469 $pct = $data->getParticipant($active_id)->getMaxpoints() ? ($median / $data->getParticipant($active_id)->getMaxpoints()) * 100.0 : 0;
470 $mark = $this->object->mark_schema->getMatchingMark($pct);
471 if (is_object($mark)) {
472 $markMedian = new ilNonEditableValueGUI($this->lng->txt('tst_stat_result_mark_median'));
473 $markMedian->setValue($mark->getShortName());
474 $form->addItem($markMedian);
475 }
476
477 $rankParticipant = new ilNonEditableValueGUI($this->lng->txt('tst_stat_result_rank_participant'));
478 $rankParticipant->setValue($data->getStatistics()->getStatistics()->rank($data->getParticipant($active_id)->getReached()));
479 $form->addItem($rankParticipant);
480
481 $rankMedian = new ilNonEditableValueGUI($this->lng->txt('tst_stat_result_rank_median'));
482 $rankMedian->setValue($data->getStatistics()->getStatistics()->rank_median());
483 $form->addItem($rankMedian);
484
485 $totalParticipants = new ilNonEditableValueGUI($this->lng->txt('tst_stat_result_total_participants'));
486 $totalParticipants->setValue($data->getStatistics()->getStatistics()->count());
487 $form->addItem($totalParticipants);
488
489 $medianField = new ilNonEditableValueGUI($this->lng->txt('tst_stat_result_median'));
490 $medianField->setValue($median);
491 $form->addItem($medianField);
492
493 $this->tpl->setContent($form->getHTML());
494
495 $tables = array();
496
497 for ($pass = 0; $pass <= $data->getParticipant($active_id)->getLastPass(); $pass++) {
498 $finishdate = ilObjTest::lookupPassResultsUpdateTimestamp($active_id, $pass);
499 if ($finishdate > 0) {
500 if (($DIC->access()->checkAccess('write', '', (int) $_GET['ref_id']))) {
501 $this->ctrl->setParameter($this, 'statistics', '1');
502 $this->ctrl->setParameter($this, 'active_id', $active_id);
503 $this->ctrl->setParameter($this, 'pass', $pass);
504 } else {
505 $this->ctrl->setParameter($this, 'statistics', '');
506 $this->ctrl->setParameter($this, 'active_id', '');
507 $this->ctrl->setParameter($this, 'pass', '');
508 }
509
510 require_once 'Modules/Test/classes/tables/class.ilTestDetailedEvaluationStatisticsTableGUI.php';
511 $table = new ilTestDetailedEvaluationStatisticsTableGUI($this, 'detailedEvaluation', ($pass + 1) . '_' . $this->object->getId());
512 $table->setTitle(sprintf($this->lng->txt("tst_eval_question_points"), $pass + 1));
513 if (($DIC->access()->checkAccess('write', '', (int) $_GET['ref_id']))) {
514 $table->addCommandButton('outParticipantsPassDetails', $this->lng->txt('tst_show_answer_sheet'));
515 }
516
517 $questions = $data->getParticipant($active_id)->getQuestions($pass);
518 if (!is_array($questions)) {
519 $questions = $data->getParticipant($active_id)->getQuestions(0);
520 }
521
522 $tableData = array();
523
524 $counter = 0;
525 foreach ((array) $questions as $question) {
526 $userDataData = array(
527 'counter' => ++$counter,
528 'id' => $question['id'],
529 'id_txt' => $this->lng->txt('question_id_short'),
530 'title' => $data->getQuestionTitle($question['id'])
531 );
532
533 $answeredquestion = $data->getParticipant($active_id)->getPass($pass)->getAnsweredQuestionByQuestionId($question["id"]);
534 if (is_array($answeredquestion)) {
535 $percent = $answeredquestion['points'] ? $answeredquestion['reached'] / $answeredquestion['points'] * 100.0 : 0;
536 $userDataData['points'] = $answeredquestion['reached'] . ' ' . strtolower($this->lng->txt('of')) . " " . $answeredquestion['points'] . ' (' . sprintf("%.2f", $percent) . ' %)';
537 } else {
538 $userDataData['points'] = '0 ' . strtolower($this->lng->txt('of')) . ' ' . $question['points'] . ' (' . sprintf("%.2f", 0) . ' %) - ' . $this->lng->txt('question_not_answered');
539 }
540
541 $tableData[] = $userDataData;
542 }
543 $table->setData($tableData);
544
545 $tables[] = $table->getHTML();
546 }
547 }
548
549 global $DIC; /* @var ILIAS\DI\Container $DIC */
550 $DIC['tpl']->setContent($form->getHTML() . implode('', $tables));
551 }
const IL_CAL_UNIX
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date @access public.
@classDescription Date and time handling
static getInstance()
Factory.
This class represents a non editable value in a property form.
static accessViolationRedirect()
static lookupPassResultsUpdateTimestamp($active_id, $pass)
This class represents a property form user interface.
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
const SCORE_BEST_PASS
$data
Definition: storeScorm.php:23

References $_GET, $data, $DIC, $pass, ilObjTestGUI\accessViolationRedirect(), ilDatePresentation\formatDate(), ilLinkButton\getInstance(), ilUtil\getStyleSheetLocation(), getTestAccess(), IL_CAL_UNIX, ilObjTest\lookupPassResultsUpdateTimestamp(), SCORE_BEST_PASS, ilUtil\sendInfo(), and ilTestTabsManager\TAB_ID_STATISTICS.

+ Here is the call graph for this function:

◆ eval_a()

ilTestEvaluationGUI::eval_a ( )

Output of anonymous aggregated results for the test.

Output of anonymous aggregated results for the test

@access public

Definition at line 588 of file class.ilTestEvaluationGUI.php.

589 {
590 global $DIC; /* @var ILIAS\DI\Container $DIC */
591 $ilToolbar = $DIC->toolbar();
592
593 if (!$this->getTestAccess()->checkStatisticsAccess()) {
595 }
596
597 $DIC->tabs()->activateTab(ilTestTabsManager::TAB_ID_STATISTICS);
598
599 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.il_as_tst_eval_anonymous_aggregation.html", "Modules/Test");
600
601 $this->object->setAccessFilteredParticipantList(
602 $this->object->buildStatisticsAccessFilteredParticipantList()
603 );
604
605 $eval = &$this->object->getCompleteEvaluationData();
606 $data = array();
607 $foundParticipants = &$eval->getParticipants();
608 if (count($foundParticipants)) {
609 $ilToolbar->setFormName('form_output_eval');
610 $ilToolbar->setFormAction($this->ctrl->getFormAction($this, 'exportAggregatedResults'));
611 require_once 'Services/Form/classes/class.ilSelectInputGUI.php';
612 $export_type = new ilSelectInputGUI($this->lng->txt('exp_eval_data'), 'export_type');
613 $export_type->setOptions(array(
614 'excel' => $this->lng->txt('exp_type_excel'),
615 'csv' => $this->lng->txt('exp_type_spss')
616 ));
617 $ilToolbar->addInputItem($export_type, true);
618 require_once 'Services/UIComponent/Button/classes/class.ilSubmitButton.php';
619 $button = ilSubmitButton::getInstance();
620 $button->setCommand('exportAggregatedResults');
621 $button->setCaption('export');
622 $button->getOmitPreventDoubleSubmission();
623 $ilToolbar->addButtonInstance($button);
624
625 array_push($data, array(
626 'result' => $this->lng->txt("tst_eval_total_persons"),
627 'value' => count($foundParticipants)
628 ));
629 $total_finished = $eval->getTotalFinishedParticipants();
630 array_push($data, array(
631 'result' => $this->lng->txt("tst_eval_total_finished"),
632 'value' => $total_finished
633 ));
634 $average_time = $this->object->evalTotalStartedAverageTime(
635 $eval->getParticipantIds()
636 );
637 $diff_seconds = $average_time;
638 $diff_hours = floor($diff_seconds / 3600);
639 $diff_seconds -= $diff_hours * 3600;
640 $diff_minutes = floor($diff_seconds / 60);
641 $diff_seconds -= $diff_minutes * 60;
642 array_push($data, array(
643 'result' => $this->lng->txt("tst_eval_total_finished_average_time"),
644 'value' => sprintf("%02d:%02d:%02d", $diff_hours, $diff_minutes, $diff_seconds)
645 ));
646 $total_passed = 0;
647 $total_passed_reached = 0;
648 $total_passed_max = 0;
649 $total_passed_time = 0;
650 foreach ($foundParticipants as $userdata) {
651 if ($userdata->getPassed()) {
652 $total_passed++;
653 $total_passed_reached += $userdata->getReached();
654 $total_passed_max += $userdata->getMaxpoints();
655 $total_passed_time += $userdata->getTimeOfWork();
656 }
657 }
658 $average_passed_reached = $total_passed ? $total_passed_reached / $total_passed : 0;
659 $average_passed_max = $total_passed ? $total_passed_max / $total_passed : 0;
660 $average_passed_time = $total_passed ? $total_passed_time / $total_passed : 0;
661 array_push($data, array(
662 'result' => $this->lng->txt("tst_eval_total_passed"),
663 'value' => $total_passed
664 ));
665 array_push($data, array(
666 'result' => $this->lng->txt("tst_eval_total_passed_average_points"),
667 'value' => sprintf("%2.2f", $average_passed_reached) . " " . strtolower($this->lng->txt("of")) . " " . sprintf("%2.2f", $average_passed_max)
668 ));
669 $average_time = $average_passed_time;
670 $diff_seconds = $average_time;
671 $diff_hours = floor($diff_seconds / 3600);
672 $diff_seconds -= $diff_hours * 3600;
673 $diff_minutes = floor($diff_seconds / 60);
674 $diff_seconds -= $diff_minutes * 60;
675 array_push($data, array(
676 'result' => $this->lng->txt("tst_eval_total_passed_average_time"),
677 'value' => sprintf("%02d:%02d:%02d", $diff_hours, $diff_minutes, $diff_seconds)
678 ));
679 }
680
681 include_once "./Modules/Test/classes/tables/class.ilTestAggregatedResultsTableGUI.php";
682 $table_gui = new ilTestAggregatedResultsTableGUI($this, 'eval_a');
683 $table_gui->setData($data);
684 $this->tpl->setVariable('AGGREGATED_RESULTS', $table_gui->getHTML());
685
686 $rows = array();
687 foreach ($eval->getQuestionTitles() as $question_id => $question_title) {
688 $answered = 0;
689 $reached = 0;
690 $max = 0;
691 foreach ($foundParticipants as $userdata) {
692 for ($i = 0; $i <= $userdata->getLastPass(); $i++) {
693 if (is_object($userdata->getPass($i))) {
694 $question = &$userdata->getPass($i)->getAnsweredQuestionByQuestionId($question_id);
695 if (is_array($question)) {
696 $answered++;
697 $reached += $question["reached"];
698 $max += $question["points"];
699 }
700 }
701 }
702 }
703 $percent = $max ? $reached / $max * 100.0 : 0;
704 $counter++;
705 $this->ctrl->setParameter($this, "qid", $question_id);
706
707 $points_reached = ($answered ? $reached / $answered : 0);
708 $points_max = ($answered ? $max / $answered : 0);
709 array_push(
710 $rows,
711 array(
712 'qid' => $question_id,
713 'title' => $question_title,
714 'points' => $points_reached,
715 'points_reached' => $points_reached,
716 'points_max' => $points_max,
717 'percentage' => (float) $percent,
718 'answers' => $answered
719 )
720 );
721 }
722 include_once "./Modules/Test/classes/tables/class.ilTestAverageReachedPointsTableGUI.php";
723 $table_gui = new ilTestAverageReachedPointsTableGUI($this, 'eval_a');
724 $table_gui->setData($rows);
725 $this->tpl->setVariable('TBL_AVG_REACHED', $table_gui->getHTML());
726 }
This class represents a selection list property in a property form.
static getInstance()
Factory.
$i
Definition: metadata.php:24
$rows
Definition: xhr_table.php:10

References $data, $DIC, $i, $rows, ilObjTestGUI\accessViolationRedirect(), ilSubmitButton\getInstance(), getTestAccess(), and ilTestTabsManager\TAB_ID_STATISTICS.

+ Here is the call graph for this function:

◆ executeCommand()

ilTestEvaluationGUI::executeCommand ( )

execute command

Reimplemented from ilTestServiceGUI.

Definition at line 80 of file class.ilTestEvaluationGUI.php.

81 {
82 $cmd = $this->ctrl->getCmd();
83 $next_class = $this->ctrl->getNextClass($this);
84 $this->ctrl->saveParameter($this, "sequence");
85 $this->ctrl->saveParameter($this, "active_id");
86 $cmd = $this->getCommand($cmd);
87 switch ($next_class) {
88 case 'iltestpassdetailsoverviewtablegui':
89 require_once 'Modules/Test/classes/tables/class.ilTestPassDetailsOverviewTableGUI.php';
90 $tableGUI = new ilTestPassDetailsOverviewTableGUI($this->ctrl, $this, 'outUserPassDetails');
91 $tableGUI->setIsPdfGenerationRequest($this->isPdfDeliveryRequest());
92 $tableGUI->initFilter();
93 $this->ctrl->forwardCommand($tableGUI);
94 break;
95
96 default:
97 $ret = &$this->$cmd();
98 break;
99 }
100 return $ret;
101 }
getCommand($cmd)
Retrieves the ilCtrl command.
$ret
Definition: parser.php:6

References $ret, ilTestServiceGUI\getCommand(), and ilTestServiceGUI\isPdfDeliveryRequest().

+ Here is the call graph for this function:

◆ exportAggregatedResults()

ilTestEvaluationGUI::exportAggregatedResults ( )

Exports the aggregated results.

@access public

Definition at line 789 of file class.ilTestEvaluationGUI.php.

790 {
791 require_once 'Modules/Test/classes/class.ilTestExportFactory.php';
792 $expFactory = new ilTestExportFactory($this->object);
793 $exportObj = $expFactory->getExporter('aggregated');
794
795 switch ($_POST["export_type"]) {
796 case "excel":
797 $exportObj->exportToExcel($deliver = true);
798 break;
799 case "csv":
800 $exportObj->exportToCSV($deliver = true);
801 break;
802 }
803 }

References $_POST.

◆ exportCertificate()

ilTestEvaluationGUI::exportCertificate ( )

Exports the user results as PDF certificates using XSL-FO via XML:RPC calls.

@access public

Definition at line 811 of file class.ilTestEvaluationGUI.php.

812 {
813 global $DIC;
814
815 $globalCertificatePrerequisites = new ilCertificateActiveValidator();
816 if (!$globalCertificatePrerequisites->validate()) {
817 $DIC['ilErr']->raiseError($this->lng->txt('permission_denied'), $DIC['ilErr']->MESSAGE);
818 }
819
820 $database = $DIC->database();
821 $logger = $DIC->logger()->root();
822
823 $pathFactory = new ilCertificatePathFactory();
824 $objectId = $this->object->getId();
825 $zipAction = new ilUserCertificateZip(
826 $objectId,
827 $pathFactory->create($this->object)
828 );
829
830 $archive_dir = $zipAction->createArchiveDirectory();
831 $total_users = array();
832
833 $this->object->setAccessFilteredParticipantList(
834 $this->object->buildStatisticsAccessFilteredParticipantList()
835 );
836
837 $ilUserCertificateRepository = new ilUserCertificateRepository($database, $logger);
838 $pdfGenerator = new ilPdfGenerator($ilUserCertificateRepository, $logger);
839
840 $total_users = &$this->object->evalTotalPersonsArray();
841 if (count($total_users)) {
842 $certValidator = new ilCertificateDownloadValidator();
843
844 foreach ($total_users as $active_id => $name) {
845 $user_id = $this->object->_getUserIdFromActiveId($active_id);
846
847 if (!$certValidator->isCertificateDownloadable($user_id, $objectId)) {
848 continue;
849 }
850
851 $pdfAction = new ilCertificatePdfAction(
852 $logger,
853 $pdfGenerator,
855 $this->lng->txt('error_creating_certificate_pdf')
856 );
857
858 $pdf = $pdfAction->createPDF($user_id, $objectId);
859 if (strlen($pdf)) {
860 $zipAction->addPDFtoArchiveDirectory($pdf, $archive_dir, $user_id . "_" . str_replace(" ", "_", ilUtil::getASCIIFilename($name)) . ".pdf");
861 }
862 }
863 $zipArchive = $zipAction->zipCertificatesInArchiveDirectory($archive_dir, true);
864 }
865 }
Validates if an active certificate is stored in the database and can be downloaded by the user.
Just a wrapper class to create Unit Test for other classes.
static getASCIIFilename($a_filename)
convert utf8 to ascii filename
if($format !==null) $name
Definition: metadata.php:230
Class ilPdfGeneratorConstantsTest.

References $DIC, $name, and ilUtil\getASCIIFilename().

+ Here is the call graph for this function:

◆ exportEvaluation()

ilTestEvaluationGUI::exportEvaluation ( )

Exports the evaluation data to a selected file format.

Definition at line 731 of file class.ilTestEvaluationGUI.php.

732 {
733 $filterby = "";
734 if (array_key_exists("g_filterby", $_GET)) {
735 $filterby = $_GET["g_filterby"];
736 }
737
738 $filtertext = "";
739 if (array_key_exists("g_userfilter", $_GET)) {
740 $filtertext = $_GET["g_userfilter"];
741 }
742
743 $passedonly = false;
744 if (array_key_exists("g_passedonly", $_GET)) {
745 if ($_GET["g_passedonly"] == 1) {
746 $passedonly = true;
747 }
748 }
749
750 require_once 'Modules/Test/classes/class.ilTestExportFactory.php';
751 $expFactory = new ilTestExportFactory($this->object);
752
753 switch ($_POST["export_type"]) {
754 case "excel":
755 $expFactory->getExporter('results')->exportToExcel(
756 $deliver = true,
757 $filterby,
758 $filtertext,
759 $passedonly
760 );
761 break;
762
763 case "csv":
764 $expFactory->getExporter('results')->exportToCSV(
765 $deliver = true,
766 $filterby,
767 $filtertext,
768 $passedonly
769 );
770 break;
771
772 case "certificate":
773 if ($passedonly) {
774 $this->ctrl->setParameterByClass("iltestcertificategui", "g_passedonly", "1");
775 }
776 if (strlen($filtertext)) {
777 $this->ctrl->setParameterByClass("iltestcertificategui", "g_userfilter", $filtertext);
778 }
779 $this->ctrl->redirect($this, "exportCertificate");
780 break;
781 }
782 }

References $_GET, and $_POST.

◆ exportFileUploadsForAllParticipants()

ilTestEvaluationGUI::exportFileUploadsForAllParticipants ( )

Creates a ZIP file containing all file uploads for a given question in a test.

Definition at line 566 of file class.ilTestEvaluationGUI.php.

567 {
568 require_once './Modules/TestQuestionPool/classes/class.assQuestion.php';
569 $question_object = assQuestion::_instanciateQuestion($_GET["qid"]);
570 if ($question_object instanceof ilObjFileHandlingQuestionType) {
571 $question_object->deliverFileUploadZIPFile(
572 $this->ref_id,
573 $this->object->getTestId(),
574 $this->object->getTitle()
575 );
576 } else {
577 $this->ctrl->redirect($this, "singleResults");
578 }
579 }
static _instanciateQuestion($question_id)
Creates an instance of a question with a given question id.
Interface ilObjFileHandlingQuestionType.

References $_GET, and assQuestion\_instanciateQuestion().

+ Here is the call graph for this function:

◆ exportQuestionForAllParticipants()

ilTestEvaluationGUI::exportQuestionForAllParticipants ( )

Creates a PDF representation of the answers for a given question in a test.

Definition at line 557 of file class.ilTestEvaluationGUI.php.

558 {
559 $this->getQuestionResultForTestUsers($_GET["qid"], $this->object->getTestId());
560 }
getQuestionResultForTestUsers($question_id, $test_id)
Creates a HTML representation for the results of a given question in a test.

References $_GET, and ilTestServiceGUI\getQuestionResultForTestUsers().

+ Here is the call graph for this function:

◆ filterEvaluation()

ilTestEvaluationGUI::filterEvaluation ( )
Deprecated:
command is not used any longer

Definition at line 152 of file class.ilTestEvaluationGUI.php.

153 {
154 if (!$this->getTestAccess()->checkStatisticsAccess()) {
156 }
157
158 include_once "./Modules/Test/classes/tables/class.ilEvaluationAllTableGUI.php";
159 $table_gui = new ilEvaluationAllTableGUI($this, 'outEvaluation');
160 $table_gui->writeFilterToSession();
161 $this->ctrl->redirect($this, "outEvaluation");
162 }
TableGUI class for evaluation of all users.

References ilObjTestGUI\accessViolationRedirect(), and getTestAccess().

+ Here is the call graph for this function:

◆ finishAllUserPasses()

ilTestEvaluationGUI::finishAllUserPasses ( )

give error if the processing time of at least user is not yet over

See also
https://mantis.ilias.de/view.php?id=30357

Definition at line 2198 of file class.ilTestEvaluationGUI.php.

2199 {
2204 if ($this->object->isEndingTimeEnabled() || $this->object->getEnableProcessingTime()) {
2205 if ($this->object->endingTimeReached() == false) {
2207 $participantList = new ilTestParticipantList($this->object);
2208 $participantList->initializeFromDbRows($this->object->getTestParticipants());
2209 $participantList = $participantList->getAccessFilteredList($accessFilter);
2210
2211 foreach ($participantList as $participant) {
2212 if (!$participant->hasUnfinishedPasses()) {
2213 continue;
2214 }
2215 $starting_time = $this->object->getStartingTimeOfUser($participant->getActiveId());
2216 if ($this->object->isMaxProcessingTimeReached($starting_time, $participant->getActiveId()) == false) {
2217 ilUtil::sendFailure($this->lng->txt("finish_pass_for_all_users_in_processing_time"), true);
2219 }
2220 }
2221 }
2222 }
2223
2224 require_once 'Services/Utilities/classes/class.ilConfirmationGUI.php';
2225 $cgui = new ilConfirmationGUI();
2226 $cgui->setFormAction($this->ctrl->getFormAction($this));
2227 $cgui->setHeaderText($this->lng->txt("finish_pass_for_all_users"));
2228 $cgui->setCancel($this->lng->txt("cancel"), "redirectBackToParticipantsScreen");
2229 $cgui->setConfirm($this->lng->txt("proceed"), "confirmFinishTestPassForAllUser");
2230 $this->tpl->setContent($cgui->getHTML());
2231 }
Confirmation screen class.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.

References ilTestParticipantAccessFilter\getManageParticipantsUserFilter(), redirectBackToParticipantsScreen(), and ilUtil\sendFailure().

+ Here is the call graph for this function:

◆ finishTestPass()

ilTestEvaluationGUI::finishTestPass (   $active_id,
  $obj_id 
)
protected

Definition at line 2265 of file class.ilTestEvaluationGUI.php.

2266 {
2267 $processLocker = $this->processLockerFactory->withContextId((int) $active_id)->getLocker();
2268
2269 $test_pass_finisher = new ilTestPassFinishTasks($active_id, $obj_id);
2270 $test_pass_finisher->performFinishTasks($processLocker);
2271 }
Class ilTestPassFinishTasks.

Referenced by confirmFinishTestPassForAllUser(), and confirmFinishTestPassForUser().

+ Here is the caller graph for this function:

◆ finishTestPassForSingleUser()

ilTestEvaluationGUI::finishTestPassForSingleUser ( )

warn if the processing time of the user is not yet over

See also
https://mantis.ilias.de/view.php?id=30357

Definition at line 2115 of file class.ilTestEvaluationGUI.php.

2116 {
2117 global $DIC; /* @var ILIAS\DI\Container $DIC */
2118
2119 $activeId = (int) $_GET["active_id"];
2120
2121 require_once 'Modules/Test/classes/class.ilTestParticipantAccessFilter.php';
2123
2124 require_once 'Modules/Test/classes/class.ilTestParticipantList.php';
2125 $participantData = new ilTestParticipantData($DIC->database(), $DIC->language());
2126 $participantData->setActiveIdsFilter(array($activeId));
2127 $participantData->setParticipantAccessFilter($accessFilter);
2128 $participantData->load($this->object->getTestId());
2129
2130 if (!in_array($activeId, $participantData->getActiveIds())) {
2132 }
2133
2138 if ($this->object->isEndingTimeEnabled() || $this->object->getEnableProcessingTime()) {
2139 if ($this->object->endingTimeReached() == false) {
2140 $starting_time = $this->object->getStartingTimeOfUser($activeId);
2141 if ($this->object->isMaxProcessingTimeReached($starting_time, $activeId) == false) {
2142 ilUtil::sendInfo($this->lng->txt("finish_pass_for_user_in_processing_time"));
2143 }
2144 }
2145 }
2146
2147 require_once 'Services/Utilities/classes/class.ilConfirmationGUI.php';
2148 $cgui = new ilConfirmationGUI();
2149
2150 $cgui->setHeaderText(sprintf(
2151 $this->lng->txt("finish_pass_for_user_confirmation"),
2152 $participantData->getFormatedFullnameByActiveId($activeId)
2153 ));
2154
2155 $this->ctrl->setParameter($this, 'active_id', $activeId);
2156 $cgui->setFormAction($this->ctrl->getFormAction($this, "participants"));
2157
2158 $cgui->setCancel($this->lng->txt("cancel"), "redirectBackToParticipantsScreen");
2159 $cgui->setConfirm($this->lng->txt("proceed"), "confirmFinishTestPassForUser");
2160
2161 $this->tpl->setContent($cgui->getHTML());
2162 }

References $_GET, $DIC, ilTestServiceGUI\$participantData, ilTestParticipantAccessFilter\getManageParticipantsUserFilter(), redirectBackToParticipantsScreen(), and ilUtil\sendInfo().

+ Here is the call graph for this function:

◆ getEvaluationQuestionId()

ilTestEvaluationGUI::getEvaluationQuestionId (   $question_id,
  $original_id = "" 
)

Returns the ID of a question for evaluation purposes.

If a question id and the id of the original question are given, this function returns the original id, otherwise the question id

Returns
int question or original id

Definition at line 873 of file class.ilTestEvaluationGUI.php.

874 {
875 if ($original_id > 0) {
876 return $original_id;
877 } else {
878 return $question_id;
879 }
880 }

◆ getFilteredTestResult()

ilTestEvaluationGUI::getFilteredTestResult (   $active_id,
  $pass,
  $considerHiddenQuestions,
  $considerOptionalQuestions 
)
protected

Reimplemented from ilTestServiceGUI.

Definition at line 2057 of file class.ilTestEvaluationGUI.php.

2058 {
2059 global $DIC;
2060 $ilDB = $DIC['ilDB'];
2061 $ilPluginAdmin = $DIC['ilPluginAdmin'];
2062
2063 $resultData = $this->object->getTestResult($active_id, $pass, false, $considerHiddenQuestions);
2064 $questionIds = array();
2065 foreach ($resultData as $resultItemKey => $resultItemValue) {
2066 if ($resultItemKey === 'test' || $resultItemKey === 'pass') {
2067 continue;
2068 }
2069
2070 $questionIds[] = $resultItemValue['qid'];
2071 }
2072
2073 $table_gui = $this->buildPassDetailsOverviewTableGUI($this, 'outUserPassDetails');
2074 $table_gui->initFilter();
2075
2076 require_once 'Modules/TestQuestionPool/classes/class.ilAssQuestionList.php';
2077 $questionList = new ilAssQuestionList($ilDB, $this->lng, $this->refinery, $ilPluginAdmin);
2078 $questionList->setIncludeQuestionIdsFilter($questionIds);
2079 $questionList->setQuestionInstanceTypeFilter(null);
2080
2081 foreach ($table_gui->getFilterItems() as $item) {
2082 if (substr($item->getPostVar(), 0, strlen('tax_')) == 'tax_') {
2083 $v = $item->getValue();
2084
2085 if (is_array($v) && count($v) && !(int) $v[0]) {
2086 continue;
2087 }
2088
2089 $taxId = substr($item->getPostVar(), strlen('tax_'));
2090 $questionList->addTaxonomyFilter($taxId, $item->getValue(), $this->object->getId(), 'tst');
2091 } elseif ($item->getValue() !== false) {
2092 $questionList->addFieldFilter($item->getPostVar(), $item->getValue());
2093 }
2094 }
2095
2096 $questionList->load();
2097
2098 $filteredTestResult = array();
2099
2100 foreach ($resultData as $resultItemKey => $resultItemValue) {
2101 if ($resultItemKey === 'test' || $resultItemKey === 'pass') {
2102 continue;
2103 }
2104
2105 if (!$questionList->isInList($resultItemValue['qid'])) {
2106 continue;
2107 }
2108
2109 $filteredTestResult[] = $resultItemValue;
2110 }
2111
2112 return $filteredTestResult;
2113 }
buildPassDetailsOverviewTableGUI($targetGUI, $targetCMD)
global $ilDB

References $DIC, $ilDB, $pass, and ilTestServiceGUI\buildPassDetailsOverviewTableGUI().

Referenced by outParticipantsPassDetails(), and outUserPassDetails().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getHeaderNames()

& ilTestEvaluationGUI::getHeaderNames ( )

Definition at line 103 of file class.ilTestEvaluationGUI.php.

104 {
105 $headernames = array();
106 if ($this->object->getAnonymity()) {
107 array_push($headernames, $this->lng->txt("counter"));
108 } else {
109 array_push($headernames, $this->lng->txt("name"));
110 array_push($headernames, $this->lng->txt("login"));
111 }
112 $additionalFields = $this->object->getEvaluationAdditionalFields();
113 if (count($additionalFields)) {
114 foreach ($additionalFields as $fieldname) {
115 array_push($headernames, $this->lng->txt($fieldname));
116 }
117 }
118 array_push($headernames, $this->lng->txt("tst_reached_points"));
119 array_push($headernames, $this->lng->txt("tst_mark"));
120 if ($this->object->getECTSOutput()) {
121 array_push($headernames, $this->lng->txt("ects_grade"));
122 }
123 array_push($headernames, $this->lng->txt("tst_answered_questions"));
124 array_push($headernames, $this->lng->txt("working_time"));
125 array_push($headernames, $this->lng->txt("detailed_evaluation"));
126 return $headernames;
127 }

◆ getHeaderVars()

& ilTestEvaluationGUI::getHeaderVars ( )

Definition at line 129 of file class.ilTestEvaluationGUI.php.

130 {
131 $headervars = array();
132 if ($this->object->getAnonymity()) {
133 array_push($headervars, "counter");
134 } else {
135 array_push($headervars, "name");
136 array_push($headervars, "login");
137 }
138 array_push($headervars, "resultspoints");
139 array_push($headervars, "resultsmarks");
140 if ($this->object->getECTSOutput()) {
141 array_push($headervars, "ects_grade");
142 }
143 array_push($headervars, "qworkedthrough");
144 array_push($headervars, "timeofwork");
145 array_push($headervars, "");
146 return $headervars;
147 }

◆ getTestAccess()

ilTestEvaluationGUI::getTestAccess ( )

◆ outCertificate()

ilTestEvaluationGUI::outCertificate ( )

Output of a test certificate.

Definition at line 1724 of file class.ilTestEvaluationGUI.php.

1725 {
1726 global $DIC;
1727
1728 $user = $DIC->user();
1729 $database = $DIC->database();
1730 $logger = $DIC->logger()->root();
1731
1732 $ilUserCertificateRepository = new ilUserCertificateRepository($database, $logger);
1733 $pdfGenerator = new ilPdfGenerator($ilUserCertificateRepository, $logger);
1734
1735 $pdfAction = new ilCertificatePdfAction(
1736 $logger,
1737 $pdfGenerator,
1739 $this->lng->txt('error_creating_certificate_pdf')
1740 );
1741
1742 $pdfAction->downloadPdf((int) $user->getId(), (int) $this->object->getId());
1743 }

References $DIC.

◆ outEvaluation()

ilTestEvaluationGUI::outEvaluation ( )

Creates the evaluation output for the test.

@access public

Definition at line 184 of file class.ilTestEvaluationGUI.php.

185 {
186 global $DIC; /* @var ILIAS\DI\Container $DIC */
187 $ilToolbar = $DIC->toolbar();
188
189 if (!$this->getTestAccess()->checkStatisticsAccess()) {
191 }
192
193 $DIC->tabs()->activateTab(ilTestTabsManager::TAB_ID_STATISTICS);
194
195 include_once "./Modules/Test/classes/tables/class.ilEvaluationAllTableGUI.php";
196
197 $table_gui = new ilEvaluationAllTableGUI(
198 $this,
199 'outEvaluation',
200 $this->object->getAnonymity(),
201 $this->object->isOfferingQuestionHintsEnabled()
202 );
203
204 $data = array();
205 $arrFilter = array();
206
207 foreach ($table_gui->getFilterItems() as $item) {
208 if ($item->getValue() !== false) {
209 switch ($item->getPostVar()) {
210 case 'group':
211 case 'name':
212 case 'course':
213 $arrFilter[$item->getPostVar()] = $item->getValue();
214 break;
215 case 'passed_only':
216 $passedonly = $item->getChecked();
217 break;
218 }
219 }
220 }
221 include_once "./Modules/Test/classes/class.ilTestEvaluationData.php";
222 $eval = new ilTestEvaluationData($this->object);
223 $eval->setFilterArray($arrFilter);
224 $foundParticipants = $eval->getParticipants();
225
226 require_once 'Modules/Test/classes/class.ilTestParticipantData.php';
227 require_once 'Modules/Test/classes/class.ilTestParticipantAccessFilter.php';
228
229 $participantData = new ilTestParticipantData($DIC->database(), $DIC->language());
230 $participantData->setActiveIdsFilter($eval->getParticipantIds());
231
232 $participantData->setParticipantAccessFilter(
234 );
235
236 $participantData->load($this->object->getTestId());
237
238 $counter = 1;
239 if (count($participantData->getActiveIds()) > 0) {
240 if ($this->object->getECTSOutput()) {
241 $passed_array = &$this->object->getTotalPointsPassedArray();
242 }
243 foreach ($participantData->getActiveIds() as $active_id) {
244 if (!isset($foundParticipants[$active_id]) || !($foundParticipants[$active_id] instanceof ilTestEvaluationUserData)) {
245 continue;
246 }
247
248 /* @var $userdata ilTestEvaluationUserData */
249 $userdata = $foundParticipants[$active_id];
250
251 $remove = false;
252 if ($passedonly) {
253 $mark_obj = $this->object->getMarkSchema()->getMatchingMark($userdata->getReachedPointsInPercent());
254
255 if ($mark_obj->getPassed() == false || !$userdata->areObligationsAnswered()) {
256 $remove = true;
257 }
258 }
259 if (!$remove) {
260 // build the evaluation row
261 $evaluationrow = array();
262 if ($this->object->getAnonymity()) {
263 $evaluationrow['name'] = $counter;
264 $evaluationrow['login'] = '';
265 } else {
266 $evaluationrow['name'] = $userdata->getName();
267 if (strlen($userdata->getLogin())) {
268 $evaluationrow['login'] = "[" . $userdata->getLogin() . "]";
269 } else {
270 $evaluationrow['login'] = '';
271 }
272 }
273
274 $evaluationrow['reached'] = $userdata->getReached();
275 $evaluationrow['max'] = $userdata->getMaxpoints();
276 $evaluationrow['hint_count'] = $userdata->getRequestedHintsCountFromScoredPass();
277 $evaluationrow['exam_id'] = $userdata->getExamIdFromScoredPass();
278 $percentage = $userdata->getReachedPointsInPercent();
279 $mark = $this->object->getMarkSchema()->getMatchingMark($percentage);
280 if (is_object($mark)) {
281 $evaluationrow['mark'] = $mark->getShortName();
282 }
283 if ($this->object->getECTSOutput()) {
284 $ects_mark = $this->object->getECTSGrade($passed_array, $userdata->getReached(), $userdata->getMaxPoints());
285 $evaluationrow['ects_grade'] = $ects_mark;
286 }
287 $evaluationrow['answered'] = $userdata->getQuestionsWorkedThroughInPercent();
288 $evaluationrow['questions_worked_through'] = $userdata->getQuestionsWorkedThrough();
289 $evaluationrow['number_of_questions'] = $userdata->getNumberOfQuestions();
290 $time_seconds = $userdata->getTimeOfWork();
291 $time_hours = floor($time_seconds / 3600);
292 $time_seconds -= $time_hours * 3600;
293 $time_minutes = floor($time_seconds / 60);
294 $time_seconds -= $time_minutes * 60;
295 $evaluationrow['working_time'] = sprintf("%02d:%02d:%02d", $time_hours, $time_minutes, $time_seconds);
296 $this->ctrl->setParameter($this, "active_id", $active_id);
297 $href = $this->ctrl->getLinkTarget($this, "detailedEvaluation");
298 $detailed_evaluation = $this->lng->txt("detailed_evaluation_show");
299 $evaluationrow['details'] = "<a class=\"il_ContainerItemCommand\" href=\"$href\">$detailed_evaluation</a>";
300 $userfields = ilObjUser::_lookupFields($userdata->getUserID());
301 $evaluationrow['gender'] = $userfields['gender'];
302 $evaluationrow['email'] = $userfields['email'];
303 $evaluationrow['institution'] = $userfields['institution'];
304 $evaluationrow['street'] = $userfields['street'];
305 $evaluationrow['city'] = $userfields['city'];
306 $evaluationrow['zipcode'] = $userfields['zipcode'];
307 $evaluationrow['country'] = $userfields['country'];
308 $evaluationrow['sel_country'] = $userfields['sel_country'];
309 $evaluationrow['department'] = $userfields['department'];
310 $evaluationrow['matriculation'] = $userfields['matriculation'];
311 $counter++;
312 $data[] = $evaluationrow;
313 }
314 }
315 }
316
317 $table_gui->setData($data);
318 if (count($participantData->getActiveIds()) > 0) {
319 $ilToolbar->setFormName('form_output_eval');
320 $ilToolbar->setFormAction($this->ctrl->getFormAction($this, 'exportEvaluation'));
321 require_once 'Services/Form/classes/class.ilSelectInputGUI.php';
322 $export_type = new ilSelectInputGUI($this->lng->txt('exp_eval_data'), 'export_type');
323 $options = array(
324 'excel' => $this->lng->txt('exp_type_excel'),
325 'csv' => $this->lng->txt('exp_type_spss')
326 );
327
328 if (!$this->object->getAnonymity()) {
329 try {
330 $globalCertificatePrerequisites = new ilCertificateActiveValidator();
331 if ($globalCertificatePrerequisites->validate()) {
332 $options['certificate'] = $this->lng->txt('exp_type_certificate');
333 }
334 } catch (ilException $e) {
335 }
336 }
337
338 $export_type->setOptions($options);
339
340 $ilToolbar->addInputItem($export_type, true);
341 require_once 'Services/UIComponent/Button/classes/class.ilSubmitButton.php';
342 $button = ilSubmitButton::getInstance();
343 $button->setCommand('exportEvaluation');
344 $button->setCaption('export');
345 $button->getOmitPreventDoubleSubmission();
346 $ilToolbar->addButtonInstance($button);
347 }
348
349 $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print.css", "Modules/Test"), "print");
350 if ($this->object->getShowSolutionAnswersOnly()) {
351 $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print_hide_content.css", "Modules/Test"), "print");
352 }
353
354 $this->tpl->setContent($table_gui->getHTML());
355 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _lookupFields($a_user_id)
lookup fields (deprecated; use more specific methods instead)

References $data, $DIC, Vendor\Package\$e, ilTestServiceGUI\$participantData, ilObjUser\_lookupFields(), ilObjTestGUI\accessViolationRedirect(), ilTestParticipantAccessFilter\getAccessStatisticsUserFilter(), ilSubmitButton\getInstance(), ilUtil\getStyleSheetLocation(), getTestAccess(), and ilTestTabsManager\TAB_ID_STATISTICS.

+ Here is the call graph for this function:

◆ outParticipantsPassDetails()

ilTestEvaluationGUI::outParticipantsPassDetails ( )

Output of the pass details of an existing test pass for the test statistics.

Output of the pass details of an existing test pass for the test statistics

@access public

Definition at line 889 of file class.ilTestEvaluationGUI.php.

890 {
891 global $DIC;
892 $ilTabs = $DIC['ilTabs'];
893 $ilAccess = $DIC['ilAccess'];
894 $ilObjDataCache = $DIC['ilObjDataCache'];
895
896 $active_id = (int) $_GET["active_id"];
897
898 if (!$this->getTestAccess()->checkResultsAccessForActiveId($active_id)) {
900 }
901
902 $this->ctrl->saveParameter($this, "active_id");
903 $testSession = $this->testSessionFactory->getSession($active_id);
904
905 // protect actives from other tests
906 if ($testSession->getTestId() != $this->object->getTestId()) {
908 }
909
910 $this->ctrl->saveParameter($this, "pass");
911 $pass = (int) $_GET["pass"];
912
913 if (isset($_GET['statistics']) && $_GET['statistics'] == 1) {
914 $this->ctrl->setParameterByClass("ilTestEvaluationGUI", "active_id", $active_id);
915 $this->ctrl->saveParameter($this, 'statistics');
916
917 $ilTabs->setBackTarget(
918 $this->lng->txt('back'),
919 $this->ctrl->getLinkTargetByClass('ilTestEvaluationGUI', 'detailedEvaluation')
920 );
921 } elseif ($this->object->getNrOfTries() == 1) {
922 $ilTabs->setBackTarget(
923 $this->lng->txt('back'),
924 $this->ctrl->getLinkTargetByClass('ilParticipantsTestResultsGUI')
925 );
926 } else {
927 $ilTabs->setBackTarget(
928 $this->lng->txt('tst_results_back_overview'),
929 $this->ctrl->getLinkTarget($this, 'outParticipantsResultsOverview')
930 );
931 }
932
933 // prepare generation before contents are processed (for mathjax)
934 if ($this->isPdfDeliveryRequest()) {
936 }
937
938 require_once 'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
939 $testResultHeaderLabelBuilder = new ilTestResultHeaderLabelBuilder($this->lng, $ilObjDataCache);
940
941 $objectivesList = null;
942
943 if ($this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired()) {
944 $testSequence = $this->testSequenceFactory->getSequenceByActiveIdAndPass($active_id, $pass);
945 $testSequence->loadFromDb();
946 $testSequence->loadQuestions();
947
948 require_once 'Modules/Course/classes/Objectives/class.ilLOTestQuestionAdapter.php';
949 $objectivesAdapter = ilLOTestQuestionAdapter::getInstance($testSession);
950
951 $objectivesList = $this->buildQuestionRelatedObjectivesList($objectivesAdapter, $testSequence);
952 $objectivesList->loadObjectivesTitles();
953
954 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
955 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
956 $testResultHeaderLabelBuilder->setTestObjId($this->object->getId());
957 $testResultHeaderLabelBuilder->setTestRefId($this->object->getRefId());
958 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
959 }
960
961 $result_array = $this->getFilteredTestResult($active_id, $pass, false, !$this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired());
962
963 $overviewTableGUI = $this->getPassDetailsOverviewTableGUI($result_array, $active_id, $pass, $this, "outParticipantsPassDetails", '', true, $objectivesList);
964 $overviewTableGUI->setTitle($testResultHeaderLabelBuilder->getPassDetailsHeaderLabel($pass + 1));
965 $user_data = $this->getAdditionalUsrDataHtmlAndPopulateWindowTitle($testSession, $active_id, false);
966 $user_id = $this->object->_getUserIdFromActiveId($active_id);
967
968 $template = new ilTemplate("tpl.il_as_tst_pass_details_overview_participants.html", true, true, "Modules/Test");
969
970 $toolbar = $this->buildUserTestResultsToolbarGUI();
971
972 $this->ctrl->setParameter($this, 'pdf', '1');
973 $toolbar->setPdfExportLinkTarget($this->ctrl->getLinkTarget($this, 'outParticipantsPassDetails'));
974 $this->ctrl->setParameter($this, 'pdf', '');
975
976 if (isset($_GET['show_best_solutions'])) {
977 $_SESSION['tst_results_show_best_solutions'] = true;
978 } elseif (isset($_GET['hide_best_solutions'])) {
979 $_SESSION['tst_results_show_best_solutions'] = false;
980 } elseif (!isset($_SESSION['tst_results_show_best_solutions'])) {
981 $_SESSION['tst_results_show_best_solutions'] = false;
982 }
983
984 if ($_SESSION['tst_results_show_best_solutions']) {
985 $this->ctrl->setParameter($this, 'hide_best_solutions', '1');
986 $toolbar->setHideBestSolutionsLinkTarget($this->ctrl->getLinkTarget($this, 'outParticipantsPassDetails'));
987 $this->ctrl->setParameter($this, 'hide_best_solutions', '');
988 } else {
989 $this->ctrl->setParameter($this, 'show_best_solutions', '1');
990 $toolbar->setShowBestSolutionsLinkTarget($this->ctrl->getLinkTarget($this, 'outParticipantsPassDetails'));
991 $this->ctrl->setParameter($this, 'show_best_solutions', '');
992 }
993
994 $toolbar->build();
995 $template->setVariable('RESULTS_TOOLBAR', $this->ctrl->getHTML($toolbar));
996
997 if ($this->isGradingMessageRequired() && $this->object->getNrOfTries() == 1) {
998 $gradingMessageBuilder = $this->getGradingMessageBuilder($active_id);
999 $gradingMessageBuilder->buildList();
1000
1001 $template->setCurrentBlock('grading_message');
1002 $template->setVariable('GRADING_MESSAGE', $gradingMessageBuilder->getList());
1003 $template->parseCurrentBlock();
1004 }
1005
1006 $list_of_answers = $this->getPassListOfAnswers($result_array, $active_id, $pass, $_SESSION['tst_results_show_best_solutions'], false, false, false, true, $objectivesList, $testResultHeaderLabelBuilder);
1007 $template->setVariable("LIST_OF_ANSWERS", $list_of_answers);
1008 $template->setVariable("PASS_DETAILS", $this->ctrl->getHTML($overviewTableGUI));
1009
1010 $data = &$this->object->getCompleteEvaluationData();
1011 $data->getParticipant($active_id)->setPassScoring($pass);
1012 $result = $data->getParticipant($active_id)->getReached() . " " . strtolower($this->lng->txt("of")) . " " . $data->getParticipant($active_id)->getMaxpoints() . " (" . sprintf("%2.2f", $data->getParticipant($active_id)->getReachedPointsInPercent()) . " %" . ")";
1013 $template->setCurrentBlock('total_score');
1014 $template->setVariable("TOTAL_RESULT_TEXT", $this->lng->txt('tst_stat_result_resultspoints'));
1015 $template->setVariable("TOTAL_RESULT", $result);
1016 $template->parseCurrentBlock();
1017
1018 if (!$this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired()) {
1019 $template->setVariable("USER_DATA", $user_data);
1020
1021 $uname = $this->object->userLookupFullName($user_id);
1022 $template->setVariable("TEXT_HEADING", sprintf($this->lng->txt("tst_result_user_name_pass"), $pass + 1, $uname));
1023
1024 $template->setVariable("TEXT_RESULTS", $testResultHeaderLabelBuilder->getPassDetailsHeaderLabel($pass + 1));
1025 }
1026
1027 $template->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
1028
1029 $this->populateExamId($template, (int) $active_id, (int) $pass);
1031
1032 $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print.css", "Modules/Test"), "print");
1033 if ($this->object->getShowSolutionAnswersOnly()) {
1034 $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print_hide_content.css", "Modules/Test"), "print");
1035 }
1036
1037 if ($this->isPdfDeliveryRequest()) {
1038 //$this->object->deliverPDFfromHTML($template->get());
1039 ilTestPDFGenerator::generatePDF($template->get(), ilTestPDFGenerator::PDF_OUTPUT_DOWNLOAD, $this->object->getTitleFilenameCompliant(), PDF_USER_RESULT);
1040 } else {
1041 $this->tpl->setVariable("ADM_CONTENT", $template->get());
1042 }
1043 }
$result
$_SESSION["AccountId"]
static getInstance(ilTestSession $a_test_session)
static lookupLastTestPassAccess($activeId, $passIndex)
static prepareGenerationRequest($service, $purpose)
Prepare the content processing for a PDF generation request This function should be called as in a re...
special template class to simplify handling of ITX/PEAR
getFilteredTestResult($active_id, $pass, $considerHiddenQuestions, $considerOptionalQuestions)
static generatePDF($pdf_output, $output_mode, $filename=null, $purpose=null)
populateExamId(ilTemplate $tpl, int $activeId, int $pass)
populatePassFinishDate($tpl, $passFinishDate)
buildQuestionRelatedObjectivesList(ilLOTestQuestionAdapter $objectivesAdapter, ilTestQuestionSequence $testSequence)
getPassListOfAnswers(&$result_array, $active_id, $pass, $show_solutions=false, $only_answered_questions=false, $show_question_only=false, $show_reached_points=false, $anchorNav=false, ilTestQuestionRelatedObjectivesList $objectivesList=null, ilTestResultHeaderLabelBuilder $testResultHeaderLabelBuilder=null)
Returns the list of answers of a users test pass.
getAdditionalUsrDataHtmlAndPopulateWindowTitle($testSession, $active_id, $overwrite_anonymity=false)
Returns the user data for a test results output.
getPassDetailsOverviewTableGUI($result_array, $active_id, $pass, $targetGUI, $targetCMD, $questionDetailsCMD, $questionAnchorNav, ilTestQuestionRelatedObjectivesList $objectivesList=null, $multipleObjectivesInvolved=true)
const PDF_USER_RESULT
PDF Purposes.

References $_GET, $_SESSION, $data, $DIC, $pass, $result, ilObjTestGUI\accessViolationRedirect(), ilTestServiceGUI\buildQuestionRelatedObjectivesList(), ilTestServiceGUI\buildUserTestResultsToolbarGUI(), ilTestPDFGenerator\generatePDF(), ilTestServiceGUI\getAdditionalUsrDataHtmlAndPopulateWindowTitle(), getFilteredTestResult(), ilTestServiceGUI\getGradingMessageBuilder(), ilLOTestQuestionAdapter\getInstance(), ilTestServiceGUI\getObjectiveOrientedContainer(), ilTestServiceGUI\getPassDetailsOverviewTableGUI(), ilTestServiceGUI\getPassListOfAnswers(), ilUtil\getStyleSheetLocation(), getTestAccess(), ilTestServiceGUI\isGradingMessageRequired(), ilTestServiceGUI\isPdfDeliveryRequest(), ilObjTest\lookupLastTestPassAccess(), ilTestPDFGenerator\PDF_OUTPUT_DOWNLOAD, PDF_USER_RESULT, ilTestServiceGUI\populateExamId(), ilTestServiceGUI\populatePassFinishDate(), and ilPDFGeneratorUtils\prepareGenerationRequest().

Referenced by outParticipantsPassDetailsResetTableFilter(), and outParticipantsPassDetailsSetTableFilter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ outParticipantsPassDetailsResetTableFilter()

ilTestEvaluationGUI::outParticipantsPassDetailsResetTableFilter ( )

Definition at line 1191 of file class.ilTestEvaluationGUI.php.

1192 {
1193 $tableGUI = $this->buildPassDetailsOverviewTableGUI($this, 'outParticipantsPassDetails');
1194 $tableGUI->initFilter();
1195 $tableGUI->resetOffset();
1196 $tableGUI->resetFilter();
1198 }
outParticipantsPassDetails()
Output of the pass details of an existing test pass for the test statistics.

References ilTestServiceGUI\buildPassDetailsOverviewTableGUI(), and outParticipantsPassDetails().

+ Here is the call graph for this function:

◆ outParticipantsPassDetailsSetTableFilter()

ilTestEvaluationGUI::outParticipantsPassDetailsSetTableFilter ( )

Definition at line 1182 of file class.ilTestEvaluationGUI.php.

1183 {
1184 $tableGUI = $this->buildPassDetailsOverviewTableGUI($this, 'outParticipantsPassDetails');
1185 $tableGUI->initFilter();
1186 $tableGUI->resetOffset();
1187 $tableGUI->writeFilterToSession();
1189 }

References ilTestServiceGUI\buildPassDetailsOverviewTableGUI(), and outParticipantsPassDetails().

+ Here is the call graph for this function:

◆ outParticipantsResultsOverview()

ilTestEvaluationGUI::outParticipantsResultsOverview ( )

Output of the pass overview for a test called from the statistics.

@access public

Definition at line 1050 of file class.ilTestEvaluationGUI.php.

1051 {
1052 global $DIC;
1053 $ilTabs = $DIC['ilTabs'];
1054 $ilObjDataCache = $DIC['ilObjDataCache'];
1055
1056 $active_id = (int) $_GET["active_id"];
1057
1058 if (!$this->getTestAccess()->checkResultsAccessForActiveId($active_id)) {
1060 }
1061
1062 $testSession = $this->testSessionFactory->getSession($active_id);
1063
1064 // protect actives from other tests
1065 if ($testSession->getTestId() != $this->object->getTestId()) {
1067 }
1068
1069 if ($this->object->getNrOfTries() == 1) {
1070 $this->ctrl->setParameter($this, "active_id", $active_id);
1071 $this->ctrl->setParameter($this, "pass", ilObjTest::_getResultPass($active_id));
1072 $this->ctrl->redirect($this, "outParticipantsPassDetails");
1073 }
1074
1075 $ilTabs->setBackTarget(
1076 $this->lng->txt('back'),
1077 $this->ctrl->getLinkTargetByClass(['ilObjTestGUI', 'ilTestResultsGUI', 'ilParticipantsTestResultsGUI'])
1078 );
1079
1080 // prepare generation before contents are processed (for mathjax)
1081 if ($this->isPdfDeliveryRequest()) {
1083 }
1084
1085 $template = new ilTemplate("tpl.il_as_tst_pass_overview_participants.html", true, true, "Modules/Test");
1086
1087 $toolbar = $this->buildUserTestResultsToolbarGUI();
1088
1089 $this->ctrl->setParameter($this, 'pdf', '1');
1090 $toolbar->setPdfExportLinkTarget($this->ctrl->getLinkTarget($this, __FUNCTION__));
1091 $this->ctrl->setParameter($this, 'pdf', '');
1092
1093 $toolbar->build();
1094 $template->setVariable('RESULTS_TOOLBAR', $this->ctrl->getHTML($toolbar));
1095
1096 require_once 'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
1097 $testResultHeaderLabelBuilder = new ilTestResultHeaderLabelBuilder($this->lng, $ilObjDataCache);
1098 if ($this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired()) {
1099 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
1100 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
1101 $testResultHeaderLabelBuilder->setTestObjId($this->object->getId());
1102 $testResultHeaderLabelBuilder->setTestRefId($this->object->getRefId());
1103 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
1104 }
1105
1106 global $DIC; /* @var ILIAS\DI\Container $DIC */
1107 require_once 'Modules/Test/classes/class.ilTestPassesSelector.php';
1108 $testPassesSelector = new ilTestPassesSelector($DIC['ilDB'], $this->object);
1109 $testPassesSelector->setActiveId($testSession->getActiveId());
1110 $testPassesSelector->setLastFinishedPass($testSession->getLastFinishedPass());
1111
1112 $passOverViewTableGUI = $this->buildPassOverviewTableGUI($this);
1113 $passOverViewTableGUI->setActiveId($testSession->getActiveId());
1114 $passOverViewTableGUI->setResultPresentationEnabled(true);
1115 $passOverViewTableGUI->setPassDetailsCommand('outParticipantsPassDetails');
1116 $passOverViewTableGUI->init();
1117 $passOverViewTableGUI->setData($this->getPassOverviewTableData($testSession, $testPassesSelector->getExistingPasses(), true, true));
1118 $passOverViewTableGUI->setTitle($testResultHeaderLabelBuilder->getPassOverviewHeaderLabel());
1119 $template->setVariable("PASS_OVERVIEW", $passOverViewTableGUI->getHTML());
1120
1121 if ($this->isGradingMessageRequired()) {
1122 $gradingMessageBuilder = $this->getGradingMessageBuilder($active_id);
1123 $gradingMessageBuilder->buildList();
1124
1125 $template->setCurrentBlock('grading_message');
1126 $template->setVariable('GRADING_MESSAGE', $gradingMessageBuilder->getList());
1127 $template->parseCurrentBlock();
1128 }
1129
1130 $user_data = $this->getAdditionalUsrDataHtmlAndPopulateWindowTitle($testSession, $active_id, true);
1131 $user_id = $this->object->_getUserIdFromActiveId($active_id);
1132
1133 if (!$this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired()) {
1134 if ($this->object->getAnonymity()) {
1135 $template->setVariable("TEXT_HEADING", $this->lng->txt("tst_result"));
1136 } else {
1137 $uname = $this->object->userLookupFullName($user_id, true);
1138 $template->setVariable("TEXT_HEADING", sprintf($this->lng->txt("tst_result_user_name"), $uname));
1139 $template->setVariable("USER_DATA", $user_data);
1140 }
1141 }
1142
1143 $template->parseCurrentBlock();
1144
1145
1146 $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print.css", "Modules/Test"), "print");
1147 if ($this->object->getShowSolutionAnswersOnly()) {
1148 $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print_hide_content.css", "Modules/Test"), "print");
1149 }
1150
1151 if (array_key_exists("pdf", $_GET) && ($_GET["pdf"] == 1)) {
1152 //$this->object->deliverPDFfromHTML($template->get(), $this->object->getTitle());
1153
1154 $name = ilObjUser::_lookupName($user_id);
1155 $filename = $name['lastname'] . '_' . $name['firstname'] . '_' . $name['login'] . '__' . $this->object->getTitleFilenameCompliant();
1157 //ilUtil::deliverData($file, ilUtil::getASCIIFilename($this->object->getTitle()) . ".pdf", "application/pdf", false, true);
1158 //$template->setVariable("PDF_FILE_LOCATION", $filename);
1159 } else {
1160 $this->tpl->setVariable("ADM_CONTENT", $template->get());
1161 }
1162 }
$filename
Definition: buildRTE.php:89
static _getResultPass($active_id)
Retrieves the pass number that should be counted for a given user.
static _lookupName($a_user_id)
lookup user name
buildPassOverviewTableGUI($targetGUI)
getPassOverviewTableData(ilTestSession $testSession, $passes, $withResults)

References $_GET, $DIC, $filename, $name, ilObjTest\_getResultPass(), ilObjUser\_lookupName(), ilObjTestGUI\accessViolationRedirect(), ilTestServiceGUI\buildPassOverviewTableGUI(), ilTestServiceGUI\buildUserTestResultsToolbarGUI(), ilTestPDFGenerator\generatePDF(), ilTestServiceGUI\getAdditionalUsrDataHtmlAndPopulateWindowTitle(), ilTestServiceGUI\getGradingMessageBuilder(), ilTestServiceGUI\getObjectiveOrientedContainer(), ilTestServiceGUI\getPassOverviewTableData(), ilUtil\getStyleSheetLocation(), getTestAccess(), ilTestServiceGUI\isGradingMessageRequired(), ilTestServiceGUI\isPdfDeliveryRequest(), ilTestPDFGenerator\PDF_OUTPUT_DOWNLOAD, PDF_USER_RESULT, and ilPDFGeneratorUtils\prepareGenerationRequest().

+ Here is the call graph for this function:

◆ outUserListOfAnswerPasses()

ilTestEvaluationGUI::outUserListOfAnswerPasses ( )

Output of the pass overview for a user when he/she wants to see his/her list of answers.

Output of the pass overview for a user when he/she wants to see his/her list of answers

@access public

Definition at line 1519 of file class.ilTestEvaluationGUI.php.

1520 {
1521 global $DIC; /* @var ILIAS\DI\Container $DIC */
1522 $ilUser = $DIC['ilUser'];
1523 $ilObjDataCache = $DIC['ilObjDataCache'];
1524
1525 if (!$this->object->getShowSolutionPrintview()) {
1526 ilUtil::sendInfo($this->lng->txt("no_permission"), true);
1527 $this->ctrl->redirectByClass("ilobjtestgui", "infoScreen");
1528 }
1529
1530 $template = new ilTemplate("tpl.il_as_tst_info_list_of_answers.html", true, true, "Modules/Test");
1531
1532 $pass = null;
1533 if (array_key_exists("pass", $_GET)) {
1534 if (strlen($_GET["pass"])) {
1535 $pass = $_GET["pass"];
1536 }
1537 }
1538 $user_id = $ilUser->getId();
1539
1540 $testSession = $this->testSessionFactory->getSession();
1541 $active_id = $testSession->getActiveId();
1542
1543 $template->setVariable("TEXT_RESULTS", $this->lng->txt("tst_passes"));
1544
1545 global $DIC; /* @var ILIAS\DI\Container $DIC */
1546 require_once 'Modules/Test/classes/class.ilTestPassesSelector.php';
1547 $testPassesSelector = new ilTestPassesSelector($DIC['ilDB'], $this->object);
1548 $testPassesSelector->setActiveId($testSession->getActiveId());
1549 $testPassesSelector->setLastFinishedPass($testSession->getLastFinishedPass());
1550
1551 $passOverViewTableGUI = $this->buildPassOverviewTableGUI($this);
1552 $passOverViewTableGUI->setActiveId($testSession->getActiveId());
1553 $passOverViewTableGUI->setResultPresentationEnabled(false);
1554 $passOverViewTableGUI->setPassDetailsCommand('outUserListOfAnswerPasses');
1555 $passOverViewTableGUI->init();
1556 $passOverViewTableGUI->setData($this->getPassOverviewTableData($testSession, $testPassesSelector->getClosedPasses(), false));
1557 $template->setVariable("PASS_OVERVIEW", $passOverViewTableGUI->getHTML());
1558
1559 $signature = "";
1560 if (strlen($pass)) {
1561 require_once 'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
1562 $testResultHeaderLabelBuilder = new ilTestResultHeaderLabelBuilder($this->lng, $ilObjDataCache);
1563
1564 $objectivesList = null;
1565
1566 if ($this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired()) {
1567 $testSequence = $this->testSequenceFactory->getSequenceByActiveIdAndPass($active_id, $pass);
1568 $testSequence->loadFromDb();
1569 $testSequence->loadQuestions();
1570
1571 require_once 'Modules/Course/classes/Objectives/class.ilLOTestQuestionAdapter.php';
1572 $objectivesAdapter = ilLOTestQuestionAdapter::getInstance($testSession);
1573
1574 $objectivesList = $this->buildQuestionRelatedObjectivesList($objectivesAdapter, $testSequence);
1575 $objectivesList->loadObjectivesTitles();
1576
1577 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
1578 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
1579 $testResultHeaderLabelBuilder->setTestObjId($this->object->getId());
1580 $testResultHeaderLabelBuilder->setTestRefId($this->object->getRefId());
1581 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
1582 }
1583
1584 $result_array = $this->object->getTestResult(
1585 $active_id,
1586 $pass,
1587 false,
1588 !$this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired()
1589 );
1590
1591 $signature = $this->getResultsSignature();
1592 $user_id = &$this->object->_getUserIdFromActiveId($active_id);
1593 $showAllAnswers = true;
1594 if ($this->object->isExecutable($testSession, $user_id)) {
1595 $showAllAnswers = false;
1596 }
1597 $this->setContextResultPresentation(false);
1598 $answers = $this->getPassListOfAnswers($result_array, $active_id, $pass, false, $showAllAnswers, false, false, false, $objectivesList, $testResultHeaderLabelBuilder);
1599 $template->setVariable("PASS_DETAILS", $answers);
1600 }
1601 $template->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
1602 $template->setVariable("PRINT_TEXT", $this->lng->txt("print"));
1603 $template->setVariable("PRINT_URL", "javascript:window.print();");
1604
1605 $user_data = $this->getAdditionalUsrDataHtmlAndPopulateWindowTitle($testSession, $active_id, true);
1606 $template->setVariable("USER_DATA", $user_data);
1607 $template->setVariable("TEXT_LIST_OF_ANSWERS", $this->lng->txt("tst_list_of_answers"));
1608 if (strlen($signature)) {
1609 $template->setVariable("SIGNATURE", $signature);
1610 }
1611 if (!is_null($pass) && $this->object->isShowExamIdInTestResultsEnabled()) {
1612 $template->setCurrentBlock('exam_id_footer');
1613 $template->setVariable('EXAM_ID_VAL', ilObjTest::lookupExamId(
1614 $testSession->getActiveId(),
1615 $pass
1616 ));
1617 $template->setVariable('EXAM_ID_TXT', $this->lng->txt('exam_id'));
1618 $template->parseCurrentBlock();
1619 }
1620 $this->tpl->setVariable("ADM_CONTENT", $template->get());
1621
1622 $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print.css", "Modules/Test"), "print");
1623 if ($this->object->getShowSolutionAnswersOnly()) {
1624 $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print_hide_content.css", "Modules/Test"), "print");
1625 }
1626 }
static lookupExamId($active_id, $pass)
getResultsSignature()
Returns HTML code for a signature field.
setContextResultPresentation($contextResultPresentation)
$ilUser
Definition: imgupload.php:18

References $_GET, $DIC, $ilUser, $pass, ilTestServiceGUI\buildPassOverviewTableGUI(), ilTestServiceGUI\buildQuestionRelatedObjectivesList(), ilTestServiceGUI\getAdditionalUsrDataHtmlAndPopulateWindowTitle(), ilLOTestQuestionAdapter\getInstance(), ilTestServiceGUI\getObjectiveOrientedContainer(), ilTestServiceGUI\getPassListOfAnswers(), ilTestServiceGUI\getPassOverviewTableData(), ilTestServiceGUI\getResultsSignature(), ilUtil\getStyleSheetLocation(), ilObjTest\lookupExamId(), ilUtil\sendInfo(), and ilTestServiceGUI\setContextResultPresentation().

+ Here is the call graph for this function:

◆ outUserPassDetails()

ilTestEvaluationGUI::outUserPassDetails ( )

Output of the pass details of an existing test pass for the active test participant.

@access public

Definition at line 1205 of file class.ilTestEvaluationGUI.php.

1206 {
1207 global $DIC;
1208 $ilTabs = $DIC['ilTabs'];
1209 $ilUser = $DIC['ilUser'];
1210 $ilObjDataCache = $DIC['ilObjDataCache'];
1211
1212 $ilTabs->clearSubTabs();
1213 $ilTabs->setBackTarget($this->lng->txt('tst_results_back_overview'), $this->ctrl->getLinkTarget($this));
1214
1215 $testSession = $this->testSessionFactory->getSession();
1216
1217 if (!$this->object->getShowPassDetails()) {
1218 #$executable = $this->object->isExecutable($testSession, $ilUser->getId());
1219
1220 #if($executable["executable"])
1221 #{
1222 $this->ctrl->redirectByClass("ilobjtestgui", "infoScreen");
1223 #}
1224 }
1225
1226 $active_id = $testSession->getActiveId();
1227 $user_id = $testSession->getUserId();
1228
1229 $this->ctrl->saveParameter($this, "pass");
1230 $pass = $_GET["pass"];
1231
1232 // prepare generation before contents are processed (for mathjax)
1233 if ($this->isPdfDeliveryRequest()) {
1235 }
1236
1237 require_once 'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
1238 $testResultHeaderLabelBuilder = new ilTestResultHeaderLabelBuilder($this->lng, $ilObjDataCache);
1239
1240 $objectivesList = null;
1241
1242 $considerHiddenQuestions = true;
1243 $considerOptionalQuestions = true;
1244
1245 if ($this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired()) {
1246 $considerHiddenQuestions = false;
1247
1248 $testSequence = $this->testSequenceFactory->getSequenceByActiveIdAndPass($active_id, $pass);
1249 $testSequence->loadFromDb();
1250 $testSequence->loadQuestions();
1251
1252 if ($this->object->isRandomTest() && !$testSequence->isAnsweringOptionalQuestionsConfirmed()) {
1253 $considerOptionalQuestions = false;
1254 }
1255
1256 require_once 'Modules/Course/classes/Objectives/class.ilLOTestQuestionAdapter.php';
1257 $objectivesAdapter = ilLOTestQuestionAdapter::getInstance($testSession);
1258
1259 $objectivesList = $this->buildQuestionRelatedObjectivesList($objectivesAdapter, $testSequence);
1260 $objectivesList->loadObjectivesTitles();
1261
1262 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
1263 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
1264 $testResultHeaderLabelBuilder->setTestObjId($this->object->getId());
1265 $testResultHeaderLabelBuilder->setTestRefId($this->object->getRefId());
1266 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
1267 }
1268
1269 $result_array = $this->getFilteredTestResult($active_id, $pass, $considerHiddenQuestions, $considerOptionalQuestions);
1270
1271 $command_solution_details = "";
1272 if ($this->object->getShowSolutionDetails()) {
1273 $command_solution_details = "outCorrectSolution";
1274 }
1275 $questionAnchorNav = $this->object->canShowSolutionPrintview();
1276
1277 $tpl = new ilTemplate('tpl.il_as_tst_pass_details_overview_participants.html', true, true, "Modules/Test");
1278
1279 if (!$this->isPdfDeliveryRequest()) {
1280 $toolbar = $this->buildUserTestResultsToolbarGUI();
1281
1282 $this->ctrl->setParameter($this, 'pdf', '1');
1283 $toolbar->setPdfExportLinkTarget($this->ctrl->getLinkTarget($this, 'outUserPassDetails'));
1284 $this->ctrl->setParameter($this, 'pdf', '');
1285
1286 $validator = new ilCertificateDownloadValidator();
1287 if ($validator->isCertificateDownloadable($user_id, $this->object->getId())) {
1288 $toolbar->setCertificateLinkTarget($this->ctrl->getLinkTarget($this, 'outCertificate'));
1289 }
1290
1291 $toolbar->build();
1292
1293 $tpl->setVariable('RESULTS_TOOLBAR', $this->ctrl->getHTML($toolbar));
1294
1295 $tpl->setCurrentBlock('signature');
1296 $tpl->setVariable("SIGNATURE", $this->getResultsSignature());
1297 $tpl->parseCurrentBlock();
1298
1299 if ($this->object->isShowExamIdInTestResultsEnabled()) {
1300 $tpl->setCurrentBlock('exam_id');
1301 $tpl->setVariable('EXAM_ID', ilObjTest::lookupExamId(
1302 $testSession->getActiveId(),
1303 $pass
1304 ));
1305 $tpl->setVariable('EXAM_ID_TXT', $this->lng->txt('exam_id'));
1306 $tpl->parseCurrentBlock();
1307 }
1308 }
1309
1310 if (!$this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired() &&
1311 $this->isGradingMessageRequired() && $this->object->getNrOfTries() == 1) {
1312 $gradingMessageBuilder = $this->getGradingMessageBuilder($active_id);
1313 $gradingMessageBuilder->buildMessage();
1314 $gradingMessageBuilder->sendMessage();
1315
1316 #$template->setCurrentBlock('grading_message');
1317 #$template->setVariable('GRADING_MESSAGE', );
1318 #$template->parseCurrentBlock();
1319 }
1320
1321 $overviewTableGUI = $this->getPassDetailsOverviewTableGUI(
1322 $result_array,
1323 $active_id,
1324 $pass,
1325 $this,
1326 "outUserPassDetails",
1327 $command_solution_details,
1328 $questionAnchorNav,
1329 $objectivesList
1330 );
1331 $overviewTableGUI->setTitle($testResultHeaderLabelBuilder->getPassDetailsHeaderLabel($pass + 1));
1332 $tpl->setVariable("PASS_DETAILS", $this->ctrl->getHTML($overviewTableGUI));
1333
1334 $data = &$this->object->getCompleteEvaluationData();
1335 $percent = $data->getParticipant($active_id)->getPass($pass)->getReachedPoints() / $data->getParticipant($active_id)->getPass($pass)->getMaxPoints() * 100;
1336 $result = $data->getParticipant($active_id)->getPass($pass)->getReachedPoints() . " " . strtolower($this->lng->txt("of")) . " " . $data->getParticipant($active_id)->getPass($pass)->getMaxPoints() . " (" . sprintf("%2.2f", $percent) . " %" . ")";
1337 $tpl->setCurrentBlock('total_score');
1338 $tpl->setVariable("TOTAL_RESULT_TEXT", $this->lng->txt('tst_stat_result_resultspoints'));
1339 $tpl->setVariable("TOTAL_RESULT", $result);
1340 $tpl->parseCurrentBlock();
1341
1342 if ($this->object->canShowSolutionPrintview()) {
1343 $list_of_answers = $this->getPassListOfAnswers(
1344 $result_array,
1345 $active_id,
1346 $pass,
1347 $this->object->getShowSolutionListComparison(),
1348 false,
1349 false,
1350 false,
1351 true,
1352 $objectivesList,
1353 $testResultHeaderLabelBuilder
1354 );
1355 $tpl->setVariable("LIST_OF_ANSWERS", $list_of_answers);
1356 }
1357
1358 $tpl->setVariable("TEXT_RESULTS", $testResultHeaderLabelBuilder->getPassDetailsHeaderLabel($pass + 1));
1359 $tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
1360
1361 $uname = $this->object->userLookupFullName($user_id, true);
1362 $user_data = $this->getAdditionalUsrDataHtmlAndPopulateWindowTitle($testSession, $active_id, true);
1363 if (!$this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired()) {
1364 if ($this->object->getAnonymity()) {
1365 $tpl->setVariable("TEXT_HEADING", $this->lng->txt("tst_result_pass"));
1366 } else {
1367 $tpl->setVariable("TEXT_HEADING", sprintf($this->lng->txt("tst_result_user_name_pass"), $pass + 1, $uname));
1368 $tpl->setVariable("USER_DATA", $user_data);
1369 }
1370 }
1371
1372 $this->populateExamId($tpl, (int) $active_id, (int) $pass);
1374
1375 $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print.css", "Modules/Test"), "print");
1376 if ($this->object->getShowSolutionAnswersOnly()) {
1377 $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print_hide_content.css", "Modules/Test"), "print");
1378 }
1379
1380 if ($this->isPdfDeliveryRequest()) {
1381 ilTestPDFGenerator::generatePDF($tpl->get(), ilTestPDFGenerator::PDF_OUTPUT_DOWNLOAD, $this->object->getTitleFilenameCompliant(), PDF_USER_RESULT);
1382 } else {
1383 $this->tpl->setContent($tpl->get());
1384 }
1385 }

References $_GET, $data, $DIC, $ilUser, $pass, $result, ilTestServiceGUI\$tpl, ilTestServiceGUI\buildQuestionRelatedObjectivesList(), ilTestServiceGUI\buildUserTestResultsToolbarGUI(), ilTestPDFGenerator\generatePDF(), ilTestServiceGUI\getAdditionalUsrDataHtmlAndPopulateWindowTitle(), getFilteredTestResult(), ilTestServiceGUI\getGradingMessageBuilder(), ilLOTestQuestionAdapter\getInstance(), ilTestServiceGUI\getObjectiveOrientedContainer(), ilTestServiceGUI\getPassDetailsOverviewTableGUI(), ilTestServiceGUI\getPassListOfAnswers(), ilTestServiceGUI\getResultsSignature(), ilUtil\getStyleSheetLocation(), ilTestServiceGUI\isGradingMessageRequired(), ilTestServiceGUI\isPdfDeliveryRequest(), ilObjTest\lookupExamId(), ilObjTest\lookupLastTestPassAccess(), ilTestPDFGenerator\PDF_OUTPUT_DOWNLOAD, PDF_USER_RESULT, ilTestServiceGUI\populateExamId(), ilTestServiceGUI\populatePassFinishDate(), and ilPDFGeneratorUtils\prepareGenerationRequest().

Referenced by outUserPassDetailsResetTableFilter(), and outUserPassDetailsSetTableFilter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ outUserPassDetailsResetTableFilter()

ilTestEvaluationGUI::outUserPassDetailsResetTableFilter ( )

Definition at line 1173 of file class.ilTestEvaluationGUI.php.

1174 {
1175 $tableGUI = $this->buildPassDetailsOverviewTableGUI($this, 'outUserPassDetails');
1176 $tableGUI->initFilter();
1177 $tableGUI->resetOffset();
1178 $tableGUI->resetFilter();
1179 $this->outUserPassDetails();
1180 }
outUserPassDetails()
Output of the pass details of an existing test pass for the active test participant.

References ilTestServiceGUI\buildPassDetailsOverviewTableGUI(), and outUserPassDetails().

+ Here is the call graph for this function:

◆ outUserPassDetailsSetTableFilter()

ilTestEvaluationGUI::outUserPassDetailsSetTableFilter ( )

Definition at line 1164 of file class.ilTestEvaluationGUI.php.

1165 {
1166 $tableGUI = $this->buildPassDetailsOverviewTableGUI($this, 'outUserPassDetails');
1167 $tableGUI->initFilter();
1168 $tableGUI->resetOffset();
1169 $tableGUI->writeFilterToSession();
1170 $this->outUserPassDetails();
1171 }

References ilTestServiceGUI\buildPassDetailsOverviewTableGUI(), and outUserPassDetails().

+ Here is the call graph for this function:

◆ outUserResultsOverview()

ilTestEvaluationGUI::outUserResultsOverview ( )

Output of the pass overview for a test called by a test participant.

@global ilTabsGUI $ilTabs

Definition at line 1392 of file class.ilTestEvaluationGUI.php.

1393 {
1394 global $DIC;
1395 $ilUser = $DIC['ilUser'];
1396 $ilObjDataCache = $DIC['ilObjDataCache'];
1397
1398 $testSession = $this->testSessionFactory->getSession();
1399 $active_id = $testSession->getActiveId();
1400 $user_id = $ilUser->getId();
1401 $uname = $this->object->userLookupFullName($user_id, true);
1402
1403 if (!$this->object->canShowTestResults($testSession)) {
1404 $this->ctrl->redirectByClass("ilobjtestgui", "infoScreen");
1405 }
1406
1407 // prepare generation before contents are processed (for mathjax)
1408 if ($this->isPdfDeliveryRequest()) {
1410 }
1411
1412 $templatehead = new ilTemplate("tpl.il_as_tst_results_participants.html", true, true, "Modules/Test");
1413 $template = new ilTemplate("tpl.il_as_tst_results_participant.html", true, true, "Modules/Test");
1414
1415 $toolbar = $this->buildUserTestResultsToolbarGUI();
1416
1417 $this->ctrl->setParameter($this, 'pdf', '1');
1418 $toolbar->setPdfExportLinkTarget($this->ctrl->getLinkTarget($this, 'outUserResultsOverview'));
1419 $this->ctrl->setParameter($this, 'pdf', '');
1420
1421 $validator = new ilCertificateDownloadValidator();
1422 if ($validator->isCertificateDownloadable($user_id, $this->object->getId())) {
1423 $toolbar->setCertificateLinkTarget($this->ctrl->getLinkTarget($this, 'outCertificate'));
1424 }
1425
1426 $toolbar->build();
1427
1428 $templatehead->setVariable('RESULTS_TOOLBAR', $this->ctrl->getHTML($toolbar));
1429
1430 $passDetailsEnabled = $this->object->getShowPassDetails();
1431 #if (!$passDetailsEnabled)
1432 #{
1433 # $executable = $this->object->isExecutable($testSession, $ilUser->getId());
1434 # if (!$executable["executable"]) $passDetailsEnabled = true;
1435 #}
1436
1437 require_once 'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
1438 $testResultHeaderLabelBuilder = new ilTestResultHeaderLabelBuilder($this->lng, $ilObjDataCache);
1439 if ($this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired()) {
1440 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
1441 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
1442 $testResultHeaderLabelBuilder->setTestObjId($this->object->getId());
1443 $testResultHeaderLabelBuilder->setTestRefId($this->object->getRefId());
1444 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
1445 }
1446
1447 $template->setCurrentBlock("pass_overview");
1448
1449 global $DIC; /* @var ILIAS\DI\Container $DIC */
1450 require_once 'Modules/Test/classes/class.ilTestPassesSelector.php';
1451 $testPassesSelector = new ilTestPassesSelector($DIC['ilDB'], $this->object);
1452 $testPassesSelector->setActiveId($testSession->getActiveId());
1453 $testPassesSelector->setLastFinishedPass($testSession->getLastFinishedPass());
1454
1455 $passOverViewTableGUI = $this->buildPassOverviewTableGUI($this);
1456 $passOverViewTableGUI->setActiveId($testSession->getActiveId());
1457 $passOverViewTableGUI->setResultPresentationEnabled(true);
1458 if ($passDetailsEnabled) {
1459 $passOverViewTableGUI->setPassDetailsCommand('outUserPassDetails');
1460 }
1461 if ($this->object->isPassDeletionAllowed()) {
1462 $passOverViewTableGUI->setPassDeletionCommand('confirmDeletePass');
1463 }
1464 $passOverViewTableGUI->init();
1465 $passOverViewTableGUI->setData($this->getPassOverviewTableData($testSession, $testPassesSelector->getReportablePasses(), true));
1466 $passOverViewTableGUI->setTitle($testResultHeaderLabelBuilder->getPassOverviewHeaderLabel());
1467 $overview = $passOverViewTableGUI->getHTML();
1468 if ($this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired()) {
1469 require_once 'Modules/Test/classes/class.ilTestLearningObjectivesStatusGUI.php';
1470 $loStatus = new ilTestLearningObjectivesStatusGUI($this->lng);
1471 $loStatus->setCrsObjId($this->getObjectiveOrientedContainer()->getObjId());
1472 $loStatus->setUsrId($testSession->getUserId());
1473 $overview .= "<br />" . $loStatus->getHTML();
1474 }
1475 $template->setVariable("PASS_OVERVIEW", $overview);
1476 $template->parseCurrentBlock();
1477
1478 if ($this->isGradingMessageRequired()) {
1479 $gradingMessageBuilder = $this->getGradingMessageBuilder($active_id);
1480 $gradingMessageBuilder->buildMessage();
1481 $gradingMessageBuilder->sendMessage();
1482
1483 #$template->setCurrentBlock('grading_message');
1484 #$template->setVariable('GRADING_MESSAGE', );
1485 #$template->parseCurrentBlock();
1486 }
1487
1488 $user_data = $this->getAdditionalUsrDataHtmlAndPopulateWindowTitle($testSession, $active_id, true);
1489
1490 if (!$this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired()) {
1491 if ($this->object->getAnonymity()) {
1492 $template->setVariable("TEXT_HEADING", $this->lng->txt("tst_result"));
1493 } else {
1494 $template->setVariable("TEXT_HEADING", sprintf($this->lng->txt("tst_result_user_name"), $uname));
1495 $template->setVariable("USER_DATA", $user_data);
1496 }
1497 }
1498
1499 $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print.css", "Modules/Test"), "print");
1500 if ($this->object->getShowSolutionAnswersOnly()) {
1501 $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print_hide_content.css", "Modules/Test"), "print");
1502 }
1503 $templatehead->setVariable("RESULTS_PARTICIPANT", $template->get());
1504
1505 if ($this->isPdfDeliveryRequest()) {
1506 ilTestPDFGenerator::generatePDF($template->get(), ilTestPDFGenerator::PDF_OUTPUT_DOWNLOAD, $this->object->getTitleFilenameCompliant(), PDF_USER_RESULT);
1507 } else {
1508 $this->tpl->setContent($templatehead->get());
1509 }
1510 }

References $DIC, $ilUser, ilTestServiceGUI\buildPassOverviewTableGUI(), ilTestServiceGUI\buildUserTestResultsToolbarGUI(), ilTestPDFGenerator\generatePDF(), ilTestServiceGUI\getAdditionalUsrDataHtmlAndPopulateWindowTitle(), ilTestServiceGUI\getGradingMessageBuilder(), ilTestServiceGUI\getObjectiveOrientedContainer(), ilTestServiceGUI\getPassOverviewTableData(), ilUtil\getStyleSheetLocation(), ilTestServiceGUI\isGradingMessageRequired(), ilTestServiceGUI\isPdfDeliveryRequest(), ilTestPDFGenerator\PDF_OUTPUT_DOWNLOAD, PDF_USER_RESULT, and ilPDFGeneratorUtils\prepareGenerationRequest().

+ Here is the call graph for this function:

◆ passDetails()

ilTestEvaluationGUI::passDetails ( )

Output of the learners view of an existing test pass.

Output of the learners view of an existing test pass

@access public

Definition at line 1635 of file class.ilTestEvaluationGUI.php.

1636 {
1637 if (array_key_exists("pass", $_GET) && (strlen($_GET["pass"]) > 0)) {
1638 $this->ctrl->saveParameter($this, "pass");
1639 $this->ctrl->saveParameter($this, "active_id");
1640 $this->outTestResults(false, $_GET["pass"]);
1641 } else {
1642 $this->outTestResults(false);
1643 }
1644 }

References $_GET.

◆ redirectBackToParticipantsScreen()

ilTestEvaluationGUI::redirectBackToParticipantsScreen ( )
protected

Definition at line 2273 of file class.ilTestEvaluationGUI.php.

2274 {
2275 $this->ctrl->redirectByClass("ilTestParticipantsGUI");
2276 }

Referenced by confirmFinishTestPassForAllUser(), confirmFinishTestPassForUser(), finishAllUserPasses(), and finishTestPassForSingleUser().

+ Here is the caller graph for this function:

◆ redirectToPassDeletionContext()

ilTestEvaluationGUI::redirectToPassDeletionContext (   $context)
private

Definition at line 1772 of file class.ilTestEvaluationGUI.php.

1773 {
1774 require_once 'Modules/Test/classes/confirmations/class.ilTestPassDeletionConfirmationGUI.php';
1775
1776 switch ($context) {
1778
1779 $this->ctrl->redirect($this, 'outUserResultsOverview');
1780
1781 // no break
1783
1784 $this->ctrl->redirectByClass('ilObjTestGUI', 'infoScreen');
1785
1786 // no break
1788
1789 $this->ctrl->redirectByClass('ilTestPlayerDynamicQuestionSetGUI', 'startTest');
1790 }
1791 }

References $context, ilTestPassDeletionConfirmationGUI\CONTEXT_DYN_TEST_PLAYER, ilTestPassDeletionConfirmationGUI\CONTEXT_INFO_SCREEN, and ilTestPassDeletionConfirmationGUI\CONTEXT_PASS_OVERVIEW.

Referenced by cancelDeletePass(), and confirmDeletePass().

+ Here is the caller graph for this function:

◆ resetfilterEvaluation()

ilTestEvaluationGUI::resetfilterEvaluation ( )
Deprecated:
command is not used any longer

Definition at line 167 of file class.ilTestEvaluationGUI.php.

168 {
169 if (!$this->getTestAccess()->checkStatisticsAccess()) {
171 }
172
173 include_once "./Modules/Test/classes/tables/class.ilEvaluationAllTableGUI.php";
174 $table_gui = new ilEvaluationAllTableGUI($this, 'outEvaluation');
175 $table_gui->resetFilter();
176 $this->ctrl->redirect($this, "outEvaluation");
177 }

References ilObjTestGUI\accessViolationRedirect(), and getTestAccess().

+ Here is the call graph for this function:

◆ setTestAccess()

ilTestEvaluationGUI::setTestAccess (   $testAccess)
Parameters
ilTestAccess$testAccess

Definition at line 72 of file class.ilTestEvaluationGUI.php.

73 {
74 $this->testAccess = $testAccess;
75 }

References $testAccess.

◆ singleResults()

ilTestEvaluationGUI::singleResults ( )

Creates user results for single questions.

Definition at line 1650 of file class.ilTestEvaluationGUI.php.

1651 {
1652 global $DIC; /* @var ILIAS\DI\Container $DIC */
1653
1654 if (!$this->getTestAccess()->checkStatisticsAccess()) {
1656 }
1657
1658 $this->object->setAccessFilteredParticipantList(
1659 $this->object->buildStatisticsAccessFilteredParticipantList()
1660 );
1661
1662 $DIC->tabs()->activateTab(ilTestTabsManager::TAB_ID_STATISTICS);
1663
1664 $data = &$this->object->getCompleteEvaluationData();
1665 $color_class = array("tblrow1", "tblrow2");
1666 $counter = 0;
1667 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.il_as_tst_eval_single_answers.html", "Modules/Test");
1668 $foundParticipants = &$data->getParticipants();
1669 if (count($foundParticipants) == 0) {
1670 ilUtil::sendInfo($this->lng->txt("tst_no_evaluation_data"));
1671 return;
1672 } else {
1673 $rows = array();
1674 foreach ($data->getQuestionTitles() as $question_id => $question_title) {
1675 $answered = 0;
1676 $reached = 0;
1677 $max = 0;
1678 foreach ($foundParticipants as $userdata) {
1679 $pass = $userdata->getScoredPass();
1680 if (is_object($userdata->getPass($pass))) {
1681 $question = &$userdata->getPass($pass)->getAnsweredQuestionByQuestionId($question_id);
1682 if (is_array($question)) {
1683 $answered++;
1684 }
1685 }
1686 }
1687 $counter++;
1688 $this->ctrl->setParameter($this, "qid", $question_id);
1689 require_once './Modules/TestQuestionPool/classes/class.assQuestion.php';
1690 $question_object = assQuestion::_instanciateQuestion($question_id);
1691 $download = "";
1692 if ($question_object instanceof ilObjFileHandlingQuestionType) {
1693 if ($question_object->hasFileUploads($this->object->getTestId())) {
1694 $download = "<a href=\"" . $this->ctrl->getLinkTarget($this, "exportFileUploadsForAllParticipants") . "\">" . $this->lng->txt("download") . "</a>";
1695 }
1696 }
1697 array_push(
1698 $rows,
1699 array(
1700 'qid' => $question_id,
1701 'question_title' => $question_title,
1702 'number_of_answers' => $answered,
1703 'output' => "<a href=\"" . $this->ctrl->getLinkTarget($this, "exportQuestionForAllParticipants") . "\">" . $this->lng->txt("pdf_export") . "</a>",
1704 'file_uploads' => $download
1705 )
1706 );
1707 }
1708 if (count($rows)) {
1709 require_once './Modules/Test/classes/tables/class.ilResultsByQuestionTableGUI.php';
1710 $table_gui = new ilResultsByQuestionTableGUI($this, "singleResults");
1711 $table_gui->setTitle($this->lng->txt("tst_answered_questions_test"));
1712 $table_gui->setData($rows);
1713
1714 $this->tpl->setVariable("TBL_SINGLE_ANSWERS", $table_gui->getHTML());
1715 } else {
1716 $this->tpl->setVariable("TBL_SINGLE_ANSWERS", $this->lng->txt("adm_no_special_users"));
1717 }
1718 }
1719 }
TableGUI class for results by question.

References $data, $DIC, $pass, $rows, assQuestion\_instanciateQuestion(), ilObjTestGUI\accessViolationRedirect(), getTestAccess(), ilUtil\sendInfo(), and ilTestTabsManager\TAB_ID_STATISTICS.

+ Here is the call graph for this function:

Field Documentation

◆ $processLockerFactory

ilTestEvaluationGUI::$processLockerFactory
protected

Definition at line 38 of file class.ilTestEvaluationGUI.php.

◆ $testAccess

ilTestEvaluationGUI::$testAccess
protected

Definition at line 33 of file class.ilTestEvaluationGUI.php.

Referenced by getTestAccess(), and setTestAccess().


The documentation for this class was generated from the following file: