282 lines
6.5 KiB
PHP
Executable File
282 lines
6.5 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Webkul\Customer\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Foundation\Auth\User as Authenticatable;
|
|
use Illuminate\Notifications\Notifiable;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Facades\URL;
|
|
use PHPOpenSourceSaver\JWTAuth\Contracts\JWTSubject;
|
|
use Webkul\Checkout\Models\CartProxy;
|
|
use Webkul\Core\Models\SubscribersListProxy;
|
|
use Webkul\Customer\Contracts\Customer as CustomerContract;
|
|
use Webkul\Customer\Database\Factories\CustomerFactory;
|
|
use Webkul\Customer\Notifications\CustomerResetPassword;
|
|
use Webkul\Product\Models\ProductReviewProxy;
|
|
use Webkul\Sales\Models\OrderProxy;
|
|
|
|
class Customer extends Authenticatable implements CustomerContract, JWTSubject
|
|
{
|
|
use HasFactory, Notifiable;
|
|
|
|
/**
|
|
* The table associated with the model.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $table = 'customers';
|
|
|
|
/**
|
|
* The attributes that are mass assignable.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $fillable = [
|
|
'first_name',
|
|
'last_name',
|
|
'gender',
|
|
'date_of_birth',
|
|
'email',
|
|
'phone',
|
|
'password',
|
|
'api_token',
|
|
'customer_group_id',
|
|
'subscribed_to_news_letter',
|
|
'is_verified',
|
|
'token',
|
|
'notes',
|
|
'status',
|
|
];
|
|
|
|
/**
|
|
* The attributes that should be hidden for serialization.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $hidden = [
|
|
'password',
|
|
'api_token',
|
|
'remember_token',
|
|
];
|
|
|
|
/**
|
|
* Create a new factory instance for the model.
|
|
*
|
|
* @return \Webkul\Customer\Database\Factories\CustomerFactory
|
|
*/
|
|
protected static function newFactory()
|
|
{
|
|
return CustomerFactory::new();
|
|
}
|
|
|
|
/**
|
|
* Send the password reset notification.
|
|
*
|
|
* @param string $token
|
|
* @return void
|
|
*/
|
|
public function sendPasswordResetNotification($token): void
|
|
{
|
|
$this->notify(new CustomerResetPassword($token));
|
|
}
|
|
|
|
/**
|
|
* Get the identifier that will be stored in the subject claim of the JWT.
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function getJWTIdentifier()
|
|
{
|
|
return $this->getKey();
|
|
}
|
|
|
|
/**
|
|
* Return a key value array, containing any custom claims to be added to the JWT.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getJWTCustomClaims(): array
|
|
{
|
|
return [];
|
|
}
|
|
|
|
/**
|
|
* Get image url for the customer profile.
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function getImageUrlAttribute()
|
|
{
|
|
return $this->image_url();
|
|
}
|
|
|
|
/**
|
|
* Get the customer full name.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getNameAttribute(): string
|
|
{
|
|
return ucfirst($this->first_name) . ' ' . ucfirst($this->last_name);
|
|
}
|
|
|
|
/**
|
|
* Get image url for the customer image.
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function image_url()
|
|
{
|
|
if (! $this->image) {
|
|
return;
|
|
}
|
|
|
|
return Storage::url($this->image);
|
|
}
|
|
|
|
/**
|
|
* Is email exists or not.
|
|
*
|
|
* @param string $email
|
|
* @return bool
|
|
*/
|
|
public function emailExists($email): bool
|
|
{
|
|
$results = $this->where('email', $email);
|
|
|
|
if ($results->count() === 0) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Get the customer group that owns the customer.
|
|
*
|
|
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
|
*/
|
|
public function group()
|
|
{
|
|
return $this->belongsTo(CustomerGroupProxy::modelClass(), 'customer_group_id');
|
|
}
|
|
|
|
/**
|
|
* Get the customer address that owns the customer.
|
|
*
|
|
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
|
*/
|
|
public function addresses()
|
|
{
|
|
return $this->hasMany(CustomerAddressProxy::modelClass(), 'customer_id');
|
|
}
|
|
|
|
/**
|
|
* Get default customer address that owns the customer.
|
|
*
|
|
* @return \Illuminate\Database\Eloquent\Relations\HasOne
|
|
*/
|
|
public function default_address()
|
|
{
|
|
return $this->hasOne(CustomerAddressProxy::modelClass(), 'customer_id')
|
|
->where('default_address', 1);
|
|
}
|
|
|
|
/**
|
|
* Customer's relation with wishlist items.
|
|
*
|
|
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
|
*/
|
|
public function wishlist_items()
|
|
{
|
|
return $this->hasMany(WishlistProxy::modelClass(), 'customer_id');
|
|
}
|
|
|
|
/**
|
|
* Is wishlist shared by the customer.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isWishlistShared(): bool
|
|
{
|
|
return $this->wishlist_items()->where('shared', 1)->first()
|
|
? true
|
|
: false;
|
|
}
|
|
|
|
/**
|
|
* Get wishlist shared link.
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function getWishlistSharedLink()
|
|
{
|
|
return $this->isWishlistShared()
|
|
? URL::signedRoute('customer.wishlist.shared', ['id' => $this->id])
|
|
: null;
|
|
}
|
|
|
|
/**
|
|
* Get all cart inactive cart instance of a customer.
|
|
*
|
|
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
|
*/
|
|
public function all_carts()
|
|
{
|
|
return $this->hasMany(CartProxy::modelClass(), 'customer_id');
|
|
}
|
|
|
|
/**
|
|
* Get inactive cart instance of a customer.
|
|
*
|
|
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
|
*/
|
|
public function inactive_carts()
|
|
{
|
|
return $this->hasMany(CartProxy::modelClass(), 'customer_id')
|
|
->where('is_active', 0);
|
|
}
|
|
|
|
/**
|
|
* Get active cart instance of a customer.
|
|
*
|
|
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
|
*/
|
|
public function active_carts()
|
|
{
|
|
return $this->hasMany(CartProxy::modelClass(), 'customer_id')
|
|
->where('is_active', 1);
|
|
}
|
|
|
|
/**
|
|
* Get all orders of a customer.
|
|
*
|
|
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
|
*/
|
|
public function all_orders()
|
|
{
|
|
return $this->hasMany(OrderProxy::modelClass(), 'customer_id');
|
|
}
|
|
|
|
/**
|
|
* Get all reviews of a customer.
|
|
*
|
|
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
|
*/
|
|
public function all_reviews()
|
|
{
|
|
return $this->hasMany(ProductReviewProxy::modelClass(), 'customer_id');
|
|
}
|
|
|
|
/**
|
|
* Get the customer's subscription.
|
|
*
|
|
* @return \Illuminate\Database\Eloquent\Relations\HasOne
|
|
*/
|
|
public function subscription()
|
|
{
|
|
return $this->hasOne(SubscribersListProxy::modelClass(), 'customer_id');
|
|
}
|
|
}
|