59 foreach ($this->complete_data->getParticipants() as $active_id => $userdata) {
60 $datarow = $headerrow;
61 if ($this->passedonly && !$userdata->getPassed()) {
66 $datarow2[] = $counter;
68 $datarow2[] = $userdata->getName();
69 $datarow2[] = $userdata->getLogin();
73 if ($userdata->getUserID() !== null) {
76 foreach ($this->additionalFields as $fieldname) {
77 if ($fieldname ===
'gender') {
78 $datarow2[] = isset($userfields[$fieldname]) && $userfields[$fieldname] !==
'' 79 ? $this->
lng->txt(
'gender_' . $userfields[$fieldname])
81 } elseif ($fieldname ===
'exam_id') {
82 $datarow2[] = $userdata->getExamIdFromScoredPass();
84 $datarow2[] = $userfields[$fieldname] ??
'';
88 $datarow2[] = $userdata->getReached();
89 $datarow2[] = $userdata->getMaxpoints();
90 $datarow2[] = $userdata->getMark();
91 $datarow2[] = $userdata->getQuestionsWorkedThrough();
92 $datarow2[] = $userdata->getNumberOfQuestions();
93 $datarow2[] = $userdata->getQuestionsWorkedThroughInPercent() / 100.0;
94 $time = $userdata->getTimeOfWork();
95 $time_seconds = $time;
96 $time_hours = floor($time_seconds / 3600);
97 $time_seconds -= $time_hours * 3600;
98 $time_minutes = floor($time_seconds / 60);
99 $time_seconds -= $time_minutes * 60;
100 $datarow2[] = sprintf(
"%02d:%02d:%02d", $time_hours, $time_minutes, $time_seconds);
101 $time = $userdata->getQuestionsWorkedThrough() ? $this->complete_data->getParticipant(
103 )->getTimeOfWork() / $userdata->getQuestionsWorkedThrough() : 0;
104 $time_seconds = $time;
105 $time_hours = floor($time_seconds / 3600);
106 $time_seconds -= $time_hours * 3600;
107 $time_minutes = floor($time_seconds / 60);
108 $time_seconds -= $time_minutes * 60;
109 $datarow2[] = sprintf(
"%02d:%02d:%02d", $time_hours, $time_minutes, $time_seconds);
111 $fv = $userdata->getFirstVisit();
112 $lv = $userdata->getLastVisit();
113 foreach ([$fv, $lv] as $ts) {
116 $datarow2[] = $visit;
122 $median = $this->complete_data->getStatistics()->getStatistics()->median();
123 $pct = $userdata->getMaxpoints() ? $median / $this->complete_data->getParticipant(
125 )->getMaxpoints() * 100.0 : 0;
127 $mark_short_name =
"";
128 if (is_object($mark)) {
129 $mark_short_name = $mark->getShortName();
131 $datarow2[] = $mark_short_name;
132 $datarow2[] = $this->complete_data->getStatistics()->getStatistics()->rank(
133 $userdata->getReached()
135 $datarow2[] = $this->complete_data->getStatistics()->getStatistics()->rank_median();
136 $datarow2[] = $this->complete_data->getStatistics()->getStatistics()->count();
137 $datarow2[] = $median;
139 $datarow2[] = $userdata->getPassCount();
140 $datarow2[] = $userdata->getFinishedPasses();
142 $datarow2[] = $userdata->getBestPass() + 1;
144 $datarow2[] = $userdata->getLastPass() + 1;
148 $datarow = $datarow2;
150 $datarow2 = array_map(
static fn($entry) =>
'', $datarow2);
153 for ($pass = 0; $pass <= $userdata->getLastPass(); $pass++) {
157 || $this->scoredonly && $pass !== $userdata->getScoredPass()) {
161 if ($shown_pass > 0) {
162 for ($i = 1, $iMax = count($headerrow); $i < $iMax; $i++) {
168 $datarow2[] = $pass + 1;
169 if (is_object($userdata)
171 $evaluated_questions = $userdata->getQuestions($pass)
175 foreach ($questions as $question) {
176 $question_data = $userdata->getPass(
178 )->getAnsweredQuestionByQuestionId($question[
"id"]);
179 if (is_null($question_data)) {
180 $question_data = [
'reached' => 0];
182 $datarow2[] = $question_data[
"reached"];
183 $datarow[] = preg_replace(
"/<.*?>/",
"", $this->complete_data->getQuestionTitle($question[
"id"]));
186 if (($counter === 1 && $shown_pass === 0) || $test_obj->
isRandomTest()) {
buildStatisticsAccessFilteredParticipantList()
static lookupPassResultsUpdateTimestamp($active_id, $pass)
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false)
orderQuestions(array $questions)
isRandomTest()
Returns the fact wether this test is a random questions test or not.
getHeaderRow(ilLanguage $lng, ilObjTest $test_obj)
getMarkSchema()
{ASS_MarkSchema}
static _lookupFields(int $a_user_id)
lookup fields (deprecated; use more specific methods instead)
setAccessFilteredParticipantList(ilTestParticipantList $access_filtered_participant_list)
getPassScoring()
Gets the pass scoring type.