* @mixin Eloquent */ class User extends Authenticatable { use Rememberable; protected $connection = 'forum'; protected $table = 'user'; protected $primaryKey = 'userid'; public $timestamps = false; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = []; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'salt' ]; /** * Get this user's "remember me" token. * * @return HasOne */ public function token() { return $this->hasOne(Token::class); } /** * Get this user's timezone. * * @return HasOne */ public function timezone() { return $this->hasOne(Timezone::class); } /** * Get the user's timezone or the app's timezone if that is not set. * * @return string */ public function getTimezone() { return $this->timezone ? $this->timezone->timezone : config('app.timezone'); } /** * Get this user's custom fields. * * @return HasOne */ public function fields() { return $this->hasOne(UserField::class, 'userid'); } /** * Get this user's display group. * * @return Group */ public function getDisplayGroup() { $display = $this->displaygroupid; if (!$display) { $display = $this->usergroupid; } return Group::find($display); } /** * Check if this user is a staff member. * * @return bool */ public function isStaff() { $staff = false; foreach ($this->usergroups->get() as $group) { if ($group->isStaff()) { $staff = true; } if ($group->isBanned()) { return false; } } return $staff; } /** * Check if this user is management. * * @return bool */ public function isManagement() { foreach ($this->usergroups->get() as $group) { if ($group->isManagement()) { return true; } } return false; } /** * Check if this user is an administrator. * * @return bool */ public function isAdmin() { foreach ($this->usergroups->get() as $group) { if ($group->isAdmin()) { return true; } } return false; } /** * Check if this user is apart of a group. * * @param array $groups * @return bool * @internal param string $group group to check if the user is apart of */ public function is(...$groups) { foreach ($this->usergroups->get() as $usergroup) { foreach ($groups as $group) { if ($usergroup->is($group)) { return true; } } } return false; } /** * Get the usergroups this user belongs to. * * @return mixed */ public function getUsergroupsAttribute() { if (!$this->relationLoaded('usergroups')) { $usergroups = Group::whereIn('usergroupid', $this->membergroupids); $this->setRelation('usergroups', $usergroups); } return $this->getRelation('usergroups'); } /** * Get a query containing all the usergroups this user belongs to. * * @return Group */ public function usergroups() { return Group::whereIn('usergroupid', $this->membergroupids); } /** * Mutate the weird relationship vBulletin gives us into an array to make it easier to work with. * * @param $commaSeparatedIds * @return mixed */ public function getMembergroupidsAttribute($commaSeparatedIds) { $groups = json_decode("[{$commaSeparatedIds}]", true); array_unshift($groups, $this->usergroupid); return $groups; } /** * Get the display name of this user. * * @return HtmlString */ public function getDisplayName() { $group = $this->getDisplayGroup(); return new HtmlString($group->opentag . e($this->username) . $group->closetag); } }