'boolean', 'autosubscription_site' => 'boolean', // 'allow_adult_content' => 'boolean', 'phone_verified' => 'boolean', 'passport_verified' => 'boolean', 'phone_verify_token_expire' => 'datetime', ]; protected static function boot() { parent::boot(); self::observe(UserObserver::class); } public static function system() { return User::where('username', 'inner_systemuser_api')->first(); } public function withdrawals() { return $this->hasMany(Withdrawal::class); } public function bank_requisites() { return $this->hasMany(BankRequisites::class); } public function points() { return $this->hasMany(Point::class); } public function payments_orders() { return $this->hasMany(PaymentGatewayOrder::class); } public function live_feeds() { // return $this->belongsToMany(Feed::class, 'users_live_feeds') // ->withPivot('times')->orderByPivot('times', 'desc'); return $this->belongsToMany(Feed::class, 'users_live_feeds') ->withPivot('times')->orderByPivot('feed_id', 'desc'); } public function customPackage() { return $this->hasOne(UserPackage::class); } public function feeds() { return $this->hasMany(Feed::class); } public function bannedUsers() { return $this->belongsToMany(User::class, 'user_banned', 'user_id', 'banned_user_id'); } public function likes() { return $this->belongsToMany(Feed::class, 'users_feeds_like'); } public function views() { return $this->belongsToMany(Feed::class, 'users_feeds_view'); } public function audioLike() { return $this->belongsToMany(Media::class, 'user_audio_like')->withTimestamps()->orderByPivot('created_at', 'desc'); } public function purchases() { return $this->belongsToMany(Feed::class, 'user_feed_purchase')->withPivot('amount')->withTimestamps()->orderByPivot('created_at', 'desc'); } public function subscribers() { return $this->belongsToMany(User::class, 'users_subscribers', 'user_id', 'subscriber_id')->withPivot('leader'); } public function subscriber_reverse() { return $this->belongsToMany(User::class, 'users_subscribers', 'subscriber_id', 'user_id')->withPivot('leader'); } public function subscribersOn() { return $this->belongsToMany(User::class, 'users_subscribers', 'user_id', 'subscriber_id')->withPivot('leader')->wherePivot('leader', 1); } public function subscribersOff() { return $this->belongsToMany(User::class, 'users_subscribers', 'user_id', 'subscriber_id')->withPivot('leader')->wherePivot('leader', 0); } public function chat_rooms() { return $this->belongsToMany(ChatRoom::class, 'user_chat_room'); } public function votes() { return $this->belongsToMany(Vote::class)->withPivot('payment'); } // подписки public function subscription() { return $this->hasMany(Subscription::class)->orderBy('ends_at', 'desc'); } public function getNameAttribute() { if ($this->last_name) { return $this->first_name . ' ' . $this->last_name; } return $this->first_name; } public function setPasswordAttribute($password) { $this->attributes['password'] = Hash::needsRehash($password) ? Hash::make($password) : $password; } public function checkClosedAccess() { $active_subscription = SubscriptionService::activeSubscription(); $has_subscription = SubscriptionService::hasSubscription(); if($has_subscription > 0 && !$active_subscription){ //имел подписку, нужно продлить return true; }elseif ($this->created_at->diffInMinutes(now()) > self::CHECKTIMEUSER && !$active_subscription) { // пользователь только зарегался, закрываем доступ return true; } return false; } public function testPeriodCheck() { $has_subscription = SubscriptionService::hasSubscription(); if( $has_subscription === 0 && ($this->created_at->diffInMinutes(now()) <= self::CHECKTIMEUSER) ){ return true; } return false; } public function scopeFilter($query, array $filters) { $query->when($filters['search'] ?? null, function ($query, $search) { $query->where(function ($query) use ($search) { $query->where('first_name', 'ilike', '%'.$search.'%') ->orWhere('last_name', 'ilike', '%'.$search.'%'); }); })->when($filters['sex'] ?? null, function ($query, $sex) { $query->where('sex', $sex); }); } public function isVerified() { return $this->passport_verified; // return $this->phone && $this->phone_verified; } public function isVerifiedForWithdrawal() { return $this->passport_verified && $this->inn && $this->checking_account && $this->bik; // return $this->phone && $this->phone_verified; } }