X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=app%2FModels%2FUser.php;h=db834b7a240ca423141f254a1494fc9916b82c22;hb=7c6716036321ba09846785720e81459aad55a323;hp=89493e70171cdec6eefeea22e70f4bc1c9f342dd;hpb=df75af8d30ceb44724280829b948dd01e86de07b;p=alttp.git diff --git a/app/Models/User.php b/app/Models/User.php index 89493e7..db834b7 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -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,63 @@ 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 hasGlobalRole($name) { + return !empty($this->global_roles) && in_array($name, $this->global_roles); + } + + public function isAdmin() { + return $this->role === 'admin'; + } + + public function isPrivileged() { + return $this->role === 'special' || $this->isAdmin(); + } + + 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 +97,31 @@ 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 channel_crews() { + return $this->hasMany(ChannelCrew::class); + } public function participation() { return $this->hasMany(Participant::class); @@ -61,6 +144,7 @@ class User extends Authenticatable return $this->rounds() ->where('locked', true) ->where('no_record', false) + ->wherePivot('forfeit', false) ->wherePivot('placement', 1); } @@ -68,6 +152,7 @@ class User extends Authenticatable return $this->rounds() ->where('locked', true) ->where('no_record', false) + ->wherePivot('forfeit', false) ->wherePivot('placement', 2); } @@ -75,6 +160,7 @@ class User extends Authenticatable return $this->rounds() ->where('locked', true) ->where('no_record', false) + ->wherePivot('forfeit', false) ->wherePivot('placement', 3); } @@ -108,6 +194,7 @@ class User extends Authenticatable protected $fillable = [ 'id', 'username', + 'discord_nickname', 'discriminator', 'email', 'avatar', @@ -141,7 +228,9 @@ class User extends Authenticatable 'discriminator' => 'string', 'email' => 'string', 'avatar' => 'string', + 'avatar_cached' => 'datetime', 'verified' => 'boolean', + 'global_roles' => 'array', 'locale' => 'string', 'mfa_enabled' => 'boolean', 'refresh_token' => 'encrypted',