blue-twilight/app/User.php

128 lines
2.9 KiB
PHP

<?php
namespace App;
use App\Notifications\ResetPassword;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Support\Facades\Auth;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'is_admin', 'is_activated', 'activation_token', 'enable_profile_page', 'profile_alias', 'facebook_id', 'twitter_id', 'google_id'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token', 'activation_token'
];
public static function administrators()
{
return User::where('is_admin', true)->get();
}
public static function anonymous()
{
$user = new User();
$user->id = -1;
$user->name = 'Anonymous';
return $user;
}
public static function currentOrAnonymous()
{
$user = Auth::user();
return (is_null($user)
? User::anonymous()
: $user);
}
public function albums()
{
return $this->hasMany(Album::class);
}
public function feedJsonUrl()
{
return route('viewUserFeedJson', [
'idOrAlias' => (!empty($this->profile_alias) ? trim(strtolower($this->profile_alias)) : $this->id)
]);
}
public function followers()
{
return $this->belongsToMany(User::class, 'user_followers', 'following_user_id', 'user_id');
}
public function following()
{
return $this->belongsToMany(User::class, 'user_followers', 'user_id', 'following_user_id');
}
public function followUrl()
{
return route('followUser', [
'idOrAlias' => $this->profileAliasForUrl()
]);
}
public function groups()
{
return $this->belongsToMany(Group::class, 'user_groups');
}
public function isAnonymous()
{
return $this->id == -1 && $this->name == 'Anonymous';
}
public function profileAliasForUrl()
{
return (!empty($this->profile_alias) ? trim(strtolower($this->profile_alias)) : $this->id);
}
public function profileUrl()
{
return route('viewUser', [
'idOrAlias' => $this->profileAliasForUrl()
]);
}
public function publicDisplayName()
{
return trim(!empty($this->profile_alias) ? $this->profile_alias : $this->name);
}
/**
* Send the password reset notification.
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
$this->notify(new ResetPassword($token));
}
public function unFollowUrl()
{
return route('unFollowUser', [
'idOrAlias' => $this->profileAliasForUrl()
]);
}
}