]> git.localhorst.tv Git - alttp.git/blobdiff - app/Models/User.php
tournament monitors
[alttp.git] / app / Models / User.php
index 7f03b4acdf6a24ea4dc2bcec5145cb66a2b31ea9..e5bb4f174b49b5f2a96446627ab0148421f7f725 100644 (file)
@@ -12,15 +12,114 @@ class User extends Authenticatable
 {
        use HasApiTokens, HasFactory, Notifiable;
 
+       public function isAdmin() {
+               return $this->role === 'admin';
+       }
+
        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 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.
         *