4 require_once
'./Modules/Test/classes/class.ilTestServiceGUI.php';
5 require_once
'Modules/TestQuestionPool/classes/class.ilAssQuestionHintTracking.php';
43 parent::__construct($a_object);
47 require_once
'Modules/Test/classes/class.ilTestProcessLockerFactory.php';
49 new ilSetting(
'assessment'), $DIC->database()
58 $cmd = $this->ctrl->getCmd();
59 $next_class = $this->ctrl->getNextClass($this);
60 $this->ctrl->saveParameter($this,
"sequence");
61 $this->ctrl->saveParameter($this,
"active_id");
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())
85 array_push($headernames, $this->lng->txt(
"counter"));
89 array_push($headernames, $this->lng->txt(
"name"));
90 array_push($headernames, $this->lng->txt(
"login"));
92 $additionalFields = $this->
object->getEvaluationAdditionalFields();
93 if (count($additionalFields))
95 foreach ($additionalFields as $fieldname)
97 array_push($headernames, $this->lng->txt($fieldname));
100 array_push($headernames, $this->lng->txt(
"tst_reached_points"));
101 array_push($headernames, $this->lng->txt(
"tst_mark"));
102 if ($this->
object->getECTSOutput())
104 array_push($headernames, $this->lng->txt(
"ects_grade"));
106 array_push($headernames, $this->lng->txt(
"tst_answered_questions"));
107 array_push($headernames, $this->lng->txt(
"working_time"));
108 array_push($headernames, $this->lng->txt(
"detailed_evaluation"));
114 $headervars =
array();
115 if ($this->
object->getAnonymity())
117 array_push($headervars,
"counter");
121 array_push($headervars,
"name");
122 array_push($headervars,
"login");
124 array_push($headervars,
"resultspoints");
125 array_push($headervars,
"resultsmarks");
126 if ($this->
object->getECTSOutput())
128 array_push($headervars,
"ects_grade");
130 array_push($headervars,
"qworkedthrough");
131 array_push($headervars,
"timeofwork");
132 array_push($headervars,
"");
138 include_once
"./Modules/Test/classes/tables/class.ilEvaluationAllTableGUI.php";
140 $table_gui->writeFilterToSession();
141 $this->ctrl->redirect($this,
"outEvaluation");
146 include_once
"./Modules/Test/classes/tables/class.ilEvaluationAllTableGUI.php";
148 $table_gui->resetFilter();
149 $this->ctrl->redirect($this,
"outEvaluation");
157 function outEvaluation()
163 global $ilAccess, $ilToolbar;
165 if ((!$ilAccess->checkAccess(
"tst_statistics",
"", $this->ref_id)) && (!$ilAccess->checkAccess(
"write",
"", $this->ref_id)))
169 $this->ctrl->redirectByClass(
"ilobjtestgui",
"infoScreen");
172 include_once
"./Modules/Test/classes/tables/class.ilEvaluationAllTableGUI.php";
175 $this,
'outEvaluation', $this->
object->getAnonymity(), $this->
object->isOfferingQuestionHintsEnabled()
179 $arrFilter =
array();
181 foreach ($table_gui->getFilterItems() as $item)
183 if ($item->getValue() !==
false)
185 switch ($item->getPostVar())
190 $arrFilter[$item->getPostVar()] = $item->getValue();
193 $passedonly = $item->getChecked();
198 include_once
"./Modules/Test/classes/class.ilTestEvaluationData.php";
200 $eval->setFilterArray($arrFilter);
201 $foundParticipants =& $eval->getParticipants();
203 if (count($foundParticipants) > 0)
205 if ($this->
object->getECTSOutput())
207 $passed_array =& $this->
object->getTotalPointsPassedArray();
209 foreach ($foundParticipants as $active_id => $userdata)
216 $mark_obj = $this->
object->getMarkSchema()->getMatchingMark($userdata->getReachedPointsInPercent());
218 if( $mark_obj->getPassed() == FALSE || !$userdata->areObligationsAnswered() )
226 $evaluationrow =
array();
227 if ($this->
object->getAnonymity())
230 $evaluationrow[
'login'] =
'';
234 $evaluationrow[
'name'] = $userdata->getName();
235 if (strlen($userdata->getLogin()))
237 $evaluationrow[
'login'] =
"[" . $userdata->getLogin() .
"]";
241 $evaluationrow[
'login'] =
'';
245 $evaluationrow[
'reached'] = $userdata->getReached();
246 $evaluationrow[
'max'] = $userdata->getMaxpoints();
247 $evaluationrow[
'hint_count'] = $userdata->getRequestedHintsCountFromScoredPass();
248 $percentage = $userdata->getReachedPointsInPercent();
249 $mark = $this->
object->getMarkSchema()->getMatchingMark($percentage);
250 if (is_object($mark))
252 $evaluationrow[
'mark'] = $mark->getShortName();
254 if ($this->
object->getECTSOutput())
256 $ects_mark = $this->
object->getECTSGrade($passed_array, $userdata->getReached(), $userdata->getMaxPoints());
257 $evaluationrow[
'ects_grade'] = $ects_mark;
259 $evaluationrow[
'answered'] = $userdata->getQuestionsWorkedThroughInPercent();
260 $evaluationrow[
'questions_worked_through'] = $userdata->getQuestionsWorkedThrough();
261 $evaluationrow[
'number_of_questions'] = $userdata->getNumberOfQuestions();
262 $time_seconds = $userdata->getTimeOfWork();
263 $time_hours = floor($time_seconds/3600);
264 $time_seconds -= $time_hours * 3600;
265 $time_minutes = floor($time_seconds/60);
266 $time_seconds -= $time_minutes * 60;
267 $evaluationrow[
'working_time'] = sprintf(
"%02d:%02d:%02d", $time_hours, $time_minutes, $time_seconds);
268 $this->ctrl->setParameter($this,
"active_id", $active_id);
269 $href = $this->ctrl->getLinkTarget($this,
"detailedEvaluation");
270 $detailed_evaluation = $this->lng->txt(
"detailed_evaluation_show");
271 $evaluationrow[
'details'] =
"<a class=\"il_ContainerItemCommand\" href=\"$href\">$detailed_evaluation</a>";
273 $evaluationrow[
'gender'] = $userfields[
'gender'];
274 $evaluationrow[
'email'] = $userfields[
'email'];
275 $evaluationrow[
'institution'] = $userfields[
'institution'];
276 $evaluationrow[
'street'] = $userfields[
'street'];
277 $evaluationrow[
'city'] = $userfields[
'city'];
278 $evaluationrow[
'zipcode'] = $userfields[
'zipcode'];
279 $evaluationrow[
'country'] = $userfields[
'country'];
280 $evaluationrow[
'sel_country'] = $userfields[
'sel_country'];
281 $evaluationrow[
'department'] = $userfields[
'department'];
282 $evaluationrow[
'matriculation'] = $userfields[
'matriculation'];
284 $data[] = $evaluationrow;
290 if(count($foundParticipants) > 0)
292 $ilToolbar->setFormName(
'form_output_eval');
293 $ilToolbar->setFormAction($this->ctrl->getFormAction($this,
'exportEvaluation'));
294 require_once
'Services/Form/classes/class.ilSelectInputGUI.php';
295 $export_type =
new ilSelectInputGUI($this->lng->txt(
'exp_eval_data'),
'export_type');
297 'excel' => $this->lng->txt(
'exp_type_excel'),
298 'csv' => $this->lng->txt(
'exp_type_spss')
301 if(!$this->
object->getAnonymity())
303 include_once
'Services/Certificate/classes/class.ilCertificate.php';
304 include_once
'Modules/Test/classes/class.ilTestCertificateAdapter.php';
307 $options[
'certificate'] = $this->lng->txt(
'exp_type_certificate');
313 $ilToolbar->addInputItem($export_type,
true);
314 require_once
'Services/UIComponent/Button/classes/class.ilSubmitButton.php';
316 $button->setCommand(
'exportEvaluation');
317 $button->setCaption(
'export');
318 $button->getOmitPreventDoubleSubmission();
319 $ilToolbar->addButtonInstance($button);
323 if ($this->
object->getShowSolutionAnswersOnly())
328 $this->tpl->setContent($table_gui->getHTML());
342 if((!$DIC->access()->checkAccess(
'tst_statistics',
'', $this->ref_id)) && (!$DIC->access()->checkAccess(
'write',
'', $this->ref_id)))
345 $this->ctrl->redirectByClass(
'ilobjtestgui',
'infoScreen');
348 $active_id =
$_GET[
'active_id'];
349 if(strlen($active_id) == 0)
351 ilUtil::sendInfo($this->lng->txt(
'detailed_evaluation_missing_active_id'), TRUE);
352 $this->ctrl->redirect($this,
'outEvaluation');
357 $toolbar = $DIC[
'ilToolbar'];
359 require_once
'Services/UIComponent/Button/classes/class.ilLinkButton.php';
361 $backBtn->setCaption(
'back');
362 $backBtn->setUrl($this->ctrl->getLinkTarget($this,
'outEvaluation'));
363 $toolbar->addInputItem($backBtn);
365 $data =& $this->
object->getCompleteEvaluationData();
367 require_once
'Services/Form/classes/class.ilPropertyFormGUI.php';
369 $form->setTitle(sprintf(
370 $this->lng->txt(
'detailed_evaluation_for'),
$data->getParticipant($active_id)->getName()
374 $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()) .
" %" .
")");
375 $form->addItem($resultPoints);
377 if(strlen(
$data->getParticipant($active_id)->getMark()))
380 $resultMarks->
setValue(
$data->getParticipant($active_id)->getMark());
381 $form->addItem($resultMarks);
382 if(strlen(
$data->getParticipant($active_id)->getECTSMark()))
385 $ectsGrade->
setValue(
$data->getParticipant($active_id)->getECTSMark());
386 $form->addItem($ectsGrade);
390 if($this->
object->isOfferingQuestionHintsEnabled() )
392 $requestHints =
new ilNonEditableValueGUI($this->lng->txt(
'tst_question_hints_requested_hint_count_header'));
393 $requestHints->
setValue(
$data->getParticipant($active_id)->getRequestedHintsCountFromScoredPass());
394 $form->addItem($requestHints);
397 $time_seconds =
$data->getParticipant($active_id)->getTimeOfWork();
398 $atime_seconds =
$data->getParticipant($active_id)->getNumberOfQuestions() ? $time_seconds /
$data->getParticipant($active_id)->getNumberOfQuestions() : 0;
399 $time_hours = floor($time_seconds/3600);
400 $time_seconds -= $time_hours * 3600;
401 $time_minutes = floor($time_seconds/60);
402 $time_seconds -= $time_minutes * 60;
404 $timeOfWork->
setValue(sprintf(
"%02d:%02d:%02d", $time_hours, $time_minutes, $time_seconds));
405 $form->addItem($timeOfWork);
407 $this->tpl->setVariable(
"TXT_ATIMEOFWORK", $this->lng->txt(
""));
408 $time_hours = floor($atime_seconds/3600);
409 $atime_seconds -= $time_hours * 3600;
410 $time_minutes = floor($atime_seconds/60);
411 $atime_seconds -= $time_minutes * 60;
413 $avgTimeOfWork->
setValue(sprintf(
"%02d:%02d:%02d", $time_hours, $time_minutes, $atime_seconds));
414 $form->addItem($avgTimeOfWork);
418 $form->addItem($firstVisit);
422 $form->addItem($lastVisit);
425 $nrPasses->
setValue(
$data->getParticipant($active_id)->getLastPass() + 1);
426 $form->addItem($nrPasses);
431 $scoredPass->
setValue(
$data->getParticipant($active_id)->getBestPass() + 1);
435 $scoredPass->setValue(
$data->getParticipant($active_id)->getLastPass() + 1);
437 $form->addItem($scoredPass);
439 $median =
$data->getStatistics()->getStatistics()->median();
440 $pct =
$data->getParticipant($active_id)->getMaxpoints() ? ($median /
$data->getParticipant($active_id)->getMaxpoints()) * 100.0 : 0;
441 $mark = $this->
object->mark_schema->getMatchingMark($pct);
445 $markMedian->
setValue($mark->getShortName());
446 $form->addItem($markMedian);
450 $rankParticipant->
setValue(
$data->getStatistics()->getStatistics()->rank(
$data->getParticipant($active_id)->getReached()));
451 $form->addItem($rankParticipant);
454 $rankMedian->
setValue(
$data->getStatistics()->getStatistics()->rank_median());
455 $form->addItem($rankMedian);
457 $totalParticipants =
new ilNonEditableValueGUI($this->lng->txt(
'tst_stat_result_total_participants'));
458 $totalParticipants->
setValue(
$data->getStatistics()->getStatistics()->count());
459 $form->addItem($totalParticipants);
463 $form->addItem($medianField);
465 $this->tpl->setContent($form->getHTML());
471 $finishdate = $this->
object->getPassFinishDate($active_id,
$pass);
474 if(($DIC->access()->checkAccess(
'write',
'', (
int)
$_GET[
'ref_id'])))
476 $this->ctrl->setParameter($this,
'statistics',
'1');
477 $this->ctrl->setParameter($this,
'active_id', $active_id);
478 $this->ctrl->setParameter($this,
'pass',
$pass);
482 $this->ctrl->setParameter($this,
'statistics',
'');
483 $this->ctrl->setParameter($this,
'active_id',
'');
484 $this->ctrl->setParameter($this,
'pass',
'');
487 require_once
'Modules/Test/classes/tables/class.ilTestDetailedEvaluationStatisticsTableGUI.php';
489 $table->
setTitle(sprintf($this->lng->txt(
"tst_eval_question_points"),
$pass + 1));
490 if(($DIC->access()->checkAccess(
'write',
'', (
int)$_GET[
'ref_id'])))
492 $table->addCommandButton(
'outParticipantsPassDetails', $this->lng->txt(
'tst_show_answer_sheet'));
495 $questions =
$data->getParticipant($active_id)->getQuestions(
$pass);
496 if(!is_array($questions))
498 $questions =
$data->getParticipant($active_id)->getQuestions(0);
501 $tableData =
array();
504 foreach((
array)$questions as $question)
506 $userDataData =
array(
508 'id' => $question[
'id'],
509 'id_txt' => $this->lng->txt(
'question_id_short'),
510 'title' =>
$data->getQuestionTitle($question[
'id'])
513 $answeredquestion =
$data->getParticipant($active_id)->getPass(
$pass)->getAnsweredQuestionByQuestionId($question[
"id"]);
514 if(is_array($answeredquestion))
516 $percent = $answeredquestion[
'points'] ? $answeredquestion[
'reached'] / $answeredquestion[
'points'] * 100.0 : 0;
517 $userDataData[
'points'] = $answeredquestion[
'reached'] .
' ' . strtolower($this->lng->txt(
'of')) .
" " . $answeredquestion[
'points'] .
' (' . sprintf(
"%.2f", $percent) .
' %)';
521 $userDataData[
'points'] =
'0 ' . strtolower($this->lng->txt(
'of')) .
' ' . $question[
'points'] .
' (' . sprintf(
"%.2f", 0) .
' %) - ' . $this->lng->txt(
'question_not_answered');
524 $tableData[] = $userDataData;
526 $table->setData($tableData);
528 $tables[] = $table->getHTML();
532 $GLOBALS[
'tpl']->setContent($form->getHTML() . implode(
'', $tables));
550 require_once
'./Modules/TestQuestionPool/classes/class.assQuestion.php';
554 $question_object->deliverFileUploadZIPFile($this->
object->getTestId(), $this->
object->getTitle());
558 $this->ctrl->redirect($this,
"singleResults");
575 global $ilAccess, $ilToolbar;
577 if ((!$ilAccess->checkAccess(
"tst_statistics",
"", $this->ref_id)) && (!$ilAccess->checkAccess(
"write",
"", $this->ref_id)))
581 $this->ctrl->redirectByClass(
"ilobjtestgui",
"infoScreen");
584 $this->tpl->addBlockFile(
"ADM_CONTENT",
"adm_content",
"tpl.il_as_tst_eval_anonymous_aggregation.html",
"Modules/Test");
585 $eval =& $this->
object->getCompleteEvaluationData();
587 $foundParticipants =& $eval->getParticipants();
588 if (count($foundParticipants))
590 $ilToolbar->setFormName(
'form_output_eval');
591 $ilToolbar->setFormAction($this->ctrl->getFormAction($this,
'exportAggregatedResults'));
592 require_once
'Services/Form/classes/class.ilSelectInputGUI.php';
593 $export_type =
new ilSelectInputGUI($this->lng->txt(
'exp_eval_data'),
'export_type');
595 'excel' => $this->lng->txt(
'exp_type_excel'),
596 'csv' => $this->lng->txt(
'exp_type_spss')
598 $ilToolbar->addInputItem($export_type,
true);
599 require_once
'Services/UIComponent/Button/classes/class.ilSubmitButton.php';
601 $button->setCommand(
'exportAggregatedResults');
602 $button->setCaption(
'export');
603 $button->getOmitPreventDoubleSubmission();
604 $ilToolbar->addButtonInstance($button);
607 'result' => $this->lng->txt(
"tst_eval_total_persons"),
608 'value' => count($foundParticipants)
610 $total_finished = $this->
object->evalTotalFinished();
612 'result' => $this->lng->txt(
"tst_eval_total_finished"),
613 'value' => $total_finished
615 $average_time = $this->
object->evalTotalStartedAverageTime();
616 $diff_seconds = $average_time;
617 $diff_hours = floor($diff_seconds/3600);
618 $diff_seconds -= $diff_hours * 3600;
619 $diff_minutes = floor($diff_seconds/60);
620 $diff_seconds -= $diff_minutes * 60;
622 'result' => $this->lng->txt(
"tst_eval_total_finished_average_time"),
623 'value' => sprintf(
"%02d:%02d:%02d", $diff_hours, $diff_minutes, $diff_seconds)
626 $total_passed_reached = 0;
627 $total_passed_max = 0;
628 $total_passed_time = 0;
629 foreach ($foundParticipants as $userdata)
631 if ($userdata->getPassed())
634 $total_passed_reached += $userdata->getReached();
635 $total_passed_max += $userdata->getMaxpoints();
636 $total_passed_time += $userdata->getTimeOfWork();
639 $average_passed_reached = $total_passed ? $total_passed_reached / $total_passed : 0;
640 $average_passed_max = $total_passed ? $total_passed_max / $total_passed : 0;
641 $average_passed_time = $total_passed ? $total_passed_time / $total_passed : 0;
643 'result' => $this->lng->txt(
"tst_eval_total_passed"),
644 'value' => $total_passed
647 'result' => $this->lng->txt(
"tst_eval_total_passed_average_points"),
648 'value' => sprintf(
"%2.2f", $average_passed_reached) .
" " . strtolower($this->lng->txt(
"of")) .
" " . sprintf(
"%2.2f", $average_passed_max)
650 $average_time = $average_passed_time;
651 $diff_seconds = $average_time;
652 $diff_hours = floor($diff_seconds/3600);
653 $diff_seconds -= $diff_hours * 3600;
654 $diff_minutes = floor($diff_seconds/60);
655 $diff_seconds -= $diff_minutes * 60;
657 'result' => $this->lng->txt(
"tst_eval_total_passed_average_time"),
658 'value' => sprintf(
"%02d:%02d:%02d", $diff_hours, $diff_minutes, $diff_seconds)
662 include_once
"./Modules/Test/classes/tables/class.ilTestAggregatedResultsTableGUI.php";
664 $table_gui->setData(
$data);
665 $this->tpl->setVariable(
'AGGREGATED_RESULTS', $table_gui->getHTML());
668 foreach ($eval->getQuestionTitles() as $question_id => $question_title)
673 foreach ($foundParticipants as $userdata)
675 for ($i = 0; $i <= $userdata->getLastPass(); $i++)
677 if (is_object($userdata->getPass($i)))
679 $question =& $userdata->getPass($i)->getAnsweredQuestionByQuestionId($question_id);
680 if (is_array($question))
683 $reached += $question[
"reached"];
684 $max += $question[
"points"];
689 $percent = $max ? $reached/$max * 100.0 : 0;
691 $this->ctrl->setParameter($this,
"qid", $question_id);
693 $points_reached = ($answered ? $reached / $answered : 0);
694 $points_max = ($answered ? $max / $answered : 0);
697 'qid' => $question_id,
698 'title' => $question_title,
699 'points' => $points_reached,
700 'points_reached' => $points_reached,
701 'points_max' => $points_max,
702 'percentage' => (
float)$percent,
703 'answers' => $answered
707 include_once
"./Modules/Test/classes/tables/class.ilTestAverageReachedPointsTableGUI.php";
709 $table_gui->setData($rows);
710 $this->tpl->setVariable(
'TBL_AVG_REACHED', $table_gui->getHTML());
719 if (array_key_exists(
"g_filterby",
$_GET))
721 $filterby =
$_GET[
"g_filterby"];
725 if (array_key_exists(
"g_userfilter",
$_GET))
727 $filtertext =
$_GET[
"g_userfilter"];
731 if (array_key_exists(
"g_passedonly",
$_GET))
733 if (
$_GET[
"g_passedonly"] == 1)
739 require_once
'Modules/Test/classes/class.ilTestExportFactory.php';
742 switch (
$_POST[
"export_type"])
745 $expFactory->getExporter(
'results')->exportToExcel(
746 $deliver = TRUE, $filterby, $filtertext, $passedonly
751 $expFactory->getExporter(
'results')->exportToCSV(
752 $deliver = TRUE, $filterby, $filtertext, $passedonly
759 $this->ctrl->setParameterByClass(
"iltestcertificategui",
"g_passedonly",
"1");
761 if (strlen($filtertext))
763 $this->ctrl->setParameterByClass(
"iltestcertificategui",
"g_userfilter", $filtertext);
765 $this->ctrl->redirect($this,
"exportCertificate");
777 require_once
'Modules/Test/classes/class.ilTestExportFactory.php';
779 $exportObj = $expFactory->getExporter(
'aggregated');
781 switch (
$_POST[
"export_type"])
784 $exportObj->exportToExcel($deliver = TRUE);
787 $exportObj->exportToCSV($deliver = TRUE);
802 include_once
"./Services/Utilities/classes/class.ilUtil.php";
803 include_once
"./Services/Certificate/classes/class.ilCertificate.php";
804 include_once
"./Modules/Test/classes/class.ilTestCertificateAdapter.php";
807 $total_users =
array();
808 $total_users =& $this->
object->evalTotalPersonsArray();
809 if (count($total_users))
811 foreach ($total_users as $active_id => $name)
813 $user_id = $this->
object->_getUserIdFromActiveId($active_id);
816 "active_id" => $active_id,
817 "userfilter" => $userfilter,
818 "passedonly" => $passedonly
827 $zipArchive =
$certificate->zipCertificatesInArchiveDirectory($archive_dir, TRUE);
840 if ($original_id > 0)
859 global $ilTabs, $ilAccess, $ilObjDataCache;
861 if (!$ilAccess->checkAccess(
'write',
'', $this->ref_id))
865 $this->ctrl->redirectByClass(
'ilObjTestGUI',
'infoScreen');
868 $this->ctrl->saveParameter($this,
"active_id");
869 $active_id = (int)
$_GET[
"active_id"];
870 $testSession = $this->testSessionFactory->getSession($active_id);
873 if( $testSession->getTestId() != $this->
object->getTestId() )
876 $this->ctrl->redirectByClass(
'ilObjTestGUI',
'infoScreen');
879 $this->ctrl->saveParameter($this,
"pass");
882 if ( isset(
$_GET[
'statistics']) &&
$_GET[
'statistics'] == 1)
884 $this->ctrl->setParameterByClass(
"ilTestEvaluationGUI",
"active_id", $active_id);
885 $this->ctrl->saveParameter($this,
'statistics');
887 $ilTabs->setBackTarget(
888 $this->lng->txt(
'back'), $this->ctrl->getLinkTargetByClass(
'ilTestEvaluationGUI',
'detailedEvaluation')
891 elseif ($this->
object->getNrOfTries() == 1)
893 $ilTabs->setBackTarget(
894 $this->lng->txt(
'back'), $this->ctrl->getLinkTargetByClass(
'ilobjtestgui',
'participants')
899 $ilTabs->setBackTarget(
900 $this->lng->txt(
'tst_results_back_overview'), $this->ctrl->getLinkTarget($this,
'outParticipantsResultsOverview')
907 require_once
'Services/PDFGeneration/classes/class.ilPDFGeneration.php';
911 require_once
'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
914 $objectivesList = null;
918 $testSequence = $this->testSequenceFactory->getSequenceByActiveIdAndPass($active_id,
$pass);
919 $testSequence->loadFromDb();
920 $testSequence->loadQuestions();
922 require_once
'Modules/Course/classes/Objectives/class.ilLOTestQuestionAdapter.php';
926 $objectivesList->loadObjectivesTitles();
928 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
929 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
930 $testResultHeaderLabelBuilder->setTestObjId($this->
object->getId());
931 $testResultHeaderLabelBuilder->setTestRefId($this->
object->getRefId());
932 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
935 $result_array = $this->
object->getTestResult(
940 $overviewTableGUI->setTitle($testResultHeaderLabelBuilder->getPassDetailsHeaderLabel(
$pass + 1));
942 $user_id = $this->
object->_getUserIdFromActiveId($active_id);
944 $template =
new ilTemplate(
"tpl.il_as_tst_pass_details_overview_participants.html", TRUE, TRUE,
"Modules/Test");
948 $this->ctrl->setParameter($this,
'pdf',
'1');
949 $toolbar->setPdfExportLinkTarget( $this->ctrl->getLinkTarget($this,
'outParticipantsPassDetails') );
950 $this->ctrl->setParameter($this,
'pdf',
'');
952 if( isset(
$_GET[
'show_best_solutions']) )
954 $_SESSION[
'tst_results_show_best_solutions'] =
true;
956 elseif( isset(
$_GET[
'hide_best_solutions']) )
958 $_SESSION[
'tst_results_show_best_solutions'] =
false;
960 elseif( !isset(
$_SESSION[
'tst_results_show_best_solutions']) )
962 $_SESSION[
'tst_results_show_best_solutions'] =
false;
965 if(
$_SESSION[
'tst_results_show_best_solutions'] )
967 $this->ctrl->setParameter($this,
'hide_best_solutions',
'1');
968 $toolbar->setHideBestSolutionsLinkTarget($this->ctrl->getLinkTarget($this,
'outParticipantsPassDetails'));
969 $this->ctrl->setParameter($this,
'hide_best_solutions',
'');
973 $this->ctrl->setParameter($this,
'show_best_solutions',
'1');
974 $toolbar->setShowBestSolutionsLinkTarget($this->ctrl->getLinkTarget($this,
'outParticipantsPassDetails'));
975 $this->ctrl->setParameter($this,
'show_best_solutions',
'');
979 $template->setVariable(
'RESULTS_TOOLBAR', $this->ctrl->getHTML($toolbar));
984 $gradingMessageBuilder->buildList();
986 $template->setCurrentBlock(
'grading_message');
987 $template->setVariable(
'GRADING_MESSAGE', $gradingMessageBuilder->getList());
988 $template->parseCurrentBlock();
991 $list_of_answers = $this->
getPassListOfAnswers($result_array, $active_id,
$pass,
$_SESSION[
'tst_results_show_best_solutions'],
false,
false,
false,
true, $objectivesList, $testResultHeaderLabelBuilder);
992 $template->setVariable(
"LIST_OF_ANSWERS", $list_of_answers);
993 $template->setVariable(
"PASS_DETAILS", $this->ctrl->getHTML($overviewTableGUI));
997 $template->setVariable(
"USER_DATA", $user_data);
999 $uname = $this->
object->userLookupFullName($user_id);
1000 $template->setVariable(
"TEXT_HEADING", sprintf($this->lng->txt(
"tst_result_user_name_pass"),
$pass + 1, $uname));
1002 $template->setVariable(
"TEXT_RESULTS", $testResultHeaderLabelBuilder->getPassDetailsHeaderLabel(
$pass + 1));
1005 $template->setVariable(
"FORMACTION", $this->ctrl->getFormAction($this));
1010 if ($this->
object->getShowSolutionAnswersOnly())
1018 require_once
'class.ilTestPDFGenerator.php';
1023 $this->tpl->setVariable(
"ADM_CONTENT", $template->get());
1034 global $ilTabs, $ilAccess, $ilObjDataCache;
1036 if (!$ilAccess->checkAccess(
'write',
'', $this->ref_id))
1040 $this->ctrl->redirectByClass(
'ilObjTestGUI',
'infoScreen');
1043 $active_id = (int)
$_GET[
"active_id"];
1044 $testSession = $this->testSessionFactory->getSession($active_id);
1047 if( $testSession->getTestId() != $this->
object->getTestId() )
1050 $this->ctrl->redirectByClass(
'ilObjTestGUI',
'infoScreen');
1053 if ($this->
object->getNrOfTries() == 1)
1055 $this->ctrl->setParameter($this,
"active_id", $active_id);
1057 $this->ctrl->redirect($this,
"outParticipantsPassDetails");
1060 $ilTabs->setBackTarget(
1061 $this->lng->txt(
'back'), $this->ctrl->getLinkTargetByClass(
'ilobjtestgui',
'participants')
1067 require_once
'Services/PDFGeneration/classes/class.ilPDFGeneration.php';
1071 $template =
new ilTemplate(
"tpl.il_as_tst_pass_overview_participants.html", TRUE, TRUE,
"Modules/Test");
1075 $this->ctrl->setParameter($this,
'pdf',
'1');
1076 $toolbar->setPdfExportLinkTarget( $this->ctrl->getLinkTarget($this, __FUNCTION__) );
1077 $this->ctrl->setParameter($this,
'pdf',
'');
1080 $template->setVariable(
'RESULTS_TOOLBAR', $this->ctrl->getHTML($toolbar));
1082 require_once
'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
1086 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
1087 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
1088 $testResultHeaderLabelBuilder->setTestObjId($this->
object->getId());
1089 $testResultHeaderLabelBuilder->setTestRefId($this->
object->getRefId());
1090 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
1093 require_once
'Modules/Test/classes/class.ilTestPassesSelector.php';
1095 $testPassesSelector->setActiveId($testSession->getActiveId());
1096 $testPassesSelector->setLastFinishedPass($testSession->getLastFinishedPass());
1099 $passOverViewTableGUI->setActiveId($testSession->getActiveId());
1100 $passOverViewTableGUI->setResultPresentationEnabled(
true);
1101 $passOverViewTableGUI->setPassDetailsCommand(
'outParticipantsPassDetails');
1102 $passOverViewTableGUI->init();
1103 $passOverViewTableGUI->setData($this->
getPassOverviewTableData($testSession, $testPassesSelector->getExistingPasses(),
true,
true));
1104 $passOverViewTableGUI->setTitle($testResultHeaderLabelBuilder->getPassOverviewHeaderLabel());
1105 $template->setVariable(
"PASS_OVERVIEW", $passOverViewTableGUI->getHTML());
1110 $gradingMessageBuilder->buildList();
1112 $template->setCurrentBlock(
'grading_message');
1113 $template->setVariable(
'GRADING_MESSAGE', $gradingMessageBuilder->getList());
1114 $template->parseCurrentBlock();
1118 $user_id = $this->
object->_getUserIdFromActiveId($active_id);
1122 if ($this->
object->getAnonymity())
1124 $template->setVariable(
"TEXT_HEADING", $this->lng->txt(
"tst_result"));
1128 $uname = $this->
object->userLookupFullName($user_id, TRUE);
1129 $template->setVariable(
"TEXT_HEADING", sprintf($this->lng->txt(
"tst_result_user_name"), $uname));
1130 $template->setVariable(
"USER_DATA", $user_data);
1134 $template->parseCurrentBlock();
1138 if ($this->
object->getShowSolutionAnswersOnly())
1143 if (array_key_exists(
"pdf",
$_GET) && (
$_GET[
"pdf"] == 1))
1148 $filename = $name[
'lastname'] .
'_' . $name[
'firstname'] .
'_' . $name[
'login'] .
'__'. $this->
object->getTitleFilenameCompliant();
1149 require_once
'class.ilTestPDFGenerator.php';
1156 $this->tpl->setVariable(
"ADM_CONTENT", $template->get());
1163 $tableGUI->initFilter();
1164 $tableGUI->resetOffset();
1165 $tableGUI->writeFilterToSession();
1172 $tableGUI->initFilter();
1173 $tableGUI->resetOffset();
1174 $tableGUI->resetFilter();
1185 global $ilTabs,
$ilUser, $ilObjDataCache;
1189 if ($this->
object->getNrOfTries() == 1)
1191 $ilTabs->setBackTarget($this->lng->txt(
'tst_results_back_introduction'), $this->ctrl->getLinkTargetByClass(
'ilObjTestGUI',
'infoScreen'));
1195 $ilTabs->setBackTarget($this->lng->txt(
'tst_results_back_overview'), $this->ctrl->getLinkTarget($this,
'outUserResultsOverview'));
1198 $testSession = $this->testSessionFactory->getSession();
1200 if( !$this->
object->getShowPassDetails() )
1202 #$executable = $this->object->isExecutable($testSession, $ilUser->getId()); 1204 #if($executable["executable"]) 1206 $this->ctrl->redirectByClass(
"ilobjtestgui",
"infoScreen");
1210 $active_id = $testSession->getActiveId();
1211 $user_id = $testSession->getUserId();
1213 $this->ctrl->saveParameter($this,
"pass");
1219 require_once
'Services/PDFGeneration/classes/class.ilPDFGeneration.php';
1223 require_once
'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
1226 $objectivesList = null;
1228 $considerHiddenQuestions =
true;
1229 $considerOptionalQuestions =
true;
1233 $considerHiddenQuestions =
false;
1235 $testSequence = $this->testSequenceFactory->getSequenceByActiveIdAndPass($active_id,
$pass);
1236 $testSequence->loadFromDb();
1237 $testSequence->loadQuestions();
1239 if( $this->
object->isRandomTest() && !$testSequence->isAnsweringOptionalQuestionsConfirmed() )
1241 $considerOptionalQuestions =
false;
1244 require_once
'Modules/Course/classes/Objectives/class.ilLOTestQuestionAdapter.php';
1248 $objectivesList->loadObjectivesTitles();
1250 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
1251 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
1252 $testResultHeaderLabelBuilder->setTestObjId($this->
object->getId());
1253 $testResultHeaderLabelBuilder->setTestRefId($this->
object->getRefId());
1254 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
1259 $command_solution_details =
"";
1260 if ($this->
object->getShowSolutionDetails())
1262 $command_solution_details =
"outCorrectSolution";
1264 $questionAnchorNav = $this->
object->canShowSolutionPrintview();
1266 $tpl =
new ilTemplate(
'tpl.il_as_tst_pass_details_overview_participants.html',
true,
true,
"Modules/Test");
1272 $this->ctrl->setParameter($this,
'pdf',
'1');
1273 $toolbar->setPdfExportLinkTarget( $this->ctrl->getLinkTarget($this,
'outUserPassDetails') );
1274 $this->ctrl->setParameter($this,
'pdf',
'');
1276 include_once
'./Services/WebServices/RPC/classes/class.ilRPCServerSettings.php';
1277 if( $this->
object->canShowCertificate($testSession, $user_id, $active_id) )
1279 $toolbar->setCertificateLinkTarget($this->ctrl->getLinkTarget($this,
'outCertificate'));
1284 $tpl->setVariable(
'RESULTS_TOOLBAR', $this->ctrl->getHTML($toolbar));
1286 $tpl->setCurrentBlock(
'signature');
1288 $tpl->parseCurrentBlock();
1290 if ($this->
object->isShowExamIdInTestResultsEnabled())
1292 $tpl->setCurrentBlock(
'exam_id');
1294 $testSession->getActiveId(),
$pass 1296 $tpl->setVariable(
'EXAM_ID_TXT', $this->lng->txt(
'exam_id'));
1297 $tpl->parseCurrentBlock();
1305 $gradingMessageBuilder->buildMessage();
1306 $gradingMessageBuilder->sendMessage();
1308 #$template->setCurrentBlock('grading_message'); 1309 #$template->setVariable('GRADING_MESSAGE', ); 1310 #$template->parseCurrentBlock(); 1314 $result_array, $active_id,
$pass, $this,
"outUserPassDetails",
1315 $command_solution_details, $questionAnchorNav, $objectivesList
1317 $overviewTableGUI->setTitle($testResultHeaderLabelBuilder->getPassDetailsHeaderLabel(
$pass + 1));
1318 $tpl->setVariable(
"PASS_DETAILS", $this->ctrl->getHTML($overviewTableGUI));
1320 if( $this->
object->canShowSolutionPrintview() )
1323 $result_array, $active_id,
$pass, $this->
object->getShowSolutionListComparison(),
1324 false,
false,
false,
true, $objectivesList, $testResultHeaderLabelBuilder
1326 $tpl->setVariable(
"LIST_OF_ANSWERS", $list_of_answers);
1329 $tpl->setVariable(
"TEXT_RESULTS", $testResultHeaderLabelBuilder->getPassDetailsHeaderLabel(
$pass+1));
1330 $tpl->setVariable(
"FORMACTION", $this->ctrl->getFormAction($this));
1332 $uname = $this->
object->userLookupFullName($user_id, TRUE);
1336 if($this->
object->getAnonymity())
1338 $tpl->setVariable(
"TEXT_HEADING", $this->lng->txt(
"tst_result_pass"));
1341 $tpl->setVariable(
"TEXT_HEADING", sprintf($this->lng->txt(
"tst_result_user_name_pass"),
$pass + 1, $uname));
1342 $tpl->setVariable(
"USER_DATA", $user_data);
1349 if ($this->
object->getShowSolutionAnswersOnly())
1356 require_once
'class.ilTestPDFGenerator.php';
1361 $this->tpl->setContent(
$tpl->get());
1372 global
$ilUser, $ilTabs, $ilObjDataCache;
1376 $ilTabs->setBackTarget(
1377 $this->lng->txt(
'tst_results_back_introduction'),
1378 $this->ctrl->getLinkTargetByClass(
'ilObjTestGUI',
'infoScreen')
1381 $testSession = $this->testSessionFactory->getSession();
1382 $active_id = $testSession->getActiveId();
1383 $user_id = $ilUser->getId();
1384 $uname = $this->
object->userLookupFullName($user_id, TRUE);
1386 if( !$this->
object->canShowTestResults($testSession) )
1388 $this->ctrl->redirectByClass(
"ilobjtestgui",
"infoScreen");
1394 require_once
'Services/PDFGeneration/classes/class.ilPDFGeneration.php';
1398 $templatehead =
new ilTemplate(
"tpl.il_as_tst_results_participants.html", TRUE, TRUE,
"Modules/Test");
1399 $template =
new ilTemplate(
"tpl.il_as_tst_results_participant.html", TRUE, TRUE,
"Modules/Test");
1403 $this->ctrl->setParameter($this,
'pdf',
'1');
1404 $toolbar->setPdfExportLinkTarget( $this->ctrl->getLinkTarget($this,
'outUserResultsOverview') );
1405 $this->ctrl->setParameter($this,
'pdf',
'');
1407 include_once
'./Services/WebServices/RPC/classes/class.ilRPCServerSettings.php';
1408 if( $this->
object->canShowCertificate($testSession, $user_id, $active_id) )
1410 $toolbar->setCertificateLinkTarget($this->ctrl->getLinkTarget($this,
'outCertificate'));
1415 $templatehead->setVariable(
'RESULTS_TOOLBAR', $this->ctrl->getHTML($toolbar));
1417 $passDetailsEnabled = $this->
object->getShowPassDetails();
1418 #if (!$passDetailsEnabled) 1420 # $executable = $this->object->isExecutable($testSession, $ilUser->getId()); 1421 # if (!$executable["executable"]) $passDetailsEnabled = true; 1424 require_once
'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
1428 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
1429 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
1430 $testResultHeaderLabelBuilder->setTestObjId($this->
object->getId());
1431 $testResultHeaderLabelBuilder->setTestRefId($this->
object->getRefId());
1432 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
1435 $template->setCurrentBlock(
"pass_overview");
1437 require_once
'Modules/Test/classes/class.ilTestPassesSelector.php';
1439 $testPassesSelector->setActiveId($testSession->getActiveId());
1440 $testPassesSelector->setLastFinishedPass($testSession->getLastFinishedPass());
1443 $passOverViewTableGUI->setActiveId($testSession->getActiveId());
1444 $passOverViewTableGUI->setResultPresentationEnabled(
true);
1445 if($passDetailsEnabled)
1447 $passOverViewTableGUI->setPassDetailsCommand(
'outUserPassDetails');
1449 if( $this->
object->isPassDeletionAllowed() )
1451 $passOverViewTableGUI->setPassDeletionCommand(
'confirmDeletePass');
1453 $passOverViewTableGUI->init();
1454 $passOverViewTableGUI->setData($this->
getPassOverviewTableData($testSession, $testPassesSelector->getReportablePasses(),
true));
1455 $passOverViewTableGUI->setTitle($testResultHeaderLabelBuilder->getPassOverviewHeaderLabel());
1456 $overview = $passOverViewTableGUI->getHTML();
1459 require_once
'Modules/Test/classes/class.ilTestLearningObjectivesStatusGUI.php';
1462 $loStatus->setUsrId($testSession->getUserId());
1463 $overview .=
"<br />".$loStatus->getHTML();
1465 $template->setVariable(
"PASS_OVERVIEW", $overview);
1466 $template->parseCurrentBlock();
1471 $gradingMessageBuilder->buildMessage();
1472 $gradingMessageBuilder->sendMessage();
1474 #$template->setCurrentBlock('grading_message'); 1475 #$template->setVariable('GRADING_MESSAGE', ); 1476 #$template->parseCurrentBlock(); 1483 if ($this->
object->getAnonymity())
1485 $template->setVariable(
"TEXT_HEADING", $this->lng->txt(
"tst_result"));
1489 $template->setVariable(
"TEXT_HEADING", sprintf($this->lng->txt(
"tst_result_user_name"), $uname));
1490 $template->setVariable(
"USER_DATA", $user_data);
1495 if ($this->
object->getShowSolutionAnswersOnly())
1499 $templatehead->setVariable(
"RESULTS_PARTICIPANT", $template->get());
1504 require_once
'class.ilTestPDFGenerator.php';
1509 $this->tpl->setContent($templatehead->get());
1522 global
$ilUser, $ilObjDataCache;
1524 if (!$this->
object->getShowSolutionPrintview())
1527 $this->ctrl->redirectByClass(
"ilobjtestgui",
"infoScreen");
1530 $template =
new ilTemplate(
"tpl.il_as_tst_info_list_of_answers.html", TRUE, TRUE,
"Modules/Test");
1533 if (array_key_exists(
"pass",
$_GET))
1537 $user_id = $ilUser->getId();
1539 $testSession = $this->testSessionFactory->getSession();
1540 $active_id = $testSession->getActiveId();
1543 if ($this->
object->getNrOfTries() == 1)
1549 $template->setVariable(
"TEXT_RESULTS", $this->lng->txt(
"tst_passes"));
1551 require_once
'Modules/Test/classes/class.ilTestPassesSelector.php';
1553 $testPassesSelector->setActiveId($testSession->getActiveId());
1554 $testPassesSelector->setLastFinishedPass($testSession->getLastFinishedPass());
1557 $passOverViewTableGUI->setActiveId($testSession->getActiveId());
1558 $passOverViewTableGUI->setResultPresentationEnabled(
false);
1559 $passOverViewTableGUI->setPassDetailsCommand(
'outUserListOfAnswerPasses');
1560 $passOverViewTableGUI->init();
1561 $passOverViewTableGUI->setData($this->
getPassOverviewTableData($testSession, $testPassesSelector->getClosedPasses(),
false));
1562 $template->setVariable(
"PASS_OVERVIEW", $passOverViewTableGUI->getHTML());
1568 require_once
'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
1571 $objectivesList = null;
1575 $testSequence = $this->testSequenceFactory->getSequenceByActiveIdAndPass($active_id,
$pass);
1576 $testSequence->loadFromDb();
1577 $testSequence->loadQuestions();
1579 require_once
'Modules/Course/classes/Objectives/class.ilLOTestQuestionAdapter.php';
1583 $objectivesList->loadObjectivesTitles();
1585 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId());
1586 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId());
1587 $testResultHeaderLabelBuilder->setTestObjId($this->
object->getId());
1588 $testResultHeaderLabelBuilder->setTestRefId($this->
object->getRefId());
1589 $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
1592 $result_array = $this->
object->getTestResult(
1597 $user_id =& $this->
object->_getUserIdFromActiveId($active_id);
1598 $showAllAnswers = TRUE;
1599 if ($this->
object->isExecutable($testSession, $user_id))
1601 $showAllAnswers = FALSE;
1604 $answers = $this->
getPassListOfAnswers($result_array, $active_id,
$pass, FALSE, $showAllAnswers,
false,
false,
false, $objectivesList, $testResultHeaderLabelBuilder);
1605 $template->setVariable(
"PASS_DETAILS", $answers);
1607 $template->setVariable(
"FORMACTION", $this->ctrl->getFormAction($this));
1608 $template->setVariable(
"BACK_TEXT", $this->lng->txt(
"tst_results_back_introduction"));
1609 $template->setVariable(
"BACK_URL", $this->ctrl->getLinkTargetByClass(
"ilobjtestgui",
"infoScreen"));
1610 $template->setVariable(
"PRINT_TEXT", $this->lng->txt(
"print"));
1611 $template->setVariable(
"PRINT_URL",
"javascript:window.print();");
1614 $template->setVariable(
"USER_DATA", $user_data);
1615 $template->setVariable(
"TEXT_LIST_OF_ANSWERS", $this->lng->txt(
"tst_list_of_answers"));
1616 if (strlen($signature))
1618 $template->setVariable(
"SIGNATURE", $signature);
1620 if (!is_null(
$pass) && $this->
object->isShowExamIdInTestResultsEnabled())
1622 $template->setCurrentBlock(
'exam_id_footer');
1624 $testSession->getActiveId(),
$pass 1626 $template->setVariable(
'EXAM_ID_TXT', $this->lng->txt(
'exam_id'));
1627 $template->parseCurrentBlock();
1629 $this->tpl->setVariable(
"ADM_CONTENT", $template->get());
1632 if ($this->
object->getShowSolutionAnswersOnly())
1647 if (array_key_exists(
"pass",
$_GET) && (strlen(
$_GET[
"pass"]) > 0))
1649 $this->ctrl->saveParameter($this,
"pass");
1650 $this->ctrl->saveParameter($this,
"active_id");
1651 $this->outTestResults(
false,
$_GET[
"pass"]);
1655 $this->outTestResults(
false);
1667 if ((!$ilAccess->checkAccess(
"tst_statistics",
"", $this->ref_id)) && (!$ilAccess->checkAccess(
"write",
"", $this->ref_id)))
1671 $this->ctrl->redirectByClass(
"ilobjtestgui",
"infoScreen");
1674 $data =& $this->
object->getCompleteEvaluationData();
1675 $color_class =
array(
"tblrow1",
"tblrow2");
1677 $this->tpl->addBlockFile(
"ADM_CONTENT",
"adm_content",
"tpl.il_as_tst_eval_single_answers.html",
"Modules/Test");
1678 $foundParticipants =&
$data->getParticipants();
1679 if (count($foundParticipants) == 0)
1687 foreach (
$data->getQuestionTitles() as $question_id => $question_title)
1692 foreach ($foundParticipants as $userdata)
1694 $pass = $userdata->getScoredPass();
1695 if (is_object($userdata->getPass(
$pass)))
1697 $question =& $userdata->getPass(
$pass)->getAnsweredQuestionByQuestionId($question_id);
1698 if (is_array($question))
1705 $this->ctrl->setParameter($this,
"qid", $question_id);
1706 require_once
'./Modules/TestQuestionPool/classes/class.assQuestion.php';
1711 if ($question_object->hasFileUploads($this->object->getTestId()))
1713 $download =
"<a href=\"" . $this->ctrl->getLinkTarget($this,
"exportFileUploadsForAllParticipants").
"\">" . $this->lng->txt(
"download") .
"</a>";
1718 'qid' => $question_id,
1719 'question_title' => $question_title,
1720 'number_of_answers' => $answered,
1721 'output' =>
"<a href=\"" . $this->ctrl->getLinkTarget($this,
"exportQuestionForAllParticipants") .
"\">" . $this->lng->txt(
"pdf_export") .
"</a>",
1722 'file_uploads' => $download
1728 require_once
'./Modules/Test/classes/tables/class.ilResultsByQuestionTableGUI.php';
1730 $table_gui->setTitle($this->lng->txt(
"tst_answered_questions_test"));
1731 $table_gui->setData($rows);
1733 $this->tpl->setVariable(
"TBL_SINGLE_ANSWERS", $table_gui->getHTML());
1737 $this->tpl->setVariable(
"TBL_SINGLE_ANSWERS", $this->lng->txt(
"adm_no_special_users"));
1747 $testSession = $this->testSessionFactory->getSession();
1749 require_once
'./Services/Certificate/classes/class.ilCertificate.php';
1750 require_once
'./Modules/Test/classes/class.ilTestCertificateAdapter.php';
1754 "active_id" => $testSession->getActiveId(),
1762 if( isset(
$_GET[
'context']) && strlen(
$_GET[
'context']) )
1764 $context =
$_GET[
'context'];
1771 if( !$this->
object->isPassDeletionAllowed() && !$this->
object->isDynamicTest() )
1776 require_once
'Modules/Test/classes/confirmations/class.ilTestPassDeletionConfirmationGUI.php';
1779 $confirm->build((
int)
$_GET[
'active_id'], (
int)$_GET[
'pass'], $context);
1782 $tpl->setContent($this->ctrl->getHTML($confirm));
1792 require_once
'Modules/Test/classes/confirmations/class.ilTestPassDeletionConfirmationGUI.php';
1798 $this->ctrl->redirect($this,
'outUserResultsOverview');
1802 $this->ctrl->redirectByClass(
'ilObjTestGUI',
'infoScreen');
1806 $this->ctrl->redirectByClass(
'ilTestPlayerDynamicQuestionSetGUI',
'startTest');
1810 public function performDeletePass()
1812 if( isset(
$_POST[
'context']) && strlen(
$_POST[
'context']) )
1814 $context =
$_POST[
'context'];
1821 if( !$this->
object->isPassDeletionAllowed() && !$this->
object->isDynamicTest() )
1831 if( isset(
$_POST[
'active_id']) && (
int)
$_POST[
'active_id'] )
1833 $active_fi = $_POST[
'active_id'];
1836 if( isset($_POST[
'pass']) && is_numeric($_POST[
'pass']) )
1838 $pass = $_POST[
'pass'];
1841 if( is_null($active_fi) || is_null(
$pass) )
1843 $this->ctrl->redirect($this,
'outUserResultsOverview');
1846 if( !$this->
object->isDynamicTest() &&
$pass == $this->
object->_getResultPass($active_fi) )
1848 $this->ctrl->redirect($this,
'outUserResultsOverview');
1853 SELECT tst_active.tries, tst_active.last_finished_pass, tst_sequence.pass 1855 LEFT JOIN tst_sequence 1856 ON tst_sequence.active_fi = tst_active.active_id 1857 AND tst_sequence.pass = tst_active.tries 1858 WHERE tst_active.active_id = {$ilDB->quote($active_fi, 'integer')} 1863 $tries =
$row[
'tries'];
1864 $lastFinishedPass = is_numeric(
$row[
'last_finished_pass']) ?
$row[
'last_finished_pass'] : -1;
1866 if(
$pass < $lastFinishedPass )
1868 $isActivePass =
false;
1869 $must_renumber =
true;
1871 elseif(
$pass == $lastFinishedPass )
1873 $isActivePass =
false;
1875 if( $tries ==
$row[
'pass'] )
1877 $must_renumber =
true;
1881 $must_renumber =
false;
1886 $isActivePass =
true;
1887 $must_renumber =
false;
1891 throw new ilTestException (
'This should not happen, please contact Bjoern Heyser to clean up this pass salad!');
1894 if( !$this->
object->isDynamicTest() && $isActivePass )
1896 $this->ctrl->redirect($this,
'outUserResultsOverview');
1900 ($lastFinishedPass == 0 && $tries == 1 && $tries !=
$row[
'pass'])
1901 || ($isActivePass ==
true)
1918 WHERE active_id = ' . $ilDB->quote($active_fi,
'integer')
1921 elseif( !$isActivePass )
1925 SET tries = ' . $ilDB->quote($tries-1,
'integer') .
', 1926 last_finished_pass = ' . $ilDB->quote($lastFinishedPass-1,
'integer') .
' 1927 WHERE active_id = ' . $ilDB->quote($active_fi,
'integer')
1934 WHERE active_fi = ' . $ilDB->quote($active_fi,
'integer') .
' 1935 AND pass = ' . $ilDB->quote(
$pass,
'integer')
1941 'UPDATE tst_manual_fb 1943 WHERE active_fi = ' . $ilDB->quote($active_fi,
'integer').
' 1944 AND pass > ' . $ilDB->quote(
$pass,
'integer')
1953 FROM tst_pass_result 1954 WHERE active_fi = ' . $ilDB->quote($active_fi,
'integer') .
' 1955 AND pass = ' . $ilDB->quote(
$pass,
'integer')
1961 'UPDATE tst_pass_result 1963 WHERE active_fi = ' . $ilDB->quote($active_fi,
'integer').
' 1964 AND pass > ' . $ilDB->quote(
$pass,
'integer')
1977 WHERE active_fi = ' . $ilDB->quote($active_fi,
'integer') .
' 1978 AND pass = ' . $ilDB->quote(
$pass,
'integer')
1984 'UPDATE tst_sequence 1986 WHERE active_fi = ' . $ilDB->quote($active_fi,
'integer').
' 1987 AND pass > ' . $ilDB->quote(
$pass,
'integer')
1991 if( $this->
object->isDynamicTest() )
1994 'tst_seq_qst_tracking',
'tst_seq_qst_answstatus',
'tst_seq_qst_postponed',
'tst_seq_qst_checked' 1997 foreach($tables as $table)
2001 WHERE active_fi = {$ilDB->quote($active_fi, 'integer')} 2002 AND pass = {$ilDB->quote($pass, 'integer')} 2005 if( $must_renumber )
2010 WHERE active_fi = {$ilDB->quote($active_fi, 'integer')} 2011 AND pass > {$ilDB->quote($pass, 'integer')} 2021 WHERE active_fi = ' . $ilDB->quote($active_fi,
'integer') .
' 2022 AND pass = ' . $ilDB->quote(
$pass,
'integer')
2028 'UPDATE tst_solutions 2030 WHERE active_fi = ' . $ilDB->quote($active_fi,
'integer').
' 2031 AND pass > ' . $ilDB->quote(
$pass,
'integer')
2038 FROM tst_test_result 2039 WHERE active_fi = ' . $ilDB->quote($active_fi,
'integer') .
' 2040 AND pass = ' . $ilDB->quote(
$pass,
'integer')
2046 'UPDATE tst_test_result 2048 WHERE active_fi = ' . $ilDB->quote($active_fi,
'integer') .
' 2049 AND pass > ' . $ilDB->quote(
$pass,
'integer')
2059 WHERE active_fi = ' . $ilDB->quote($active_fi,
'integer') .
' 2060 AND pass = ' . $ilDB->quote(
$pass,
'integer')
2068 WHERE active_fi = ' . $ilDB->quote($active_fi,
'integer').
' 2069 AND pass > ' . $ilDB->quote(
$pass,
'integer')
2073 require_once
'Modules/Test/classes/class.ilObjAssessmentFolder.php';
2080 require_once
'./Modules/TestQuestionPool/classes/class.assQuestion.php';
2083 if( $this->
object->isDynamicTest() )
2085 require_once
'Modules/Test/classes/tables/class.ilTestDynamicQuestionSetStatisticTableGUI.php';
2094 global
$ilDB, $ilPluginAdmin;
2096 $resultData = $this->
object->getTestResult($active_id,
$pass,
false, $considerHiddenQuestions);
2097 $questionIds =
array();
2098 foreach($resultData as $resultItemKey => $resultItemValue)
2100 if($resultItemKey ===
'test' || $resultItemKey ===
'pass')
2105 $questionIds[] = $resultItemValue[
'qid'];
2109 $table_gui->initFilter();
2111 require_once
'Modules/TestQuestionPool/classes/class.ilAssQuestionList.php';
2114 $questionList->setIncludeQuestionIdsFilter($questionIds);
2115 $questionList->setQuestionInstanceTypeFilter(null);
2117 foreach ($table_gui->getFilterItems() as $item)
2119 if( substr($item->getPostVar(), 0, strlen(
'tax_')) ==
'tax_' )
2121 $v = $item->getValue();
2123 if( is_array($v) && count($v) && !(
int)$v[0] )
2128 $taxId = substr($item->getPostVar(), strlen(
'tax_'));
2129 $questionList->addTaxonomyFilter($taxId, $item->getValue(), $this->
object->getId(),
'tst');
2131 elseif( $item->getValue() !== false )
2133 $questionList->addFieldFilter($item->getPostVar(), $item->getValue());
2137 $questionList->load();
2139 $filteredTestResult =
array();
2141 foreach($resultData as $resultItemKey => $resultItemValue)
2143 if($resultItemKey ===
'test' || $resultItemKey ===
'pass')
2148 if( !$questionList->isInList($resultItemValue[
'qid']) )
2153 $filteredTestResult[] = $resultItemValue;
2156 return $filteredTestResult;
2161 require_once
'Services/Utilities/classes/class.ilConfirmationGUI.php';
2163 $cgui->setFormAction($this->ctrl->getFormAction($this,
"participants"));
2164 $cgui->setHeaderText($this->lng->txt(
"finish_pass_for_user_confirmation"));
2165 $cgui->setCancel($this->lng->txt(
"cancel"),
"redirectBackToParticipantsScreen");
2166 $cgui->setConfirm($this->lng->txt(
"proceed"),
"confirmFinishTestPassForUser");
2167 $this->tpl->setContent($cgui->getHTML());
2172 require_once
'Modules/Test/classes/class.ilTestPassFinishTasks.php';
2173 $active_id = (int)
$_GET[
"active_id"];
2180 require_once
'Services/Utilities/classes/class.ilConfirmationGUI.php';
2182 $cgui->setFormAction($this->ctrl->getFormAction($this,
"participants"));
2183 $cgui->setHeaderText($this->lng->txt(
"finish_pass_for_all_users"));
2184 $cgui->setCancel($this->lng->txt(
"cancel"),
"redirectBackToParticipantsScreen");
2185 $cgui->setConfirm($this->lng->txt(
"proceed"),
"confirmFinishTestPassForAllUser");
2186 $this->tpl->setContent($cgui->getHTML());
2191 require_once
'Modules/Test/classes/class.ilTestPassFinishTasks.php';
2192 $participants = $this->
object->getTestParticipants();
2193 foreach($participants as $participant)
2195 if(array_key_exists(
'unfinished_passes', $participant) && $participant[
'unfinished_passes'] == 1)
2205 $this->processLockerFactory->setActiveId($active_id);
2206 $processLocker = $this->processLockerFactory->getLocker();
2209 $test_pass_finisher->performFinishTasks($processLocker);
2214 $this->ctrl->redirectByClass(
"ilobjtestgui",
"participants");
static _lookupName($a_user_id)
lookup user name
static _instanciateQuestion($question_id)
Creates an instance of a question with a given question id.
static _updateTestResultCache($active_id, ilAssQuestionProcessLocker $processLocker=null)
Move this to a proper place.
Class ilTestPassFinishTasks.
singleResults()
Creates user results for single questions.
getFilteredTestResult($active_id, $pass, $considerHiddenQuestions, $considerOptionalQuestions)
setContextResultPresentation($contextResultPresentation)
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.
setValue($a_value)
Set Value.
exportEvaluation()
Exports the evaluation data to a selected file format.
confirmFinishTestPassForAllUser()
outCertificate()
Output of a test certificate.
static _isComplete($adapter)
Checks the status of the certificate.
exportCertificate()
Exports the user results as PDF certificates using XSL-FO via XML:RPC calls.
outParticipantsResultsOverview()
Output of the pass overview for a test called from the statistics.
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
getObjectiveOrientedContainer()
passDetails()
Output of the learners view of an existing test pass.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
TableGUI class for results by question.
executeCommand()
execute command
exportAggregatedResults()
Exports the aggregated results.
Interface ilObjFileHandlingQuestionType.
outUserResultsOverview()
Output of the pass overview for a test called by a test participant.
getResultsSignature()
Returns HTML code for a signature field.
TableGUI class for evaluation of all users.
__construct(ilObjTest $a_object)
ilTestEvaluationGUI constructor
confirmFinishTestPassForUser()
static getASCIIFilename($a_filename)
convert utf8 to ascii filename
Base Exception for all Exceptions relating to Modules/Test.
isGradingMessageRequired()
buildUserTestResultsToolbarGUI()
setTitle($a_title, $a_icon=0, $a_icon_alt=0)
Set title and title icon.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
if(@file_exists(dirname(__FILE__).'/lang/eng.php')) $certificate
buildQuestionRelatedObjectivesList(ilLOTestQuestionAdapter $objectivesAdapter, ilTestQuestionSequence $testSequence)
static _getLogLanguage()
retrieve the log language for assessment logging
getEvaluationQuestionId($question_id, $original_id="")
Returns the ID of a question for evaluation purposes.
static getInstance(ilTestSession $a_test_session)
static _enabledAssessmentLogging()
check wether assessment logging is enabled or not
finishTestPass($active_id, $obj_id)
getPassDetailsOverviewTableGUI($result_array, $active_id, $pass, $targetGUI, $targetCMD, $questionDetailsCMD, $questionAnchorNav, ilTestQuestionRelatedObjectivesList $objectivesList=null, $multipleObjectivesInvolved=true)
if(!is_array($argv)) $options
const CONTEXT_PASS_OVERVIEW
outParticipantsPassDetails()
Output of the pass details of an existing test pass for the test statistics.
outUserPassDetailsResetTableFilter()
static _getResultPass($active_id)
Retrieves the pass number that should be counted for a given user.
getCommand($cmd)
Retrieves the ilCtrl command.
special template class to simplify handling of ITX/PEAR
finishTestPassForSingleUser()
static formatDate(ilDateTime $date)
Format a date public.
Output class for assessment test evaluation.
redirectBackToParticipantsScreen()
Create styles array
The data for the language used.
const CONTEXT_INFO_SCREEN
exportFileUploadsForAllParticipants()
Creates a ZIP file containing all file uploads for a given question in a test.
static prepareGeneration()
Prepare the PDF generation This initializes the purpose for MathJax rendering It has to be called bef...
detailedEvaluation()
Creates the detailed evaluation output for a selected participant.
redirectToPassDeletionContext($context)
buildPassDetailsOverviewTableGUI($targetGUI, $targetCMD)
This class represents a non editable value in a property form.
Create new PHPExcel object
obj_idprivate
getGradingMessageBuilder($activeId)
Class ilTestDetailedEvaluationStatisticsTableGUI.
static generatePDF($pdf_output, $output_mode, $filename=null)
exportQuestionForAllParticipants()
Creates a PDF representation of the answers for a given question in a test.
populatePassFinishDate($tpl, $passFinishDate)
outUserPassDetails()
Output of the pass details of an existing test pass for the active test participant.
Service GUI class for tests.
static _lookupFields($a_user_id)
lookup fields (deprecated; use more specific methods instead)
getAdditionalUsrDataHtmlAndPopulateWindowTitle($testSession, $active_id, $overwrite_anonymity=FALSE)
Returns the user data for a test results output.
buildPassOverviewTableGUI($targetGUI, $targetCmd='')
outUserListOfAnswerPasses()
Output of the pass overview for a user when he/she wants to see his/her list of answers.
const PDF_OUTPUT_DOWNLOAD
outUserPassDetailsSetTableFilter()
const CONTEXT_DYN_TEST_PLAYER
Test certificate adapter.
getPassOverviewTableData(ilTestSession $testSession, $passes, $withResults)
getQuestionResultForTestUsers($question_id, $test_id)
Creates a HTML representation for the results of a given question in a test.
Confirmation screen class.
static lookupExamId($active_id, $pass)