68 $this->participants[] = $participant;
73 foreach ($this as $participant) {
74 if ($participant->getUsrId() != $usrId) {
85 foreach ($this as $participant) {
86 if ($participant->getActiveId() != $activeId) {
100 foreach ($this as $participant) {
101 if ($participant->hasUnfinishedPasses()) {
114 foreach ($this as $participant) {
127 foreach ($this as $participant) {
128 $usrIds[] = $participant->getUsrId();
136 $activeIds = array();
138 foreach ($this as $participant) {
139 $activeIds[] = $participant->getActiveId();
147 foreach ($this as $participant) {
148 if ($participant->getActiveId() == $activeId) {
158 $usrIds = call_user_func_array($userAccessFilter, [$this->
getAllUserIds()]);
160 $accessFilteredList =
new self($this->
getTestObj());
162 foreach ($this as $participant) {
163 if (in_array($participant->getUsrId(), $usrIds)) {
164 $participant = clone $participant;
165 $accessFilteredList->addParticipant($participant);
169 return $accessFilteredList;
174 return current($this->participants);
178 return next($this->participants);
182 return key($this->participants);
186 return key($this->participants) !==
null;
190 return reset($this->participants);
198 foreach ($dbRows as $rowKey => $rowData) {
201 if ((
int) $rowData[
'active_id']) {
202 $participant->setActiveId((
int) $rowData[
'active_id']);
205 $participant->setUsrId((
int) $rowData[
'usr_id']);
207 $participant->setLogin($rowData[
'login']);
208 $participant->setLastname($rowData[
'lastname']);
209 $participant->setFirstname($rowData[
'firstname']);
210 $participant->setMatriculation($rowData[
'matriculation']);
212 $participant->setActiveStatus((
bool) ($rowData[
'active'] ??
false));
214 if (isset($rowData[
'clientip'])) {
215 $participant->setClientIp($rowData[
'clientip']);
218 $participant->setFinishedTries((
int) $rowData[
'tries']);
219 $participant->setTestFinished((
bool) $rowData[
'test_finished']);
220 $participant->setUnfinishedPasses((
bool) $rowData[
'unfinished_passes']);
231 require_once
'Modules/Test/classes/class.ilTestParticipantScoring.php';
233 $scoredParticipantList =
new self($this->
getTestObj());
239 while ($row =
$DIC->database()->fetchAssoc(
$res)) {
242 $scoring->setActiveId((
int) $row[
'active_fi']);
243 $scoring->setScoredPass((
int) $row[
'pass']);
245 $scoring->setAnsweredQuestions((
int) $row[
'answeredquestions']);
246 $scoring->setTotalQuestions((
int) $row[
'questioncount']);
248 $scoring->setReachedPoints((
float) $row[
'reached_points']);
249 $scoring->setMaxPoints((
float) $row[
'max_points']);
251 $scoring->setPassed((
bool) $row[
'passed']);
252 $scoring->setFinalMark((
string) $row[
'mark_short']);
256 $scoredParticipantList->addParticipant(
261 return $scoredParticipantList;
268 $IN_activeIds =
$DIC->database()->in(
275 if (
false && !$this->
getTestObj()->isDynamicTest()) {
276 $closedScoringsOnly =
"
277 INNER JOIN tst_active tact
278 ON tact.active_id = tres.active_fi
279 AND tact.last_finished_pass = tact.last_started_pass
282 $closedScoringsOnly =
'';
286 SELECT * FROM tst_result_cache tres
288 INNER JOIN tst_pass_result pres
289 ON pres.active_fi = tres.active_fi
290 AND pres.pass = tres.pass
304 foreach ($this as $participant) {
306 'usr_id' => $participant->getUsrId(),
307 'active_id' => $participant->getActiveId(),
308 'login' => $participant->getLogin(),
309 'clientip' => $participant->getClientIp(),
310 'firstname' => $participant->getFirstname(),
311 'lastname' => $participant->getLastname(),
312 'name' => $this->buildFullname($participant),
313 'started' => ($participant->getActiveId() > 0) ? 1 : 0,
314 'unfinished' => $participant->hasUnfinishedPasses() ? 1 : 0,
315 'finished' => $participant->isTestFinished() ? 1 : 0,
316 'access' => $this->lookupLastAccess($participant->getActiveId()),
317 'tries' => $this->lookupNrOfTries($participant->getActiveId())
330 foreach ($this as $participant) {
331 if (!$participant->hasScoring()) {
336 'usr_id' => $participant->getUsrId(),
337 'active_id' => $participant->getActiveId(),
338 'login' => $participant->getLogin(),
339 'firstname' => $participant->getFirstname(),
340 'lastname' => $participant->getLastname(),
341 'name' => $this->buildFullname($participant)
344 if ($participant->getScoring()) {
345 $row[
'scored_pass'] = $participant->getScoring()->getScoredPass();
346 $row[
'answered_questions'] = $participant->getScoring()->getAnsweredQuestions();
347 $row[
'total_questions'] = $participant->getScoring()->getTotalQuestions();
348 $row[
'reached_points'] = $participant->getScoring()->getReachedPoints();
349 $row[
'max_points'] = $participant->getScoring()->getMaxPoints();
350 $row[
'percent_result'] = $participant->getScoring()->getPercentResult();
351 $row[
'passed_status'] = $participant->getScoring()->isPassed();
352 $row[
'final_mark'] = $participant->getScoring()->getFinalMark();
354 $participant->getActiveId(),
355 $participant->getScoring()->getScoredPass()
357 $row[
'finished_passes'] = $participant->getFinishedTries();
358 $row[
'has_unfinished_passes'] = $participant->hasUnfinishedPasses();
375 if ($maxPassIndex !==
null) {
376 $nrOfTries = $maxPassIndex + 1;
393 return $this->
getTestObj()->_getLastAccess($activeId);
418 return $DIC->language()->txt(
"deleted_user");
422 return $DIC->language()->txt(
'anonymous');
434 require_once
'Modules/Test/classes/class.ilObjTestAccess.php';
static _getParticipantData($active_id)
Retrieves a participant name from active id.
static lookupLastTestPassAccess($activeId, $passIndex)
static _getMaxPass($active_id)
Retrieves the maximum pass of a given user for a given test in which the user answered at least one q...
buildParticipantsFullname(ilTestParticipant $participant)
getParticipantsTableRows()
isActiveIdInList($activeId)
lookupLastAccess($activeId)
buildInviteeFullname(ilTestParticipant $participant)
getAccessFilteredList(callable $userAccessFilter)
getScoredParticipantList()
initializeFromDbRows($dbRows)
addParticipant(ilTestParticipant $participant)
getParticipantByActiveId($activeId)
lookupNrOfTries($activeId)
buildFullname(ilTestParticipant $participant)
__construct(ilObjTest $testObj)
getParticipantByUsrId($usrId)