4require_once
'./Modules/Test/classes/class.ilTestServiceGUI.php';
5require_once
'Modules/TestQuestionPool/classes/class.ilAssQuestionHintTracking.php';
43 parent::__construct($a_object);
47 require_once
'Modules/Test/classes/class.ilTestProcessLockerFactory.php';
59 $cmd = $this->ctrl->getCmd();
60 $next_class = $this->ctrl->getNextClass($this);
61 $this->ctrl->saveParameter($this,
"sequence");
62 $this->ctrl->saveParameter($this,
"active_id");
64 switch ($next_class) {
65 case 'iltestpassdetailsoverviewtablegui':
66 require_once
'Modules/Test/classes/tables/class.ilTestPassDetailsOverviewTableGUI.php';
69 $tableGUI->initFilter();
70 $this->ctrl->forwardCommand($tableGUI);
82 $headernames = array();
83 if ($this->object->getAnonymity()) {
84 array_push($headernames, $this->lng->txt(
"counter"));
86 array_push($headernames, $this->lng->txt(
"name"));
87 array_push($headernames, $this->lng->txt(
"login"));
89 $additionalFields = $this->
object->getEvaluationAdditionalFields();
90 if (count($additionalFields)) {
91 foreach ($additionalFields as $fieldname) {
92 array_push($headernames, $this->lng->txt($fieldname));
95 array_push($headernames, $this->lng->txt(
"tst_reached_points"));
96 array_push($headernames, $this->lng->txt(
"tst_mark"));
97 if ($this->object->getECTSOutput()) {
98 array_push($headernames, $this->lng->txt(
"ects_grade"));
100 array_push($headernames, $this->lng->txt(
"tst_answered_questions"));
101 array_push($headernames, $this->lng->txt(
"working_time"));
102 array_push($headernames, $this->lng->txt(
"detailed_evaluation"));
108 $headervars = array();
109 if ($this->object->getAnonymity()) {
110 array_push($headervars,
"counter");
112 array_push($headervars,
"name");
113 array_push($headervars,
"login");
115 array_push($headervars,
"resultspoints");
116 array_push($headervars,
"resultsmarks");
117 if ($this->object->getECTSOutput()) {
118 array_push($headervars,
"ects_grade");
120 array_push($headervars,
"qworkedthrough");
121 array_push($headervars,
"timeofwork");
122 array_push($headervars,
"");
128 include_once
"./Modules/Test/classes/tables/class.ilEvaluationAllTableGUI.php";
130 $table_gui->writeFilterToSession();
131 $this->ctrl->redirect($this,
"outEvaluation");
136 include_once
"./Modules/Test/classes/tables/class.ilEvaluationAllTableGUI.php";
138 $table_gui->resetFilter();
139 $this->ctrl->redirect($this,
"outEvaluation");
147 public function outEvaluation()
153 global $ilAccess, $ilToolbar;
155 if ((!$ilAccess->checkAccess(
"tst_statistics",
"", $this->ref_id)) && (!$ilAccess->checkAccess(
"write",
"", $this->ref_id))) {
158 $this->ctrl->redirectByClass(
"ilobjtestgui",
"infoScreen");
161 include_once
"./Modules/Test/classes/tables/class.ilEvaluationAllTableGUI.php";
166 $this->object->getAnonymity(),
167 $this->object->isOfferingQuestionHintsEnabled()
171 $arrFilter = array();
173 foreach ($table_gui->getFilterItems() as $item) {
174 if ($item->getValue() !==
false) {
175 switch ($item->getPostVar()) {
179 $arrFilter[$item->getPostVar()] = $item->getValue();
182 $passedonly = $item->getChecked();
187 include_once
"./Modules/Test/classes/class.ilTestEvaluationData.php";
189 $eval->setFilterArray($arrFilter);
190 $foundParticipants =&$eval->getParticipants();
192 if (count($foundParticipants) > 0) {
193 if ($this->object->getECTSOutput()) {
194 $passed_array =&$this->
object->getTotalPointsPassedArray();
196 foreach ($foundParticipants as $active_id =>
$userdata) {
201 $mark_obj = $this->
object->getMarkSchema()->getMatchingMark(
$userdata->getReachedPointsInPercent());
203 if ($mark_obj->getPassed() ==
false || !
$userdata->areObligationsAnswered()) {
209 $evaluationrow = array();
210 if ($this->object->getAnonymity()) {
212 $evaluationrow[
'login'] =
'';
214 $evaluationrow[
'name'] =
$userdata->getName();
216 $evaluationrow[
'login'] =
"[" .
$userdata->getLogin() .
"]";
218 $evaluationrow[
'login'] =
'';
222 $evaluationrow[
'reached'] =
$userdata->getReached();
223 $evaluationrow[
'max'] =
$userdata->getMaxpoints();
224 $evaluationrow[
'hint_count'] =
$userdata->getRequestedHintsCountFromScoredPass();
225 $percentage =
$userdata->getReachedPointsInPercent();
226 $mark = $this->
object->getMarkSchema()->getMatchingMark($percentage);
227 if (is_object($mark)) {
228 $evaluationrow[
'mark'] = $mark->getShortName();
230 if ($this->object->getECTSOutput()) {
231 $ects_mark = $this->
object->getECTSGrade($passed_array,
$userdata->getReached(),
$userdata->getMaxPoints());
232 $evaluationrow[
'ects_grade'] = $ects_mark;
234 $evaluationrow[
'answered'] =
$userdata->getQuestionsWorkedThroughInPercent();
235 $evaluationrow[
'questions_worked_through'] =
$userdata->getQuestionsWorkedThrough();
236 $evaluationrow[
'number_of_questions'] =
$userdata->getNumberOfQuestions();
237 $time_seconds =
$userdata->getTimeOfWork();
238 $time_hours = floor($time_seconds/3600);
239 $time_seconds -= $time_hours * 3600;
240 $time_minutes = floor($time_seconds/60);
241 $time_seconds -= $time_minutes * 60;
242 $evaluationrow[
'working_time'] =
sprintf(
"%02d:%02d:%02d", $time_hours, $time_minutes, $time_seconds);
243 $this->ctrl->setParameter($this,
"active_id", $active_id);
244 $href = $this->ctrl->getLinkTarget($this,
"detailedEvaluation");
245 $detailed_evaluation = $this->lng->txt(
"detailed_evaluation_show");
246 $evaluationrow[
'details'] =
"<a class=\"il_ContainerItemCommand\" href=\"$href\">$detailed_evaluation</a>";
248 $evaluationrow[
'gender'] = $userfields[
'gender'];
249 $evaluationrow[
'email'] = $userfields[
'email'];
250 $evaluationrow[
'institution'] = $userfields[
'institution'];
251 $evaluationrow[
'street'] = $userfields[
'street'];
252 $evaluationrow[
'city'] = $userfields[
'city'];
253 $evaluationrow[
'zipcode'] = $userfields[
'zipcode'];
254 $evaluationrow[
'country'] = $userfields[
'country'];
255 $evaluationrow[
'sel_country'] = $userfields[
'sel_country'];
256 $evaluationrow[
'department'] = $userfields[
'department'];
257 $evaluationrow[
'matriculation'] = $userfields[
'matriculation'];
259 $data[] = $evaluationrow;
264 $table_gui->setData(
$data);
265 if (count($foundParticipants) > 0) {
266 $ilToolbar->setFormName(
'form_output_eval');
267 $ilToolbar->setFormAction($this->ctrl->getFormAction($this,
'exportEvaluation'));
268 require_once
'Services/Form/classes/class.ilSelectInputGUI.php';
269 $export_type =
new ilSelectInputGUI($this->lng->txt(
'exp_eval_data'),
'export_type');
271 'excel' => $this->lng->txt(
'exp_type_excel'),
272 'csv' => $this->lng->txt(
'exp_type_spss')
275 if (!$this->object->getAnonymity()) {
276 include_once
'Services/Certificate/classes/class.ilCertificate.php';
277 include_once
'Modules/Test/classes/class.ilTestCertificateAdapter.php';
279 $options[
'certificate'] = $this->lng->txt(
'exp_type_certificate');
285 $ilToolbar->addInputItem($export_type,
true);
286 require_once
'Services/UIComponent/Button/classes/class.ilSubmitButton.php';
288 $button->setCommand(
'exportEvaluation');
289 $button->setCaption(
'export');
290 $button->getOmitPreventDoubleSubmission();
291 $ilToolbar->addButtonInstance($button);
295 if ($this->object->getShowSolutionAnswersOnly()) {
299 $this->tpl->setContent($table_gui->getHTML());
313 if ((!
$DIC->access()->checkAccess(
'tst_statistics',
'', $this->ref_id)) && (!
$DIC->access()->checkAccess(
'write',
'', $this->ref_id))) {
315 $this->ctrl->redirectByClass(
'ilobjtestgui',
'infoScreen');
318 $active_id =
$_GET[
'active_id'];
319 if (strlen($active_id) == 0) {
320 ilUtil::sendInfo($this->lng->txt(
'detailed_evaluation_missing_active_id'),
true);
321 $this->ctrl->redirect($this,
'outEvaluation');
326 $toolbar =
$DIC[
'ilToolbar'];
328 require_once
'Services/UIComponent/Button/classes/class.ilLinkButton.php';
330 $backBtn->setCaption(
'back');
331 $backBtn->setUrl($this->ctrl->getLinkTarget($this,
'outEvaluation'));
332 $toolbar->addInputItem($backBtn);
334 $data =&$this->
object->getCompleteEvaluationData();
336 require_once
'Services/Form/classes/class.ilPropertyFormGUI.php';
339 $this->lng->txt(
'detailed_evaluation_for'),
340 $data->getParticipant($active_id)->getName()
344 $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()) .
" %" .
")");
345 $form->addItem($resultPoints);
347 if (strlen(
$data->getParticipant($active_id)->getMark())) {
349 $resultMarks->setValue(
$data->getParticipant($active_id)->getMark());
350 $form->addItem($resultMarks);
351 if (strlen(
$data->getParticipant($active_id)->getECTSMark())) {
353 $ectsGrade->setValue(
$data->getParticipant($active_id)->getECTSMark());
354 $form->addItem($ectsGrade);
358 if ($this->object->isOfferingQuestionHintsEnabled()) {
359 $requestHints =
new ilNonEditableValueGUI($this->lng->txt(
'tst_question_hints_requested_hint_count_header'));
360 $requestHints->setValue(
$data->getParticipant($active_id)->getRequestedHintsCountFromScoredPass());
361 $form->addItem($requestHints);
364 $time_seconds =
$data->getParticipant($active_id)->getTimeOfWork();
365 $atime_seconds =
$data->getParticipant($active_id)->getNumberOfQuestions() ? $time_seconds /
$data->getParticipant($active_id)->getNumberOfQuestions() : 0;
366 $time_hours = floor($time_seconds/3600);
367 $time_seconds -= $time_hours * 3600;
368 $time_minutes = floor($time_seconds/60);
369 $time_seconds -= $time_minutes * 60;
371 $timeOfWork->setValue(
sprintf(
"%02d:%02d:%02d", $time_hours, $time_minutes, $time_seconds));
372 $form->addItem($timeOfWork);
374 $this->tpl->setVariable(
"TXT_ATIMEOFWORK", $this->lng->txt(
""));
375 $time_hours = floor($atime_seconds/3600);
376 $atime_seconds -= $time_hours * 3600;
377 $time_minutes = floor($atime_seconds/60);
378 $atime_seconds -= $time_minutes * 60;
380 $avgTimeOfWork->setValue(
sprintf(
"%02d:%02d:%02d", $time_hours, $time_minutes, $atime_seconds));
381 $form->addItem($avgTimeOfWork);
385 $form->addItem($firstVisit);
389 $form->addItem($lastVisit);
392 $nrPasses->setValue(
$data->getParticipant($active_id)->getLastPass() + 1);
393 $form->addItem($nrPasses);
397 $scoredPass->setValue(
$data->getParticipant($active_id)->getBestPass() + 1);
399 $scoredPass->setValue(
$data->getParticipant($active_id)->getLastPass() + 1);
401 $form->addItem($scoredPass);
403 $median =
$data->getStatistics()->getStatistics()->median();
404 $pct =
$data->getParticipant($active_id)->getMaxpoints() ? ($median /
$data->getParticipant($active_id)->getMaxpoints()) * 100.0 : 0;
405 $mark = $this->
object->mark_schema->getMatchingMark($pct);
406 if (is_object($mark)) {
408 $markMedian->setValue($mark->getShortName());
409 $form->addItem($markMedian);
413 $rankParticipant->setValue(
$data->getStatistics()->getStatistics()->rank(
$data->getParticipant($active_id)->getReached()));
414 $form->addItem($rankParticipant);
417 $rankMedian->setValue(
$data->getStatistics()->getStatistics()->rank_median());
418 $form->addItem($rankMedian);
420 $totalParticipants =
new ilNonEditableValueGUI($this->lng->txt(
'tst_stat_result_total_participants'));
421 $totalParticipants->setValue(
$data->getStatistics()->getStatistics()->count());
422 $form->addItem($totalParticipants);
425 $medianField->setValue($median);
426 $form->addItem($medianField);
428 $this->tpl->setContent(
$form->getHTML());
434 if ($finishdate > 0) {
435 if ((
$DIC->access()->checkAccess(
'write',
'', (
int)
$_GET[
'ref_id']))) {
436 $this->ctrl->setParameter($this,
'statistics',
'1');
437 $this->ctrl->setParameter($this,
'active_id', $active_id);
438 $this->ctrl->setParameter($this,
'pass',
$pass);
440 $this->ctrl->setParameter($this,
'statistics',
'');
441 $this->ctrl->setParameter($this,
'active_id',
'');
442 $this->ctrl->setParameter($this,
'pass',
'');
445 require_once
'Modules/Test/classes/tables/class.ilTestDetailedEvaluationStatisticsTableGUI.php';
448 if ((
$DIC->access()->checkAccess(
'write',
'', (
int)
$_GET[
'ref_id']))) {
449 $table->addCommandButton(
'outParticipantsPassDetails', $this->lng->txt(
'tst_show_answer_sheet'));
452 $questions =
$data->getParticipant($active_id)->getQuestions(
$pass);
453 if (!is_array($questions)) {
454 $questions =
$data->getParticipant($active_id)->getQuestions(0);
457 $tableData = array();
460 foreach ((array) $questions as $question) {
461 $userDataData = array(
463 'id' => $question[
'id'],
464 'id_txt' => $this->lng->txt(
'question_id_short'),
465 'title' =>
$data->getQuestionTitle($question[
'id'])
468 $answeredquestion =
$data->getParticipant($active_id)->getPass(
$pass)->getAnsweredQuestionByQuestionId($question[
"id"]);
469 if (is_array($answeredquestion)) {
470 $percent = $answeredquestion[
'points'] ? $answeredquestion[
'reached'] / $answeredquestion[
'points'] * 100.0 : 0;
471 $userDataData[
'points'] = $answeredquestion[
'reached'] .
' ' . strtolower($this->lng->txt(
'of')) .
" " . $answeredquestion[
'points'] .
' (' .
sprintf(
"%.2f", $percent) .
' %)';
473 $userDataData[
'points'] =
'0 ' . strtolower($this->lng->txt(
'of')) .
' ' . $question[
'points'] .
' (' .
sprintf(
"%.2f", 0) .
' %) - ' . $this->lng->txt(
'question_not_answered');
476 $tableData[] = $userDataData;
478 $table->setData($tableData);
480 $tables[] =
$table->getHTML();
484 $GLOBALS[
'tpl']->setContent(
$form->getHTML() . implode(
'', $tables));
502 require_once
'./Modules/TestQuestionPool/classes/class.assQuestion.php';
505 $question_object->deliverFileUploadZIPFile($this->object->getTestId(), $this->object->getTitle());
507 $this->ctrl->redirect($this,
"singleResults");
518 public function eval_a()
524 global $ilAccess, $ilToolbar;
526 if ((!$ilAccess->checkAccess(
"tst_statistics",
"", $this->ref_id)) && (!$ilAccess->checkAccess(
"write",
"", $this->ref_id))) {
529 $this->ctrl->redirectByClass(
"ilobjtestgui",
"infoScreen");
532 $this->tpl->addBlockFile(
"ADM_CONTENT",
"adm_content",
"tpl.il_as_tst_eval_anonymous_aggregation.html",
"Modules/Test");
533 $eval =&$this->
object->getCompleteEvaluationData();
535 $foundParticipants =&$eval->getParticipants();
536 if (count($foundParticipants)) {
537 $ilToolbar->setFormName(
'form_output_eval');
538 $ilToolbar->setFormAction($this->ctrl->getFormAction($this,
'exportAggregatedResults'));
539 require_once
'Services/Form/classes/class.ilSelectInputGUI.php';
540 $export_type =
new ilSelectInputGUI($this->lng->txt(
'exp_eval_data'),
'export_type');
541 $export_type->setOptions(array(
542 'excel' => $this->lng->txt(
'exp_type_excel'),
543 'csv' => $this->lng->txt(
'exp_type_spss')
545 $ilToolbar->addInputItem($export_type,
true);
546 require_once
'Services/UIComponent/Button/classes/class.ilSubmitButton.php';
548 $button->setCommand(
'exportAggregatedResults');
549 $button->setCaption(
'export');
550 $button->getOmitPreventDoubleSubmission();
551 $ilToolbar->addButtonInstance($button);
553 array_push(
$data, array(
554 'result' => $this->lng->txt(
"tst_eval_total_persons"),
555 'value' => count($foundParticipants)
557 $total_finished = $this->
object->evalTotalFinished();
558 array_push(
$data, array(
559 'result' => $this->lng->txt(
"tst_eval_total_finished"),
560 'value' => $total_finished
562 $average_time = $this->
object->evalTotalStartedAverageTime();
563 $diff_seconds = $average_time;
564 $diff_hours = floor($diff_seconds/3600);
565 $diff_seconds -= $diff_hours * 3600;
566 $diff_minutes = floor($diff_seconds/60);
567 $diff_seconds -= $diff_minutes * 60;
568 array_push(
$data, array(
569 'result' => $this->lng->txt(
"tst_eval_total_finished_average_time"),
570 'value' =>
sprintf(
"%02d:%02d:%02d", $diff_hours, $diff_minutes, $diff_seconds)
573 $total_passed_reached = 0;
574 $total_passed_max = 0;
575 $total_passed_time = 0;
576 foreach ($foundParticipants as
$userdata) {
579 $total_passed_reached +=
$userdata->getReached();
580 $total_passed_max +=
$userdata->getMaxpoints();
581 $total_passed_time +=
$userdata->getTimeOfWork();
584 $average_passed_reached = $total_passed ? $total_passed_reached / $total_passed : 0;
585 $average_passed_max = $total_passed ? $total_passed_max / $total_passed : 0;
586 $average_passed_time = $total_passed ? $total_passed_time / $total_passed : 0;
587 array_push(
$data, array(
588 'result' => $this->lng->txt(
"tst_eval_total_passed"),
589 'value' => $total_passed
591 array_push(
$data, array(
592 'result' => $this->lng->txt(
"tst_eval_total_passed_average_points"),
593 'value' =>
sprintf(
"%2.2f", $average_passed_reached) .
" " . strtolower($this->lng->txt(
"of")) .
" " .
sprintf(
"%2.2f", $average_passed_max)
595 $average_time = $average_passed_time;
596 $diff_seconds = $average_time;
597 $diff_hours = floor($diff_seconds/3600);
598 $diff_seconds -= $diff_hours * 3600;
599 $diff_minutes = floor($diff_seconds/60);
600 $diff_seconds -= $diff_minutes * 60;
601 array_push(
$data, array(
602 'result' => $this->lng->txt(
"tst_eval_total_passed_average_time"),
603 'value' =>
sprintf(
"%02d:%02d:%02d", $diff_hours, $diff_minutes, $diff_seconds)
607 include_once
"./Modules/Test/classes/tables/class.ilTestAggregatedResultsTableGUI.php";
609 $table_gui->setData(
$data);
610 $this->tpl->setVariable(
'AGGREGATED_RESULTS', $table_gui->getHTML());
613 foreach ($eval->getQuestionTitles() as $question_id => $question_title) {
617 foreach ($foundParticipants as
$userdata) {
620 $question =&
$userdata->getPass(
$i)->getAnsweredQuestionByQuestionId($question_id);
621 if (is_array($question)) {
623 $reached += $question[
"reached"];
624 $max += $question[
"points"];
629 $percent = $max ? $reached/$max * 100.0 : 0;
631 $this->ctrl->setParameter($this,
"qid", $question_id);
633 $points_reached = ($answered ? $reached / $answered : 0);
634 $points_max = ($answered ? $max / $answered : 0);
638 'qid' => $question_id,
639 'title' => $question_title,
640 'points' => $points_reached,
641 'points_reached' => $points_reached,
642 'points_max' => $points_max,
643 'percentage' => (
float) $percent,
644 'answers' => $answered
648 include_once
"./Modules/Test/classes/tables/class.ilTestAverageReachedPointsTableGUI.php";
650 $table_gui->setData(
$rows);
651 $this->tpl->setVariable(
'TBL_AVG_REACHED', $table_gui->getHTML());
660 if (array_key_exists(
"g_filterby",
$_GET)) {
661 $filterby =
$_GET[
"g_filterby"];
665 if (array_key_exists(
"g_userfilter",
$_GET)) {
666 $filtertext =
$_GET[
"g_userfilter"];
670 if (array_key_exists(
"g_passedonly",
$_GET)) {
671 if (
$_GET[
"g_passedonly"] == 1) {
676 require_once
'Modules/Test/classes/class.ilTestExportFactory.php';
679 switch (
$_POST[
"export_type"]) {
681 $expFactory->getExporter(
'results')->exportToExcel(
690 $expFactory->getExporter(
'results')->exportToCSV(
700 $this->ctrl->setParameterByClass(
"iltestcertificategui",
"g_passedonly",
"1");
702 if (strlen($filtertext)) {
703 $this->ctrl->setParameterByClass(
"iltestcertificategui",
"g_userfilter", $filtertext);
705 $this->ctrl->redirect($this,
"exportCertificate");
717 require_once
'Modules/Test/classes/class.ilTestExportFactory.php';
719 $exportObj = $expFactory->getExporter(
'aggregated');
721 switch (
$_POST[
"export_type"]) {
723 $exportObj->exportToExcel($deliver =
true);
726 $exportObj->exportToCSV($deliver =
true);
741 include_once
"./Services/Utilities/classes/class.ilUtil.php";
742 include_once
"./Services/Certificate/classes/class.ilCertificate.php";
743 include_once
"./Modules/Test/classes/class.ilTestCertificateAdapter.php";
746 $total_users = array();
747 $total_users =&$this->
object->evalTotalPersonsArray();
748 if (count($total_users)) {
749 foreach ($total_users as $active_id =>
$name) {
750 $user_id = $this->
object->_getUserIdFromActiveId($active_id);
753 "active_id" => $active_id,
754 "userfilter" => $userfilter,
755 "passedonly" => $passedonly
763 $zipArchive =
$certificate->zipCertificatesInArchiveDirectory($archive_dir,
true);
775 if ($original_id > 0) {
791 global $ilTabs, $ilAccess, $ilObjDataCache;
793 if (!$ilAccess->checkAccess(
'write',
'', $this->ref_id)) {
796 $this->ctrl->redirectByClass(
'ilObjTestGUI',
'infoScreen');
799 $this->ctrl->saveParameter($this,
"active_id");
800 $active_id = (int)
$_GET[
"active_id"];
801 $testSession = $this->testSessionFactory->getSession($active_id);
804 if ($testSession->getTestId() != $this->
object->getTestId()) {
806 $this->ctrl->redirectByClass(
'ilObjTestGUI',
'infoScreen');
809 $this->ctrl->saveParameter($this,
"pass");
812 if (isset(
$_GET[
'statistics']) &&
$_GET[
'statistics'] == 1) {
813 $this->ctrl->setParameterByClass(
"ilTestEvaluationGUI",
"active_id", $active_id);
814 $this->ctrl->saveParameter($this,
'statistics');
816 $ilTabs->setBackTarget(
817 $this->lng->txt(
'back'),
818 $this->ctrl->getLinkTargetByClass(
'ilTestEvaluationGUI',
'detailedEvaluation')
820 } elseif ($this->object->getNrOfTries() == 1) {
821 $ilTabs->setBackTarget(
822 $this->lng->txt(
'back'),
823 $this->ctrl->getLinkTargetByClass(
'ilobjtestgui',
'participants')
826 $ilTabs->setBackTarget(
827 $this->lng->txt(
'tst_results_back_overview'),
828 $this->ctrl->getLinkTarget($this,
'outParticipantsResultsOverview')
834 require_once
'Services/PDFGeneration/classes/class.ilPDFGeneration.php';
838 require_once
'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
841 $objectivesList =
null;
844 $testSequence = $this->testSequenceFactory->getSequenceByActiveIdAndPass($active_id,
$pass);
845 $testSequence->loadFromDb();
846 $testSequence->loadQuestions();
848 require_once
'Modules/Course/classes/Objectives/class.ilLOTestQuestionAdapter.php';
852 $objectivesList->loadObjectivesTitles();
854 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
855 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
856 $testResultHeaderLabelBuilder->setTestObjId($this->object->getId());
857 $testResultHeaderLabelBuilder->setTestRefId($this->object->getRefId());
858 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
864 $overviewTableGUI->setTitle($testResultHeaderLabelBuilder->getPassDetailsHeaderLabel(
$pass + 1));
866 $user_id = $this->
object->_getUserIdFromActiveId($active_id);
868 $template =
new ilTemplate(
"tpl.il_as_tst_pass_details_overview_participants.html",
true,
true,
"Modules/Test");
872 $this->ctrl->setParameter($this,
'pdf',
'1');
873 $toolbar->setPdfExportLinkTarget($this->ctrl->getLinkTarget($this,
'outParticipantsPassDetails'));
874 $this->ctrl->setParameter($this,
'pdf',
'');
876 if (isset(
$_GET[
'show_best_solutions'])) {
877 $_SESSION[
'tst_results_show_best_solutions'] =
true;
878 } elseif (isset(
$_GET[
'hide_best_solutions'])) {
879 $_SESSION[
'tst_results_show_best_solutions'] =
false;
880 } elseif (!isset(
$_SESSION[
'tst_results_show_best_solutions'])) {
881 $_SESSION[
'tst_results_show_best_solutions'] =
false;
884 if (
$_SESSION[
'tst_results_show_best_solutions']) {
885 $this->ctrl->setParameter($this,
'hide_best_solutions',
'1');
886 $toolbar->setHideBestSolutionsLinkTarget($this->ctrl->getLinkTarget($this,
'outParticipantsPassDetails'));
887 $this->ctrl->setParameter($this,
'hide_best_solutions',
'');
889 $this->ctrl->setParameter($this,
'show_best_solutions',
'1');
890 $toolbar->setShowBestSolutionsLinkTarget($this->ctrl->getLinkTarget($this,
'outParticipantsPassDetails'));
891 $this->ctrl->setParameter($this,
'show_best_solutions',
'');
895 $template->setVariable(
'RESULTS_TOOLBAR', $this->ctrl->getHTML($toolbar));
899 $gradingMessageBuilder->buildList();
901 $template->setCurrentBlock(
'grading_message');
902 $template->setVariable(
'GRADING_MESSAGE', $gradingMessageBuilder->getList());
906 $list_of_answers = $this->
getPassListOfAnswers($result_array, $active_id,
$pass,
$_SESSION[
'tst_results_show_best_solutions'],
false,
false,
false,
true, $objectivesList, $testResultHeaderLabelBuilder);
907 $template->setVariable(
"LIST_OF_ANSWERS", $list_of_answers);
908 $template->setVariable(
"PASS_DETAILS", $this->ctrl->getHTML($overviewTableGUI));
911 $template->setVariable(
"USER_DATA", $user_data);
913 $uname = $this->
object->userLookupFullName($user_id);
914 $template->setVariable(
"TEXT_HEADING",
sprintf($this->lng->txt(
"tst_result_user_name_pass"),
$pass + 1, $uname));
916 $template->setVariable(
"TEXT_RESULTS", $testResultHeaderLabelBuilder->getPassDetailsHeaderLabel(
$pass + 1));
919 $template->setVariable(
"FORMACTION", $this->ctrl->getFormAction($this));
924 if ($this->object->getShowSolutionAnswersOnly()) {
929 require_once
'Modules/Test/classes/class.ilTestPDFGenerator.php';
932 $this->tpl->setVariable(
"ADM_CONTENT",
$template->get());
943 global $ilTabs, $ilAccess, $ilObjDataCache;
945 if (!$ilAccess->checkAccess(
'write',
'', $this->ref_id)) {
948 $this->ctrl->redirectByClass(
'ilObjTestGUI',
'infoScreen');
951 $active_id = (int)
$_GET[
"active_id"];
952 $testSession = $this->testSessionFactory->getSession($active_id);
955 if ($testSession->getTestId() != $this->
object->getTestId()) {
957 $this->ctrl->redirectByClass(
'ilObjTestGUI',
'infoScreen');
960 if ($this->object->getNrOfTries() == 1) {
961 $this->ctrl->setParameter($this,
"active_id", $active_id);
963 $this->ctrl->redirect($this,
"outParticipantsPassDetails");
966 $ilTabs->setBackTarget(
967 $this->lng->txt(
'back'),
968 $this->ctrl->getLinkTargetByClass(
'ilobjtestgui',
'participants')
973 require_once
'Services/PDFGeneration/classes/class.ilPDFGeneration.php';
977 $template =
new ilTemplate(
"tpl.il_as_tst_pass_overview_participants.html",
true,
true,
"Modules/Test");
981 $this->ctrl->setParameter($this,
'pdf',
'1');
982 $toolbar->setPdfExportLinkTarget($this->ctrl->getLinkTarget($this, __FUNCTION__));
983 $this->ctrl->setParameter($this,
'pdf',
'');
986 $template->setVariable(
'RESULTS_TOOLBAR', $this->ctrl->getHTML($toolbar));
988 require_once
'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
991 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
992 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
993 $testResultHeaderLabelBuilder->setTestObjId($this->object->getId());
994 $testResultHeaderLabelBuilder->setTestRefId($this->object->getRefId());
995 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
998 require_once
'Modules/Test/classes/class.ilTestPassesSelector.php';
1000 $testPassesSelector->setActiveId($testSession->getActiveId());
1001 $testPassesSelector->setLastFinishedPass($testSession->getLastFinishedPass());
1004 $passOverViewTableGUI->setActiveId($testSession->getActiveId());
1005 $passOverViewTableGUI->setResultPresentationEnabled(
true);
1006 $passOverViewTableGUI->setPassDetailsCommand(
'outParticipantsPassDetails');
1007 $passOverViewTableGUI->init();
1008 $passOverViewTableGUI->setData($this->
getPassOverviewTableData($testSession, $testPassesSelector->getExistingPasses(),
true,
true));
1009 $passOverViewTableGUI->setTitle($testResultHeaderLabelBuilder->getPassOverviewHeaderLabel());
1010 $template->setVariable(
"PASS_OVERVIEW", $passOverViewTableGUI->getHTML());
1014 $gradingMessageBuilder->buildList();
1016 $template->setCurrentBlock(
'grading_message');
1017 $template->setVariable(
'GRADING_MESSAGE', $gradingMessageBuilder->getList());
1022 $user_id = $this->
object->_getUserIdFromActiveId($active_id);
1025 if ($this->object->getAnonymity()) {
1026 $template->setVariable(
"TEXT_HEADING", $this->lng->txt(
"tst_result"));
1028 $uname = $this->
object->userLookupFullName($user_id,
true);
1029 $template->setVariable(
"TEXT_HEADING",
sprintf($this->lng->txt(
"tst_result_user_name"), $uname));
1030 $template->setVariable(
"USER_DATA", $user_data);
1038 if ($this->object->getShowSolutionAnswersOnly()) {
1042 if (array_key_exists(
"pdf",
$_GET) && (
$_GET[
"pdf"] == 1)) {
1046 $filename =
$name[
'lastname'] .
'_' .
$name[
'firstname'] .
'_' .
$name[
'login'] .
'__' . $this->
object->getTitleFilenameCompliant();
1047 require_once
'Modules/Test/classes/class.ilTestPDFGenerator.php';
1052 $this->tpl->setVariable(
"ADM_CONTENT",
$template->get());
1059 $tableGUI->initFilter();
1060 $tableGUI->resetOffset();
1061 $tableGUI->writeFilterToSession();
1068 $tableGUI->initFilter();
1069 $tableGUI->resetOffset();
1070 $tableGUI->resetFilter();
1077 $tableGUI->initFilter();
1078 $tableGUI->resetOffset();
1079 $tableGUI->writeFilterToSession();
1086 $tableGUI->initFilter();
1087 $tableGUI->resetOffset();
1088 $tableGUI->resetFilter();
1099 global $ilTabs,
$ilUser, $ilObjDataCache;
1103 if ($this->object->getNrOfTries() == 1) {
1104 $ilTabs->setBackTarget($this->lng->txt(
'tst_results_back_introduction'), $this->ctrl->getLinkTargetByClass(
'ilObjTestGUI',
'infoScreen'));
1106 $ilTabs->setBackTarget($this->lng->txt(
'tst_results_back_overview'), $this->ctrl->getLinkTarget($this,
'outUserResultsOverview'));
1109 $testSession = $this->testSessionFactory->getSession();
1111 if (!$this->object->getShowPassDetails()) {
1112 #$executable = $this->object->isExecutable($testSession, $ilUser->getId());
1114 #if($executable["executable"])
1116 $this->ctrl->redirectByClass(
"ilobjtestgui",
"infoScreen");
1120 $active_id = $testSession->getActiveId();
1121 $user_id = $testSession->getUserId();
1123 $this->ctrl->saveParameter($this,
"pass");
1128 require_once
'Services/PDFGeneration/classes/class.ilPDFGeneration.php';
1132 require_once
'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
1135 $objectivesList =
null;
1137 $considerHiddenQuestions =
true;
1138 $considerOptionalQuestions =
true;
1141 $considerHiddenQuestions =
false;
1143 $testSequence = $this->testSequenceFactory->getSequenceByActiveIdAndPass($active_id,
$pass);
1144 $testSequence->loadFromDb();
1145 $testSequence->loadQuestions();
1147 if ($this->object->isRandomTest() && !$testSequence->isAnsweringOptionalQuestionsConfirmed()) {
1148 $considerOptionalQuestions =
false;
1151 require_once
'Modules/Course/classes/Objectives/class.ilLOTestQuestionAdapter.php';
1155 $objectivesList->loadObjectivesTitles();
1157 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
1158 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
1159 $testResultHeaderLabelBuilder->setTestObjId($this->object->getId());
1160 $testResultHeaderLabelBuilder->setTestRefId($this->object->getRefId());
1161 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
1166 $command_solution_details =
"";
1167 if ($this->object->getShowSolutionDetails()) {
1168 $command_solution_details =
"outCorrectSolution";
1170 $questionAnchorNav = $this->
object->canShowSolutionPrintview();
1172 $tpl =
new ilTemplate(
'tpl.il_as_tst_pass_details_overview_participants.html',
true,
true,
"Modules/Test");
1177 $this->ctrl->setParameter($this,
'pdf',
'1');
1178 $toolbar->setPdfExportLinkTarget($this->ctrl->getLinkTarget($this,
'outUserPassDetails'));
1179 $this->ctrl->setParameter($this,
'pdf',
'');
1181 include_once
'./Services/WebServices/RPC/classes/class.ilRPCServerSettings.php';
1182 if ($this->object->canShowCertificate($testSession, $user_id, $active_id)) {
1183 $toolbar->setCertificateLinkTarget($this->ctrl->getLinkTarget($this,
'outCertificate'));
1188 $tpl->setVariable(
'RESULTS_TOOLBAR', $this->ctrl->getHTML($toolbar));
1190 $tpl->setCurrentBlock(
'signature');
1192 $tpl->parseCurrentBlock();
1194 if ($this->object->isShowExamIdInTestResultsEnabled()) {
1195 $tpl->setCurrentBlock(
'exam_id');
1197 $testSession->getActiveId(),
1200 $tpl->setVariable(
'EXAM_ID_TXT', $this->lng->txt(
'exam_id'));
1201 $tpl->parseCurrentBlock();
1208 $gradingMessageBuilder->buildMessage();
1209 $gradingMessageBuilder->sendMessage();
1211 #$template->setCurrentBlock('grading_message');
1212 #$template->setVariable('GRADING_MESSAGE', );
1213 #$template->parseCurrentBlock();
1221 "outUserPassDetails",
1222 $command_solution_details,
1226 $overviewTableGUI->setTitle($testResultHeaderLabelBuilder->getPassDetailsHeaderLabel(
$pass + 1));
1227 $tpl->setVariable(
"PASS_DETAILS", $this->ctrl->getHTML($overviewTableGUI));
1229 if ($this->object->canShowSolutionPrintview()) {
1234 $this->object->getShowSolutionListComparison(),
1240 $testResultHeaderLabelBuilder
1242 $tpl->setVariable(
"LIST_OF_ANSWERS", $list_of_answers);
1245 $tpl->setVariable(
"TEXT_RESULTS", $testResultHeaderLabelBuilder->getPassDetailsHeaderLabel(
$pass+1));
1246 $tpl->setVariable(
"FORMACTION", $this->ctrl->getFormAction($this));
1248 $uname = $this->
object->userLookupFullName($user_id,
true);
1251 if ($this->object->getAnonymity()) {
1252 $tpl->setVariable(
"TEXT_HEADING", $this->lng->txt(
"tst_result_pass"));
1254 $tpl->setVariable(
"TEXT_HEADING",
sprintf($this->lng->txt(
"tst_result_user_name_pass"),
$pass + 1, $uname));
1255 $tpl->setVariable(
"USER_DATA", $user_data);
1262 if ($this->object->getShowSolutionAnswersOnly()) {
1267 require_once
'Modules/Test/classes/class.ilTestPDFGenerator.php';
1270 $this->tpl->setContent(
$tpl->get());
1281 global
$ilUser, $ilTabs, $ilObjDataCache;
1285 $ilTabs->setBackTarget(
1286 $this->lng->txt(
'tst_results_back_introduction'),
1287 $this->ctrl->getLinkTargetByClass(
'ilObjTestGUI',
'infoScreen')
1290 $testSession = $this->testSessionFactory->getSession();
1291 $active_id = $testSession->getActiveId();
1293 $uname = $this->
object->userLookupFullName($user_id,
true);
1295 if (!$this->object->canShowTestResults($testSession)) {
1296 $this->ctrl->redirectByClass(
"ilobjtestgui",
"infoScreen");
1301 require_once
'Services/PDFGeneration/classes/class.ilPDFGeneration.php';
1305 $templatehead =
new ilTemplate(
"tpl.il_as_tst_results_participants.html",
true,
true,
"Modules/Test");
1306 $template =
new ilTemplate(
"tpl.il_as_tst_results_participant.html",
true,
true,
"Modules/Test");
1310 $this->ctrl->setParameter($this,
'pdf',
'1');
1311 $toolbar->setPdfExportLinkTarget($this->ctrl->getLinkTarget($this,
'outUserResultsOverview'));
1312 $this->ctrl->setParameter($this,
'pdf',
'');
1314 include_once
'./Services/WebServices/RPC/classes/class.ilRPCServerSettings.php';
1315 if ($this->object->canShowCertificate($testSession, $user_id, $active_id)) {
1316 $toolbar->setCertificateLinkTarget($this->ctrl->getLinkTarget($this,
'outCertificate'));
1321 $templatehead->setVariable(
'RESULTS_TOOLBAR', $this->ctrl->getHTML($toolbar));
1323 $passDetailsEnabled = $this->
object->getShowPassDetails();
1324 #if (!$passDetailsEnabled)
1326 # $executable = $this->object->isExecutable($testSession, $ilUser->getId());
1327 # if (!$executable["executable"]) $passDetailsEnabled = true;
1330 require_once
'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
1333 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
1334 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
1335 $testResultHeaderLabelBuilder->setTestObjId($this->object->getId());
1336 $testResultHeaderLabelBuilder->setTestRefId($this->object->getRefId());
1337 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
1340 $template->setCurrentBlock(
"pass_overview");
1342 require_once
'Modules/Test/classes/class.ilTestPassesSelector.php';
1344 $testPassesSelector->setActiveId($testSession->getActiveId());
1345 $testPassesSelector->setLastFinishedPass($testSession->getLastFinishedPass());
1348 $passOverViewTableGUI->setActiveId($testSession->getActiveId());
1349 $passOverViewTableGUI->setResultPresentationEnabled(
true);
1350 if ($passDetailsEnabled) {
1351 $passOverViewTableGUI->setPassDetailsCommand(
'outUserPassDetails');
1353 if ($this->object->isPassDeletionAllowed()) {
1354 $passOverViewTableGUI->setPassDeletionCommand(
'confirmDeletePass');
1356 $passOverViewTableGUI->init();
1357 $passOverViewTableGUI->setData($this->
getPassOverviewTableData($testSession, $testPassesSelector->getReportablePasses(),
true));
1358 $passOverViewTableGUI->setTitle($testResultHeaderLabelBuilder->getPassOverviewHeaderLabel());
1359 $overview = $passOverViewTableGUI->getHTML();
1361 require_once
'Modules/Test/classes/class.ilTestLearningObjectivesStatusGUI.php';
1364 $loStatus->setUsrId($testSession->getUserId());
1365 $overview .=
"<br />" . $loStatus->getHTML();
1367 $template->setVariable(
"PASS_OVERVIEW", $overview);
1372 $gradingMessageBuilder->buildMessage();
1373 $gradingMessageBuilder->sendMessage();
1375 #$template->setCurrentBlock('grading_message');
1376 #$template->setVariable('GRADING_MESSAGE', );
1377 #$template->parseCurrentBlock();
1383 if ($this->object->getAnonymity()) {
1384 $template->setVariable(
"TEXT_HEADING", $this->lng->txt(
"tst_result"));
1386 $template->setVariable(
"TEXT_HEADING",
sprintf($this->lng->txt(
"tst_result_user_name"), $uname));
1387 $template->setVariable(
"USER_DATA", $user_data);
1392 if ($this->object->getShowSolutionAnswersOnly()) {
1395 $templatehead->setVariable(
"RESULTS_PARTICIPANT",
$template->get());
1399 require_once
'Modules/Test/classes/class.ilTestPDFGenerator.php';
1402 $this->tpl->setContent($templatehead->get());
1415 global
$ilUser, $ilObjDataCache;
1417 if (!$this->object->getShowSolutionPrintview()) {
1419 $this->ctrl->redirectByClass(
"ilobjtestgui",
"infoScreen");
1422 $template =
new ilTemplate(
"tpl.il_as_tst_info_list_of_answers.html",
true,
true,
"Modules/Test");
1425 if (array_key_exists(
"pass",
$_GET)) {
1426 if (strlen(
$_GET[
"pass"])) {
1432 $testSession = $this->testSessionFactory->getSession();
1433 $active_id = $testSession->getActiveId();
1436 if ($this->object->getNrOfTries() == 1) {
1439 $template->setVariable(
"TEXT_RESULTS", $this->lng->txt(
"tst_passes"));
1441 require_once
'Modules/Test/classes/class.ilTestPassesSelector.php';
1443 $testPassesSelector->setActiveId($testSession->getActiveId());
1444 $testPassesSelector->setLastFinishedPass($testSession->getLastFinishedPass());
1447 $passOverViewTableGUI->setActiveId($testSession->getActiveId());
1448 $passOverViewTableGUI->setResultPresentationEnabled(
false);
1449 $passOverViewTableGUI->setPassDetailsCommand(
'outUserListOfAnswerPasses');
1450 $passOverViewTableGUI->init();
1451 $passOverViewTableGUI->setData($this->
getPassOverviewTableData($testSession, $testPassesSelector->getClosedPasses(),
false));
1452 $template->setVariable(
"PASS_OVERVIEW", $passOverViewTableGUI->getHTML());
1456 if (strlen(
$pass)) {
1457 require_once
'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
1460 $objectivesList =
null;
1463 $testSequence = $this->testSequenceFactory->getSequenceByActiveIdAndPass($active_id,
$pass);
1464 $testSequence->loadFromDb();
1465 $testSequence->loadQuestions();
1467 require_once
'Modules/Course/classes/Objectives/class.ilLOTestQuestionAdapter.php';
1471 $objectivesList->loadObjectivesTitles();
1473 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
1474 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
1475 $testResultHeaderLabelBuilder->setTestObjId($this->object->getId());
1476 $testResultHeaderLabelBuilder->setTestRefId($this->object->getRefId());
1477 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
1480 $result_array = $this->
object->getTestResult(
1488 $user_id =&$this->
object->_getUserIdFromActiveId($active_id);
1489 $showAllAnswers =
true;
1490 if ($this->object->isExecutable($testSession, $user_id)) {
1491 $showAllAnswers =
false;
1494 $answers = $this->
getPassListOfAnswers($result_array, $active_id,
$pass,
false, $showAllAnswers,
false,
false,
false, $objectivesList, $testResultHeaderLabelBuilder);
1495 $template->setVariable(
"PASS_DETAILS", $answers);
1497 $template->setVariable(
"FORMACTION", $this->ctrl->getFormAction($this));
1498 $template->setVariable(
"BACK_TEXT", $this->lng->txt(
"tst_results_back_introduction"));
1499 $template->setVariable(
"BACK_URL", $this->ctrl->getLinkTargetByClass(
"ilobjtestgui",
"infoScreen"));
1500 $template->setVariable(
"PRINT_TEXT", $this->lng->txt(
"print"));
1501 $template->setVariable(
"PRINT_URL",
"javascript:window.print();");
1504 $template->setVariable(
"USER_DATA", $user_data);
1505 $template->setVariable(
"TEXT_LIST_OF_ANSWERS", $this->lng->txt(
"tst_list_of_answers"));
1506 if (strlen($signature)) {
1507 $template->setVariable(
"SIGNATURE", $signature);
1509 if (!is_null(
$pass) && $this->object->isShowExamIdInTestResultsEnabled()) {
1510 $template->setCurrentBlock(
'exam_id_footer');
1512 $testSession->getActiveId(),
1515 $template->setVariable(
'EXAM_ID_TXT', $this->lng->txt(
'exam_id'));
1518 $this->tpl->setVariable(
"ADM_CONTENT",
$template->get());
1521 if ($this->object->getShowSolutionAnswersOnly()) {
1535 if (array_key_exists(
"pass",
$_GET) && (strlen(
$_GET[
"pass"]) > 0)) {
1536 $this->ctrl->saveParameter($this,
"pass");
1537 $this->ctrl->saveParameter($this,
"active_id");
1538 $this->outTestResults(
false,
$_GET[
"pass"]);
1540 $this->outTestResults(
false);
1552 if ((!$ilAccess->checkAccess(
"tst_statistics",
"", $this->ref_id)) && (!$ilAccess->checkAccess(
"write",
"", $this->ref_id))) {
1555 $this->ctrl->redirectByClass(
"ilobjtestgui",
"infoScreen");
1558 $data =&$this->
object->getCompleteEvaluationData();
1559 $color_class = array(
"tblrow1",
"tblrow2");
1561 $this->tpl->addBlockFile(
"ADM_CONTENT",
"adm_content",
"tpl.il_as_tst_eval_single_answers.html",
"Modules/Test");
1562 $foundParticipants =&
$data->getParticipants();
1563 if (count($foundParticipants) == 0) {
1568 foreach (
$data->getQuestionTitles() as $question_id => $question_title) {
1572 foreach ($foundParticipants as
$userdata) {
1575 $question =&
$userdata->getPass(
$pass)->getAnsweredQuestionByQuestionId($question_id);
1576 if (is_array($question)) {
1582 $this->ctrl->setParameter($this,
"qid", $question_id);
1583 require_once
'./Modules/TestQuestionPool/classes/class.assQuestion.php';
1587 if ($question_object->hasFileUploads($this->object->getTestId())) {
1588 $download =
"<a href=\"" . $this->ctrl->getLinkTarget($this,
"exportFileUploadsForAllParticipants") .
"\">" . $this->lng->txt(
"download") .
"</a>";
1594 'qid' => $question_id,
1595 'question_title' => $question_title,
1596 'number_of_answers' => $answered,
1597 'output' =>
"<a href=\"" . $this->ctrl->getLinkTarget($this,
"exportQuestionForAllParticipants") .
"\">" . $this->lng->txt(
"pdf_export") .
"</a>",
1598 'file_uploads' => $download
1603 require_once
'./Modules/Test/classes/tables/class.ilResultsByQuestionTableGUI.php';
1605 $table_gui->setTitle($this->lng->txt(
"tst_answered_questions_test"));
1606 $table_gui->setData(
$rows);
1608 $this->tpl->setVariable(
"TBL_SINGLE_ANSWERS", $table_gui->getHTML());
1610 $this->tpl->setVariable(
"TBL_SINGLE_ANSWERS", $this->lng->txt(
"adm_no_special_users"));
1620 $testSession = $this->testSessionFactory->getSession();
1622 require_once
'./Services/Certificate/classes/class.ilCertificate.php';
1623 require_once
'./Modules/Test/classes/class.ilTestCertificateAdapter.php';
1627 "active_id" => $testSession->getActiveId(),
1635 if (isset(
$_GET[
'context']) && strlen(
$_GET[
'context'])) {
1636 $context =
$_GET[
'context'];
1641 if (!$this->object->isPassDeletionAllowed() && !$this->object->isDynamicTest()) {
1645 require_once
'Modules/Test/classes/confirmations/class.ilTestPassDeletionConfirmationGUI.php';
1648 $confirm->build((
int)
$_GET[
'active_id'], (
int)
$_GET[
'pass'], $context);
1651 $tpl->setContent($this->ctrl->getHTML($confirm));
1661 require_once
'Modules/Test/classes/confirmations/class.ilTestPassDeletionConfirmationGUI.php';
1666 $this->ctrl->redirect($this,
'outUserResultsOverview');
1671 $this->ctrl->redirectByClass(
'ilObjTestGUI',
'infoScreen');
1676 $this->ctrl->redirectByClass(
'ilTestPlayerDynamicQuestionSetGUI',
'startTest');
1680 public function performDeletePass()
1682 if (isset(
$_POST[
'context']) && strlen(
$_POST[
'context'])) {
1683 $context =
$_POST[
'context'];
1688 if (!$this->object->isPassDeletionAllowed() && !$this->object->isDynamicTest()) {
1697 if (isset(
$_POST[
'active_id']) && (
int)
$_POST[
'active_id']) {
1698 $active_fi =
$_POST[
'active_id'];
1701 if (isset(
$_POST[
'pass']) && is_numeric(
$_POST[
'pass'])) {
1705 if (is_null($active_fi) || is_null(
$pass)) {
1706 $this->ctrl->redirect($this,
'outUserResultsOverview');
1709 if (!$this->object->isDynamicTest() &&
$pass == $this->object->_getResultPass($active_fi)) {
1710 $this->ctrl->redirect($this,
'outUserResultsOverview');
1715 SELECT tst_active.tries, tst_active.last_finished_pass, tst_sequence.pass
1717 LEFT JOIN tst_sequence
1718 ON tst_sequence.active_fi = tst_active.active_id
1719 AND tst_sequence.pass = tst_active.tries
1720 WHERE tst_active.active_id = {$ilDB->quote($active_fi, 'integer')}
1725 $tries =
$row[
'tries'];
1726 $lastFinishedPass = is_numeric(
$row[
'last_finished_pass']) ?
$row[
'last_finished_pass'] : -1;
1728 if (
$pass < $lastFinishedPass) {
1729 $isActivePass =
false;
1730 $must_renumber =
true;
1731 } elseif (
$pass == $lastFinishedPass) {
1732 $isActivePass =
false;
1734 if ($tries ==
$row[
'pass']) {
1735 $must_renumber =
true;
1737 $must_renumber =
false;
1740 $isActivePass =
true;
1741 $must_renumber =
false;
1743 throw new ilTestException(
'This should not happen, please contact Bjoern Heyser to clean up this pass salad!');
1746 if (!$this->object->isDynamicTest() && $isActivePass) {
1747 $this->ctrl->redirect($this,
'outUserResultsOverview');
1751 ($lastFinishedPass == 0 && $tries == 1 && $tries !=
$row[
'pass'])
1752 || ($isActivePass ==
true)
1765 WHERE active_id = ' .
$ilDB->quote($active_fi,
'integer')
1767 } elseif (!$isActivePass) {
1770 SET tries = ' .
$ilDB->quote($tries-1,
'integer') .
',
1771 last_finished_pass = ' .
$ilDB->quote($lastFinishedPass-1,
'integer') .
'
1772 WHERE active_id = ' .
$ilDB->quote($active_fi,
'integer')
1779 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
1780 AND pass = ' .
$ilDB->quote(
$pass,
'integer')
1783 if ($must_renumber) {
1785 'UPDATE tst_manual_fb
1787 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
1788 AND pass > ' .
$ilDB->quote(
$pass,
'integer')
1797 FROM tst_pass_result
1798 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
1799 AND pass = ' .
$ilDB->quote(
$pass,
'integer')
1802 if ($must_renumber) {
1804 'UPDATE tst_pass_result
1806 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
1807 AND pass > ' .
$ilDB->quote(
$pass,
'integer')
1820 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
1821 AND pass = ' .
$ilDB->quote(
$pass,
'integer')
1824 if ($must_renumber) {
1826 'UPDATE tst_sequence
1828 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
1829 AND pass > ' .
$ilDB->quote(
$pass,
'integer')
1833 if ($this->object->isDynamicTest()) {
1835 'tst_seq_qst_tracking',
'tst_seq_qst_answstatus',
'tst_seq_qst_postponed',
'tst_seq_qst_checked'
1838 foreach ($tables as
$table) {
1841 WHERE active_fi = {$ilDB->quote($active_fi, 'integer')}
1842 AND pass = {$ilDB->quote($pass, 'integer')}
1845 if ($must_renumber) {
1849 WHERE active_fi = {$ilDB->quote($active_fi, 'integer')}
1850 AND pass > {$ilDB->quote($pass, 'integer')}
1860 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
1861 AND pass = ' .
$ilDB->quote(
$pass,
'integer')
1864 if ($must_renumber) {
1866 'UPDATE tst_solutions
1868 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
1869 AND pass > ' .
$ilDB->quote(
$pass,
'integer')
1876 FROM tst_test_result
1877 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
1878 AND pass = ' .
$ilDB->quote(
$pass,
'integer')
1881 if ($must_renumber) {
1883 'UPDATE tst_test_result
1885 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
1886 AND pass > ' .
$ilDB->quote(
$pass,
'integer')
1896 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
1897 AND pass = ' .
$ilDB->quote(
$pass,
'integer')
1900 if ($must_renumber) {
1904 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
1905 AND pass > ' .
$ilDB->quote(
$pass,
'integer')
1909 require_once
'Modules/Test/classes/class.ilObjAssessmentFolder.php';
1915 require_once
'./Modules/TestQuestionPool/classes/class.assQuestion.php';
1918 if ($this->object->isDynamicTest()) {
1919 require_once
'Modules/Test/classes/tables/class.ilTestDynamicQuestionSetStatisticTableGUI.php';
1928 global
$ilDB, $ilPluginAdmin;
1930 $resultData = $this->
object->getTestResult($active_id,
$pass,
false, $considerHiddenQuestions);
1931 $questionIds = array();
1932 foreach ($resultData as $resultItemKey => $resultItemValue) {
1933 if ($resultItemKey ===
'test' || $resultItemKey ===
'pass') {
1937 $questionIds[] = $resultItemValue[
'qid'];
1941 $table_gui->initFilter();
1943 require_once
'Modules/TestQuestionPool/classes/class.ilAssQuestionList.php';
1946 $questionList->setIncludeQuestionIdsFilter($questionIds);
1947 $questionList->setQuestionInstanceTypeFilter(
null);
1949 foreach ($table_gui->getFilterItems() as $item) {
1950 if (substr($item->getPostVar(), 0, strlen(
'tax_')) ==
'tax_') {
1951 $v = $item->getValue();
1953 if (is_array($v) && count($v) && !(
int) $v[0]) {
1957 $taxId = substr($item->getPostVar(), strlen(
'tax_'));
1958 $questionList->addTaxonomyFilter($taxId, $item->getValue(), $this->object->getId(),
'tst');
1959 } elseif ($item->getValue() !==
false) {
1960 $questionList->addFieldFilter($item->getPostVar(), $item->getValue());
1964 $questionList->load();
1966 $filteredTestResult = array();
1968 foreach ($resultData as $resultItemKey => $resultItemValue) {
1969 if ($resultItemKey ===
'test' || $resultItemKey ===
'pass') {
1973 if (!$questionList->isInList($resultItemValue[
'qid'])) {
1977 $filteredTestResult[] = $resultItemValue;
1980 return $filteredTestResult;
1985 require_once
'Services/Utilities/classes/class.ilConfirmationGUI.php';
1987 $cgui->setFormAction($this->ctrl->getFormAction($this,
"participants"));
1988 $cgui->setHeaderText($this->lng->txt(
"finish_pass_for_user_confirmation"));
1989 $cgui->setCancel($this->lng->txt(
"cancel"),
"redirectBackToParticipantsScreen");
1990 $cgui->setConfirm($this->lng->txt(
"proceed"),
"confirmFinishTestPassForUser");
1991 $this->tpl->setContent($cgui->getHTML());
1996 require_once
'Modules/Test/classes/class.ilTestPassFinishTasks.php';
1997 $active_id = (int)
$_GET[
"active_id"];
2004 require_once
'Services/Utilities/classes/class.ilConfirmationGUI.php';
2006 $cgui->setFormAction($this->ctrl->getFormAction($this,
"participants"));
2007 $cgui->setHeaderText($this->lng->txt(
"finish_pass_for_all_users"));
2008 $cgui->setCancel($this->lng->txt(
"cancel"),
"redirectBackToParticipantsScreen");
2009 $cgui->setConfirm($this->lng->txt(
"proceed"),
"confirmFinishTestPassForAllUser");
2010 $this->tpl->setContent($cgui->getHTML());
2015 require_once
'Modules/Test/classes/class.ilTestPassFinishTasks.php';
2016 $participants = $this->
object->getTestParticipants();
2017 foreach ($participants as $participant) {
2018 if (array_key_exists(
'unfinished_passes', $participant) && $participant[
'unfinished_passes'] == 1) {
2019 $this->
finishTestPass($participant[
'active_id'], $this->object->getId());
2027 $this->processLockerFactory->setActiveId($active_id);
2028 $processLocker = $this->processLockerFactory->getLocker();
2031 $test_pass_finisher->performFinishTasks($processLocker);
2036 $this->ctrl->redirectByClass(
"ilobjtestgui",
"participants");
sprintf('%.4f', $callTime)
if(!isset( $_REQUEST[ 'ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
An exception for terminatinating execution or to throw for unit testing.
static _updateTestResultCache($active_id, ilAssQuestionProcessLocker $processLocker=null)
@TODO Move this to a proper place.
static _instanciateQuestion($question_id)
Creates an instance of a question with a given question id.
static _isComplete($adapter)
Checks the status of the certificate.
Confirmation screen class.
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false)
Format a date @access public.
@classDescription Date and time handling
TableGUI class for evaluation of all users.
static getInstance(ilTestSession $a_test_session)
This class represents a non editable value in a property form.
static _getLogLanguage()
retrieve the log language for assessment logging
static _enabledAssessmentLogging()
check wether assessment logging is enabled or not
static _getResultPass($active_id)
Retrieves the pass number that should be counted for a given user.
static lookupExamId($active_id, $pass)
static lookupLastTestPassAccess($activeId, $passIndex)
static lookupPassResultsUpdateTimestamp($active_id, $pass)
static _lookupFields($a_user_id)
lookup fields (deprecated; use more specific methods instead)
static _lookupName($a_user_id)
lookup user name
static prepareGeneration()
Prepare the PDF generation This initializes the purpose for MathJax rendering It has to be called bef...
TableGUI class for results by question.
special template class to simplify handling of ITX/PEAR
Test certificate adapter.
Class ilTestDetailedEvaluationStatisticsTableGUI.
Output class for assessment test evaluation.
exportFileUploadsForAllParticipants()
Creates a ZIP file containing all file uploads for a given question in a test.
outCertificate()
Output of a test certificate.
singleResults()
Creates user results for single questions.
outUserPassDetails()
Output of the pass details of an existing test pass for the active test participant.
executeCommand()
execute command
passDetails()
Output of the learners view of an existing test pass.
__construct(ilObjTest $a_object)
ilTestEvaluationGUI constructor
exportCertificate()
Exports the user results as PDF certificates using XSL-FO via XML:RPC calls.
exportAggregatedResults()
Exports the aggregated results.
detailedEvaluation()
Creates the detailed evaluation output for a selected participant.
outUserListOfAnswerPasses()
Output of the pass overview for a user when he/she wants to see his/her list of answers.
finishTestPassForSingleUser()
confirmFinishTestPassForAllUser()
exportQuestionForAllParticipants()
Creates a PDF representation of the answers for a given question in a test.
outUserPassDetailsResetTableFilter()
outParticipantsPassDetails()
Output of the pass details of an existing test pass for the test statistics.
getEvaluationQuestionId($question_id, $original_id="")
Returns the ID of a question for evaluation purposes.
outUserResultsOverview()
Output of the pass overview for a test called by a test participant.
confirmFinishTestPassForUser()
exportEvaluation()
Exports the evaluation data to a selected file format.
getFilteredTestResult($active_id, $pass, $considerHiddenQuestions, $considerOptionalQuestions)
outParticipantsResultsOverview()
Output of the pass overview for a test called from the statistics.
redirectToPassDeletionContext($context)
outParticipantsPassDetailsSetTableFilter()
redirectBackToParticipantsScreen()
outParticipantsPassDetailsResetTableFilter()
finishTestPass($active_id, $obj_id)
outUserPassDetailsSetTableFilter()
Base Exception for all Exceptions relating to Modules/Test.
static generatePDF($pdf_output, $output_mode, $filename=null, $purpose=null)
const PDF_OUTPUT_DOWNLOAD
const CONTEXT_INFO_SCREEN
const CONTEXT_DYN_TEST_PLAYER
const CONTEXT_PASS_OVERVIEW
Class ilTestPassFinishTasks.
Service GUI class for tests.
getGradingMessageBuilder($activeId)
getObjectiveOrientedContainer()
buildPassOverviewTableGUI($targetGUI, $targetCmd='')
populatePassFinishDate($tpl, $passFinishDate)
getResultsSignature()
Returns HTML code for a signature field.
getCommand($cmd)
Retrieves the ilCtrl command.
getQuestionResultForTestUsers($question_id, $test_id)
Creates a HTML representation for the results of a given question in a test.
buildUserTestResultsToolbarGUI()
setContextResultPresentation($contextResultPresentation)
buildQuestionRelatedObjectivesList(ilLOTestQuestionAdapter $objectivesAdapter, ilTestQuestionSequence $testSequence)
getPassOverviewTableData(ilTestSession $testSession, $passes, $withResults)
isGradingMessageRequired()
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)
buildPassDetailsOverviewTableGUI($targetGUI, $targetCMD)
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
static getASCIIFilename($a_filename)
convert utf8 to ascii filename
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
if(@file_exists(dirname(__FILE__).'/lang/eng.php')) $certificate
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
const PDF_USER_RESULT
PDF Purposes.
Interface ilObjFileHandlingQuestionType.
if(empty($password)) $table
if(isset($_POST['submit'])) $form