*/ protected $fillable = [ 'name', 'email', 'password', 'role', 'sites', 'gitlab_id' ]; /** * The attributes that should be hidden for arrays. * * @var list */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', 'role' => RoleEnum::class ]; /** * Perform any actions required after the model boots. * * @return void */ protected static function booted(): void { static::creating(function (User $user) { if (\is_null($user->password)) { $user->password = Str::random(10); $user->tmpPass = $user->password; } if (Hash::needsRehash($user->password)) { $user->password = Hash::make($user->password); } Cache::flush('AdminUsers'); }); static::created(function (User $user) { $user->sendMailConfirm(); }); static::updating(function (User $user) { if (Hash::needsRehash($user->password)) { $user->password = Hash::make($user->password); } Cache::flush('AdminUsers'); }); } // * METHODS /** * Get User brands. * * @return \Illuminate\Database\Eloquent\Collection<(int|string), \App\Models\Brand> */ public function brands(): \Illuminate\Database\Eloquent\Collection { return $this->sites->pluck('brand')->filter(); } /** * Send User creation confirm mail. * * @return void */ public function sendMailConfirm(): void { dispatch(new SendUserCreatedEmail($this)); } /** * Send User reset password mail. * * @param mixed $token * @return void */ public function sendPasswordResetNotification(mixed $token): void { /** @var string $token */ $this->notify(new ResetPassword($token)); } /** * Is the user an admin or a developper ? * * @return boolean */ public function isAdmin(): bool { return ($this->role->equals(RoleEnum::developper) or $this->role->equals(RoleEnum::admin)); } /** * Get All Admin users. * * @return \Illuminate\Database\Eloquent\Collection */ public static function adminUsers(): \Illuminate\Database\Eloquent\Collection { return Cache::remember('AdminUsers', 86400, function () { return self::whereIn('role', [RoleEnum::admin, RoleEnum::developper])->orderBy('name')->get(); }); } // * RELATIONSHIPS /** * HasMany Ticket relation. * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function tickets(): \Illuminate\Database\Eloquent\Relations\HasMany { return $this->hasMany(Ticket::class, 'created_by'); } /** * HasMany Message relation. * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function messages(): \Illuminate\Database\Eloquent\Relations\HasMany { return $this->hasMany(Message::class, 'user_id'); } /** * BelongsToMany Ticket relation. * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ public function subscriptions(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(Ticket::class, 'subscriptions'); } /** * BelongsToMany Site relation. * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ public function sites(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(Site::class); } }