19 declare(strict_types=1);
47 return $this->test_obj;
52 $this->test_obj = $test_obj;
57 $this->participants[] = $participant;
62 foreach ($this as $participant) {
63 if ($participant->getUsrId() != $usr_id) {
74 foreach ($this as $participant) {
75 if ($participant->getActiveId() != $active_id) {
86 foreach ($this as $participant) {
87 if ($participant->hasUnfinishedPasses()) {
97 foreach ($this as $participant) {
110 foreach ($this as $participant) {
111 $usrIds[] = $participant->getUsrId();
119 $activeIds = array();
121 foreach ($this as $participant) {
122 $activeIds[] = $participant->getActiveId();
130 foreach ($this as $participant) {
131 if ($participant->getActiveId() == $active_id) {
145 foreach ($this as $participant) {
146 if (in_array($participant->getUsrId(), $usr_ids)) {
147 $participant = clone $participant;
148 $access_filtered_list->addParticipant($participant);
152 return $access_filtered_list;
157 return current($this->participants);
161 next($this->participants);
165 return key($this->participants);
169 return key($this->participants) !== null;
173 reset($this->participants);
178 foreach ($db_rows as $row_data) {
181 if ((
int) $row_data[
'active_id']) {
182 $participant->setActiveId((
int) $row_data[
'active_id']);
185 $participant->setUsrId((
int) $row_data[
'usr_id']);
187 $participant->setLogin($row_data[
'login'] ??
'');
188 $participant->setLastname($row_data[
'lastname']);
189 $participant->setFirstname($row_data[
'firstname'] ??
'');
190 $participant->setMatriculation($row_data[
'matriculation'] ??
'');
192 $participant->setActiveStatus((
bool) ($row_data[
'active'] ??
false));
194 if (isset($row_data[
'clientip'])) {
195 $participant->setClientIp($row_data[
'clientip']);
198 $participant->setFinishedTries((
int) $row_data[
'tries']);
199 $participant->setTestFinished((
bool) $row_data[
'test_finished']);
200 $participant->setUnfinishedPasses((
bool) $row_data[
'unfinished_passes']);
212 while ($row = $this->db->fetchAssoc(
$res)) {
215 $scoring->setActiveId((
int) $row[
'active_fi']);
216 $scoring->setScoredPass((
int) $row[
'pass']);
218 $scoring->setAnsweredQuestions((
int) $row[
'answeredquestions']);
219 $scoring->setTotalQuestions((
int) $row[
'questioncount']);
221 $scoring->setReachedPoints((
float) $row[
'reached_points']);
222 $scoring->setMaxPoints((
float) $row[
'max_points']);
224 $scoring->setPassed((
bool) $row[
'passed']);
225 $scoring->setFinalMark((
string) $row[
'mark_short']);
229 $scored_participant_list->addParticipant(
234 return $scored_participant_list;
239 $IN_activeIds = $this->db->in(
247 SELECT * FROM tst_result_cache tres 249 INNER JOIN tst_pass_result pres 250 ON pres.active_fi = tres.active_fi 251 AND pres.pass = tres.pass 262 foreach ($this as $participant) {
264 'usr_id' => $participant->getUsrId(),
265 'active_id' => $participant->getActiveId(),
266 'login' => $participant->getLogin(),
267 'clientip' => $participant->getClientIp(),
268 'firstname' => $participant->getFirstname(),
269 'lastname' => $participant->getLastname(),
271 'started' => ($participant->getActiveId() > 0) ? 1 : 0,
272 'unfinished' => $participant->hasUnfinishedPasses() ? 1 : 0,
273 'finished' => $participant->isTestFinished() ? 1 : 0,
288 foreach ($this as $participant) {
289 if (!$participant->hasScoring()) {
294 'usr_id' => $participant->getUsrId(),
295 'active_id' => $participant->getActiveId(),
296 'login' => $participant->getLogin(),
297 'firstname' => $participant->getFirstname(),
298 'lastname' => $participant->getLastname(),
302 if ($participant->getScoring()) {
303 $row[
'scored_pass'] = $participant->getScoring()->getScoredPass();
304 $row[
'answered_questions'] = $participant->getScoring()->getAnsweredQuestions();
305 $row[
'total_questions'] = $participant->getScoring()->getTotalQuestions();
306 $row[
'reached_points'] = $participant->getScoring()->getReachedPoints();
307 $row[
'max_points'] = $participant->getScoring()->getMaxPoints();
308 $row[
'percent_result'] = $participant->getScoring()->getPercentResult();
309 $row[
'passed_status'] = $participant->getScoring()->isPassed();
310 $row[
'final_mark'] = $participant->getScoring()->getFinalMark();
311 $row[
'scored_pass_finished_timestamp'] = ilObjTest::lookupLastTestPassAccess(
312 $participant->getActiveId(),
313 $participant->getScoring()->getScoredPass()
315 $row[
'finished_passes'] = $participant->getFinishedTries();
316 $row[
'has_unfinished_passes'] = $participant->hasUnfinishedPasses();
327 if ($active_id === null) {
333 if ($max_pass_index === null) {
337 return $max_pass_index + 1;
342 if ($active_id === null) {
346 return $this->
getTestObj()->_getLastAccess($active_id);
351 if ($this->
getTestObj()->getMainSettings()->getAccessSettings()->getFixedParticipants() && !$participant->
getActiveId()) {
361 return $this->
lng->txt(
"deleted_user");
365 return $this->
lng->txt(
'anonymous');
static _getParticipantData($active_id)
Retrieves a participant name from active id.
getParticipantsTableRows()
buildInviteeFullname(ilTestParticipant $participant)
getScoredParticipantList()
getParticipantByUsrId(int $usr_id)
setTestObj(ilObjTest $test_obj)
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(private ilObjTest $test_obj, private ilObjUser $user, private ilLanguage $lng, private ilDBInterface $db)
isActiveIdInList(int $active_id)
getParticipantByActiveId($active_id)
lookupNrOfTries(?int $active_id)
buildParticipantsFullname(ilTestParticipant $participant)
lookupLastAccess(?int $active_id)
initializeFromDbRows(array $db_rows)
getAccessFilteredList(Closure $user_access_filter)