19declare(strict_types=1);
36 protected UIFactory $ui_factory,
37 protected UIRenderer $ui_renderer
49 return array_keys($eval->getParticipant($active_id)->getPasses());
55 $eval = $this->retrieveResultData($test_obj);
56 $found_participants = $eval->getParticipants();
57 if ($found_participants === []) {
62 $total_passed_reached = 0.0;
63 $total_passed_max = 0.0;
64 $total_passed_time = 0;
65 foreach ($found_participants as $userdata) {
66 if ($userdata->getMark()?->getPassed()) {
68 $total_passed_reached += $userdata->getReached();
69 $total_passed_max += $userdata->getMaxpoints();
70 $total_passed_time += $userdata->getTimeOnTask();
74 return new TestOverview(
76 count($found_participants),
77 $eval->getTotalFinishedParticipants(),
81 $eval->getStatistics()->rankMedian(),
82 $eval->getStatistics()->getEvaluationDataOfMedianUser()?->getMark()?->getShortName() ??
'',
83 $eval->getStatistics()->median(),
84 $total_passed === 0 ? 0 : $total_passed_reached / $total_passed
89 ResultPresentationSettings $settings,
94 $eval = $this->retrieveResultData($test_obj);
95 $found_participants = $eval->getParticipants();
96 $participant_data = $eval->getParticipant($active_id);
97 if ($attempt_id ===
null) {
98 $attempt_id = $participant_data?->getScoredPass();
100 if ($found_participants === []
101 || $attempt_id ===
null) {
105 $attempt_data = $participant_data?->getPass($attempt_id);
106 if ($attempt_data ===
null) {
110 return new AttemptOverview(
114 $attempt_data->getExamId(),
115 $attempt_data->getReachedPoints(),
116 $attempt_data->getMaxPoints(),
117 $attempt_data->getMark(),
118 $attempt_data->getAnsweredQuestionCount(),
119 $attempt_data->getQuestionCount(),
120 $attempt_data->getWorkingTime(),
121 $participant_data->getTimeOnTask(),
122 $attempt_data->getStartTime(),
123 $attempt_data->getLastAccessTime(),
124 $participant_data->getPassCount(),
125 $participant_data->getScoredPass(),
126 $eval->getStatistics()->rank($participant_data->getReached()),
127 $attempt_data->getStatusOfAttempt()
137 ResultPresentationSettings $settings,
143 if ($v->getActiveId() === null) {
147 $scored_attempt = $this->getAttemptOverviewFor(
154 if ($scored_attempt !==
null
155 && $scored_attempt->getStatusOfAttempt() === StatusOfAttempt::RUNNING
156 && $scored_attempt->getStartedDate() !==
null) {
157 $v = $v->withRunningAttemptStart($scored_attempt->getStartedDate());
160 return $v->withAttemptOverviewInformation(
169 ResultPresentationSettings $settings,
175 return $this->buildAttemptResults(
185 ResultPresentationSettings $settings,
191 $question_results = [];
197 $settings->getShowHiddenQuestions(),
198 $settings->getShowOptionalQuestions()
202 $show_question_only = $settings->getQuestionTextOnly();
204 foreach (
$results as $idx => $qresult) {
205 if (!is_numeric($idx)) {
209 $qid = $qresult[
'qid'];
210 $type = $qresult[
'type'];
211 $title = $qresult[
'title'];
212 $question_score = $qresult[
'max'];
213 $usr_score = $qresult[
'reached'];
214 $workedthrough = (bool) $qresult[
'workedthrough'];
215 $answered = (bool) $qresult[
'answered'];
218 $shuffle_trafo = $this->shuffler->getAnswerShuffleFor($qid, $active_id, $attempt_id);
219 $question = $question_gui->getObject();
220 $question->setShuffler($shuffle_trafo);
221 $question_gui->setObject($question);
223 $show_feedback = $settings->getShowFeedback();
224 $usr_solution = $question_gui->getSolutionOutput(
238 $type ===
'assTextQuestion'
240 $usr_solution .= $question_gui->getAutoSavedSolutionOutput(
254 $best_solution = $question_gui->getSolutionOutput(
267 if ($show_question_only) {
268 $usr_solution = $this->ui_renderer->render($this->ui_factory->legacy()->content(
'<div class="ilc_question_Standard">' . $usr_solution .
'</div>'));
269 $best_solution = $this->ui_renderer->render($this->ui_factory->legacy()->content(
'<div class="ilc_question_Standard">' . $best_solution .
'</div>'));
272 $feedback = $question_gui->getGenericFeedbackOutput($active_id, $attempt_id);
274 $recapitulation = $is_user_output && $settings->getShowRecapitulation()
275 ? $question->getSuggestedSolutionOutput()
303 if (!isset($this->test_data[$test_obj->
getId()])) {
307 return $this->test_data[$test_obj->
getId()];
Builds a Color from either hex- or rgb values.
__construct(protected \ilTestShuffler $shuffler, protected UIFactory $ui_factory, protected UIRenderer $ui_renderer)
buildAttemptResults(ResultPresentationSettings $settings, \ilObjTest $test_obj, int $active_id, int $attempt_id, bool $is_user_output)
getAttemptIdsArrayFor(\ilObjTest $test_obj, int $active_id)
getAttemptOverviewFor(ResultPresentationSettings $settings, \ilObjTest $test_obj, int $active_id, ?int $attempt_id)
addAttemptOverviewInformationToParticipants(ResultPresentationSettings $settings, \ilObjTest $test_obj, array $participants)
retrieveResultData(\ilObjTest $test_obj)
getOverviewDataForTest(\ilObjTest $test_obj)
getAttemptResultsFor(ResultPresentationSettings $settings, \ilObjTest $test_obj, int $active_id, int $attempt_id, bool $is_user_output)
createQuestionGUI($question_type, $question_id=-1)
Creates a question GUI instance of a given question type.
getTestResult(int $active_id, ?int $attempt=null, bool $ordered_sequence=false, bool $consider_hidden_questions=true, bool $consider_optional_questions=true)
Calculates the results of a test for a given user and returns an array with all test results.
evalTotalStartedAverageTime(?array $active_ids_to_filter=null)
getCompleteEvaluationData($filterby='', $filtertext='')
return['delivery_method'=> 'php',]
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
An entity that renders components to a string output.
if(!file_exists('../ilias.ini.php'))