]> git.localhorst.tv Git - alttp.git/blobdiff - app/Models/User.php
periodically sync avatars
[alttp.git] / app / Models / User.php
index 89493e70171cdec6eefeea22e70f4bc1c9f342dd..fb21113b39497f7f9a68f4fd81d837d755386cb3 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace App\Models;
 
+use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Foundation\Auth\User as Authenticatable;
 use Illuminate\Notifications\Notifiable;
@@ -12,6 +13,55 @@ class User extends Authenticatable
 {
        use HasApiTokens, HasFactory, Notifiable;
 
+       public function findResult(Round $round) {
+               foreach ($round->results as $result) {
+                       if ($this->id == $result->user_id) {
+                               return $result;
+                       }
+               }
+               return null;
+       }
+
+       public function getName() {
+               if (!empty($this->nickname)) {
+                       return $this->nickname;
+               }
+               return $this->username;
+       }
+
+       public function getRandomQuoteAttribute() {
+               return $this->results()
+                       ->where('comment', '!=', '')
+                       ->whereHas('round', function(Builder $query) {
+                               $query->where('locked', true);
+                       })
+                       ->inRandomOrder()
+                       ->first();
+       }
+
+
+       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) {
@@ -39,6 +89,27 @@ class User extends Authenticatable
                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);
@@ -61,6 +132,7 @@ class User extends Authenticatable
                return $this->rounds()
                        ->where('locked', true)
                        ->where('no_record', false)
+                       ->wherePivot('forfeit', false)
                        ->wherePivot('placement', 1);
        }
 
@@ -68,6 +140,7 @@ class User extends Authenticatable
                return $this->rounds()
                        ->where('locked', true)
                        ->where('no_record', false)
+                       ->wherePivot('forfeit', false)
                        ->wherePivot('placement', 2);
        }
 
@@ -75,6 +148,7 @@ class User extends Authenticatable
                return $this->rounds()
                        ->where('locked', true)
                        ->where('no_record', false)
+                       ->wherePivot('forfeit', false)
                        ->wherePivot('placement', 3);
        }
 
@@ -141,6 +215,7 @@ class User extends Authenticatable
                'discriminator' => 'string',
                'email' => 'string',
                'avatar' => 'string',
+               'avatar_cached' => 'datetime',
                'verified' => 'boolean',
                'locale' => 'string',
                'mfa_enabled' => 'boolean',