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(),
313 'started' => ($participant->getActiveId() > 0) ? 1 : 0,
314 'unfinished' => $participant->hasUnfinishedPasses() ? 1 : 0,
315 'finished' => $participant->isTestFinished() ? 1 : 0,
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(),
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.
getParticipantsTableRows()
buildInviteeFullname(ilTestParticipant $participant)
getScoredParticipantList()
getParticipantByUsrId($usrId)
lookupNrOfTries($activeId)
buildFullname(ilTestParticipant $participant)
addParticipant(ilTestParticipant $participant)
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...
__construct(ilObjTest $testObj)
isActiveIdInList($activeId)
static lookupLastTestPassAccess($activeId, $passIndex)
getParticipantByActiveId($activeId)
buildParticipantsFullname(ilTestParticipant $participant)
initializeFromDbRows($dbRows)
lookupLastAccess($activeId)
getAccessFilteredList(callable $userAccessFilter)