PeerReviewProcess::class, 'foreign_key' => 'process_id', ]; $config['belongs_to']['task'] = [ 'class_name' => Task::class, 'foreign_key' => 'task_id', ]; $config['belongs_to']['submitter'] = [ 'class_name' => User::class, 'foreign_key' => 'submitter_id', ]; $config['belongs_to']['reviewer'] = [ 'class_name' => User::class, 'foreign_key' => 'reviewer_id', ]; parent::configure($config); } public static function findByCourse(Course $course): iterable { $collections = []; foreach (PeerReviewProcess::findByCourse($course) as $process) { $collections[] = $process->getPeerReviews()->getArrayCopy(); } return array_flatten($collections); } public function getCourse(): Course { return $this->process->getCourse(); } public function isAnonymous(): bool { return $this->process->isAnonymous(); } public function isReviewer(User $user): bool { return match($this->reviewer_type) { 'autor' => $this->reviewer_id === $user->id, 'group' => \Statusgruppen::isMemberOf($this->reviewer_id, $user->getId()), }; } public function getReviewer(): User|Statusgruppen { return match($this->reviewer_type) { 'autor' => User::find($this->reviewer_id), 'group' => Statusgruppen::find($this->reviewer_id), }; } public function isSubmitter(User $user): bool { return match (get_class($this->getSubmitter())) { Statusgruppen::class => \Statusgruppen::isMemberOf($this->submitter_id, $user->id), User::class => $this->submitter_id === $user->id }; } public function getSubmitter(): User|Statusgruppen { return User::find($this->submitter_id) ?? Statusgruppen::find($this->submitter_id); } }