['text' => 'Normal'], self::STATUS_FINISHED => ['text' => 'Finished'], self::STATUS_AVOIDED => ['text' => 'Avoided'], ]; const IS_DONE_YES = 1; const IS_DONE_NO = 0; public static $isDoneInfo = [ self::IS_DONE_YES => ['text' => 'Yes'], self::IS_DONE_NO => ['text' => 'No'], ]; protected $casts = [ 'progress' => 'json' ]; public function getStatusTextAttribute(): string { return self::$status[$this->status]['text'] ?? ''; } public function getIsDoneTextAttribute(): string { return self::$isDoneInfo[$this->is_done]['text'] ?? ''; } public function getBeginAttribute() { $begin = $this->getRawOriginal('begin'); $end = $this->getRawOriginal('end'); if ($begin && $end) { do_log(sprintf('examUser: %s, begin from self: %s', $this->id, $begin)); return $begin; } $exam = $this->exam; $begin = $exam->getRawOriginal('begin'); $end = $exam->getRawOriginal('end'); if ($begin && $end) { do_log(sprintf('examUser: %s, begin from exam(%s): %s', $this->id, $exam->id, $begin)); return $begin; } if ($exam->duration > 0) { do_log(sprintf('examUser: %s, begin from self created_at(%s)', $this->id, $this->getRawOriginal('created_at'))); return $this->created_at->toDateTimeString(); } return null; } public function getEndAttribute() { $begin = $this->getRawOriginal('begin'); $end = $this->getRawOriginal('end'); if ($begin && $end) { do_log(sprintf('examUser: %s, end from self: %s', $this->id, $end)); return $end; } $exam = $this->exam; $begin = $exam->getRawOriginal('begin'); $end = $exam->getRawOriginal('end'); if ($begin && $end) { do_log(sprintf('examUser: %s, end from exam(%s): %s', $this->id, $exam->id, $end)); return $end; } $duration = $exam->duration; if ($duration > 0) { do_log(sprintf('examUser: %s, end from self created_at + exam(%s) created_at: %s + %s days', $this->id, $exam->id, $this->getRawOriginal('created_at'), $duration)); return $this->created_at->addDays($duration)->toDateTimeString(); } return null; } public function exam(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(Exam::class, 'exam_id'); } public function user(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(User::class, 'uid'); } public function progresses() { return $this->hasMany(ExamProgress::class, 'exam_user_id'); } }