VipsAssignment::class, 'foreign_key' => 'assignment_id' ]; $config['belongs_to']['user'] = [ 'class_name' => User::class, 'foreign_key' => 'user_id' ]; parent::configure($config); } /** * Return a student's event log for the assignment as a data array. */ public function getLogEntries(): array { $assignment = $this->assignment; $user_id = $this->user_id; $end_time = min($this->end, $assignment->end); $solutions = VipsSolution::findBySQL('assignment_id = ? AND user_id = ?', [$assignment->id, $user_id]); foreach ($assignment->test->exercise_refs as $exercise_ref) { $position[$exercise_ref->task_id] = $exercise_ref->position; } $logs[] = [ 'label' => _('Beginn der Klausur'), 'time' => $this->start, 'ip_address' => $this->ip_address, 'session_id' => $this->options['session_id'], 'archived' => false ]; foreach ($solutions as $solution) { if ($solution->isSubmitted()) { $logs[] = [ 'label' => sprintf(_('Abgabe Aufgabe %d'), $position[$solution->task_id]), 'time' => $solution->mkdate, 'ip_address' => $solution->ip_address, 'session_id' => $solution->options['session_id'], 'archived' => $solution->isArchived(), ]; } } if ($end_time && $end_time < date('Y-m-d H:i:s')) { $logs[] = [ 'label' => _('Ende der Klausur'), 'time' => $end_time, 'ip_address' => '', 'session_id' => '', 'archived' => false ]; } usort($logs, fn($a, $b) => $a['time'] <=> $b['time']); return $logs; } }