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';
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;
289 $table_gui->setData(
$data);
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';
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);
462 $medianField->setValue($median);
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');
594 $export_type->setOptions(array(
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);
606 array_push(
$data, array(
607 'result' => $this->lng->txt(
"tst_eval_total_persons"),
608 'value' => count($foundParticipants)
610 $total_finished = $this->
object->evalTotalFinished();
611 array_push(
$data, array(
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;
621 array_push(
$data, array(
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;
642 array_push(
$data, array(
643 'result' => $this->lng->txt(
"tst_eval_total_passed"),
644 'value' => $total_passed
646 array_push(
$data, array(
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;
656 array_push(
$data, array(
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();
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))
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']) )
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)
2197 $this->
finishTestPass($participant[
'active_id'], $this->object->getId());
2205 $this->processLockerFactory->setActiveId($active_id);
2206 $processLocker = $this->processLockerFactory->getLocker();
2209 $test_pass_finisher->performFinishTasks($processLocker);
2214 $this->ctrl->redirectByClass(
"ilobjtestgui",
"participants");
sprintf('%.4f', $callTime)
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)
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 _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)
redirectBackToParticipantsScreen()
finishTestPass($active_id, $obj_id)
outUserPassDetailsSetTableFilter()
Base Exception for all Exceptions relating to Modules/Test.
const PDF_OUTPUT_DOWNLOAD
static generatePDF($pdf_output, $output_mode, $filename=null)
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.
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.
buildUserTestResultsToolbarGUI()
setContextResultPresentation($contextResultPresentation)
buildQuestionRelatedObjectivesList(ilLOTestQuestionAdapter $objectivesAdapter, ilTestQuestionSequence $testSequence)
getPassOverviewTableData(ilTestSession $testSession, $passes, $withResults)
isGradingMessageRequired()
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.
Interface ilObjFileHandlingQuestionType.
if(!is_array($argv)) $options