%PDF- %PDF-
Direktori : /var/www/html/shaban/duassis/api/app/Models/ |
Current File : //var/www/html/shaban/duassis/api/app/Models/User.php |
<?php namespace App\Models; use App\Traits\Addressable; use Carbon\Carbon; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Support\Facades\DB; use Laravel\Passport\HasApiTokens; use Spatie\MediaLibrary\Exceptions\FileCannotBeAdded; use Spatie\MediaLibrary\HasMedia\HasMedia; use Spatie\MediaLibrary\HasMedia\HasMediaTrait; use Spatie\MediaLibrary\Models\Media; use Spatie\Permission\Traits\HasRoles; /** * @property integer id * @property string email * @property string password * @property string display_name * @property boolean is_confirmed * @property boolean is_enabled * @property mixed created_at * @property mixed updated_at * @property Profile profile * @property Address address * @property mixed roles */ class User extends Authenticatable implements HasMedia { use HasApiTokens, Notifiable, HasRoles, HasMediaTrait, Addressable; const AVATAR = 'avatars'; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'email', 'password', 'display_name', 'is_confirmed', 'is_enabled', ]; protected $guard_name = 'api'; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; protected $casts = [ 'id' => 'integer', 'email' => 'string', 'password' => 'string', 'display_name' => 'string', 'is_confirmed' => 'boolean', 'is_enabled' => 'boolean', ]; public static function generateRandomToken($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $charactersLength = strlen($characters); $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, $charactersLength - 1)]; } return $randomString; } /** * @param $value */ public function setPasswordAttribute($value) { $this->attributes['password'] = bcrypt($value); } /** * @param $value * @return string */ public function getCreatedAtAttribute($value) { return Carbon::parse($value) ->toIso8601String(); } /** * @param $value * @return string */ public function getUpdatedAtAttribute($value) { return Carbon::parse($value) ->toIso8601String(); } /** * @return $this */ public function enable() { $this->is_enabled = true; $this->save(); return $this; } /** * @return $this */ public function disable() { $this->is_enabled = false; $this->save(); return $this; } /** * @param $password * @return $this */ public function updatePassword($password) { $this->password = $password; $this->save(); return $this; } public function getRoleId() { if ($role = $this->roles() ->first()) { return $role->id; } return null; } public function canUseAccount() { return $this->is_enabled; } public function profile() { return $this->hasOne(Profile::class); } public function fields() { return $this->hasMany(Field::class); } public function devices() { return $this->hasMany(Device::class); } public function provider() { return $this->hasOne(Provider::class); } public function categories() { return $this->belongsToMany(Category::class, 'user_category'); } public function tags() { return $this->morphToMany(Tag::class, 'model', 'taggables'); } /** * @param $url * @return $this * @throws FileCannotBeAdded */ public function setAvatarFromLink($url) { $name = md5(time()); DB::beginTransaction(); try { if ($media = $this->getMedia(self::AVATAR) ->first()) { $media->delete(); } $this->addMediaFromUrl($url) ->usingName($name) ->usingFileName("$name.png") ->toMediaCollection(self::AVATAR, self::AVATAR); $this->save(); DB::commit(); return $this; } catch (FileCannotBeAdded $e) { DB::rollBack(); throw $e; } } public function setAvatarBase64($base64data) { $name = md5(time()); DB::beginTransaction(); try { if ($media = $this->getMedia(self::AVATAR) ->first()) { $media->delete(); } $this->addMediaFromBase64($base64data) ->usingName($name) ->usingFileName("$name.png") ->toMediaCollection(self::AVATAR, self::AVATAR); $this->save(); DB::commit(); return $this; } catch (FileCannotBeAdded $e) { DB::rollBack(); throw $e; } } public function addDevice($uuid) { /** @var Device $device */ $device = Device::query() ->where('uuid', $uuid) ->first(); if (!$device) { return $this; } $device->user() ->associate($this); $device->save(); return $this; } public function getAvatar() { /** @var Media $media */ if ($media = $this->getMedia(self::AVATAR) ->first()) { return asset($media->getUrl()); } return asset('images/logo.jpg'); } public function isAdmin() { return $this->hasRole(Role::ADMIN); } public function isClient() { return $this->hasRole(Role::CLIENT); } }