X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=app%2FModels%2FUser.php;h=ff45c6177c234acddda70e6b62493863fb48d151;hb=f446d5bcf3b87bd9443a060e27e9c0601c96fbb9;hp=535af2e07e828232ba2e9e2843ad507d1222d481;hpb=beccf752aafd468c3753c6d48ae30bccd946c3b9;p=alttp.git diff --git a/app/Models/User.php b/app/Models/User.php index 535af2e..ff45c61 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -12,19 +12,140 @@ class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; + public function isAdmin() { + return $this->role === 'admin'; + } + + public function isApplicant(Tournament $tournament) { + foreach ($tournament->applications as $applicant) { + if ($applicant->user_id == $this->id) { + return true; + } + } + return false; + } + + public function isDeniedApplicant(Tournament $tournament) { + foreach ($tournament->applications as $applicant) { + if ($applicant->user_id == $this->id) { + return $applicant->denied; + } + } + return false; + } + public function isParticipant(Tournament $tournament) { foreach ($tournament->participants as $participant) { - if ($participant->user->id == $this->id) { + if ($participant->user_id == $this->id) { return true; } } return false; } + public function isRunner(Tournament $tournament) { + foreach ($tournament->participants as $participant) { + if ($participant->user_id == $this->id) { + return in_array('runner', $participant->roles); + } + } + return false; + } + + public function isTournamentAdmin(Tournament $tournament) { + foreach ($tournament->participants as $participant) { + if ($participant->user_id == $this->id) { + return in_array('admin', $participant->roles); + } + } + return false; + } + + public function isTournamentCrew(Tournament $tournament) { + return $this->isTournamentAdmin($tournament) || $this->isTournamentMonitor($tournament); + } + + public function isTournamentMonitor(Tournament $tournament) { + foreach ($tournament->participants as $participant) { + if ($participant->user_id == $this->id) { + return in_array('monitor', $participant->roles); + } + } + return false; + } + + public function hasFinished(Round $round) { + foreach ($round->results as $result) { + if ($result->user_id != $this->id) continue; + return $result->has_finished; + } + return false; + } + + public function participation() { return $this->hasMany(Participant::class); } + public function results() { + return $this->hasMany(Result::class); + } + + public function rounds() { + return $this->belongsToMany(Round::class, 'results'); + } + + public function tournaments() { + return $this->belongsToMany(Tournament::class, 'participants'); + } + + + public function round_first() { + return $this->rounds() + ->where('locked', true) + ->where('no_record', false) + ->wherePivot('forfeit', false) + ->wherePivot('placement', 1); + } + + public function round_second() { + return $this->rounds() + ->where('locked', true) + ->where('no_record', false) + ->wherePivot('forfeit', false) + ->wherePivot('placement', 2); + } + + public function round_third() { + return $this->rounds() + ->where('locked', true) + ->where('no_record', false) + ->wherePivot('forfeit', false) + ->wherePivot('placement', 3); + } + + public function tournament_first() { + return $this->tournaments() + ->where('locked', true) + ->where('no_record', false) + ->wherePivot('placement', 1); + } + + public function tournament_second() { + return $this->tournaments() + ->where('locked', true) + ->where('no_record', false) + ->wherePivot('placement', 2); + } + + public function tournament_third() { + return $this->tournaments() + ->where('locked', true) + ->where('no_record', false) + ->wherePivot('placement', 3); + } + + /** * The attributes that are mass assignable. *