Current File : /home/getxxhzo/app.genicards.com/app/Models/User.php |
<?php
namespace App\Models;
use App\Models\Traits\StorageLimit;
use App\Traits\Multitenantable;
use Barryvdh\LaravelIdeHelper\Eloquent;
use Database\Factories\UserFactory;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\HigherOrderBuilderProxy;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\DatabaseNotification;
use Illuminate\Notifications\DatabaseNotificationCollection;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
use Lab404\Impersonate\Models\Impersonate;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\Permission\Traits\HasRoles;
use Stancl\Tenancy\Database\Concerns\BelongsToTenant;
use Laravel\Sanctum\HasApiTokens;
/**
* App\Models\User
*
* @property int $id
* @property string $first_name
* @property string $last_name
* @property string $email
* @property string|null $contact
* @property string|null $region_code
* @property int $is_active
* @property string|null $language
* @property Carbon|null $email_verified_at
* @property string $password
* @property int $theme_mode
* @property string $tenant_id
* @property string|null $remember_token
* @property Carbon|null $created_at
* @property Carbon|null $updated_at
* @property-read string $full_name
* @property-read mixed $multi_language_date
* @property-read HigherOrderBuilderProxy|mixed $plan_name
* @property-read string $profile_image
* @property-read MediaCollection|Media[] $media
* @property-read int|null $media_count
* @property-read DatabaseNotificationCollection|DatabaseNotification[] $notifications
* @property-read int|null $notifications_count
* @property-read Collection|\Spatie\Permission\Models\Permission[] $permissions
* @property-read int|null $permissions_count
* @property-read Collection|\Spatie\Permission\Models\Role[] $roles
* @property-read int|null $roles_count
* @property-read Subscription $subscription
* @property-read Collection|Subscription[] $subscriptions
* @property-read int|null $subscriptions_count
* @property-read MultiTenant $tenant
*
* @method static UserFactory factory(...$parameters)
* @method static Builder|User newModelQuery()
* @method static Builder|User newQuery()
* @method static Builder|User permission($permissions)
* @method static Builder|User query()
* @method static Builder|User role($roles, $guard = null)
* @method static Builder|User whereContact($value)
* @method static Builder|User whereCreatedAt($value)
* @method static Builder|User whereEmail($value)
* @method static Builder|User whereEmailVerifiedAt($value)
* @method static Builder|User whereFirstName($value)
* @method static Builder|User whereId($value)
* @method static Builder|User whereIsActive($value)
* @method static Builder|User whereLanguage($value)
* @method static Builder|User whereLastName($value)
* @method static Builder|User wherePassword($value)
* @method static Builder|User whereRegionCode($value)
* @method static Builder|User whereRememberToken($value)
* @method static Builder|User whereTenantId($value)
* @method static Builder|User whereThemeMode($value)
* @method static Builder|User whereUpdatedAt($value)
*
* @mixin Eloquent
*/
class User extends Authenticatable implements HasMedia, MustVerifyEmail
{
use HasFactory, Notifiable, InteractsWithMedia, StorageLimit, HasRoles, Impersonate, BelongsToTenant, Multitenantable, HasApiTokens;
protected $table = 'users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'first_name',
'last_name',
'email',
'contact',
'region_code',
'affiliate_code',
'is_active',
'steps',
'email_verified_at',
'password',
'theme_mode',
'language',
'tenant_id',
'vcard_table_view_type',
];
protected $casts = [
'first_name' => 'string',
'last_name' => 'string',
'email' => 'string',
'contact' => 'string',
'region_code' => 'string',
'affiliate_code' => 'string',
'is_active' => 'integer',
'email_verified_at' => 'datetime',
'password' => 'string',
'theme_mode' => 'integer',
'language' => 'string',
'tenant_id' => 'string',
'remember_token' => 'string',
];
const LANGUAGES = [
'ar' => 'Arabic',
'zh' => 'Chinese',
'en' => 'English',
'fr' => 'French',
'de' => 'German',
'pt' => 'Portuguese',
'ru' => 'Russian',
'es' => 'Spanish',
'tr' => 'Turkish',
'it' => 'Italian',
];
const ALL_LANGUAGES = [
'af' => 'Afrikaans',
'sq' => 'Albanian - shqip',
'am' => 'Amharic - አማርኛ',
'ar' => 'Arabic - العربية',
'an' => 'Aragonese - aragonés',
'hy' => 'Armenian - հայերեն',
'ast' => 'Asturian - asturianu',
'az' => 'Azerbaijani - azərbaycan dili',
'eu' => 'Basque - euskara',
'be' => 'Belarusian - беларуская',
'bn' => 'Bengali - বাংলা',
'bs' => 'Bosnian - bosanski',
'br' => 'Breton - brezhoneg',
'bg' => 'Bulgarian - български',
'ca' => 'Catalan - català',
'ckb' => 'Central Kurdish - کوردی (دەستنوسی عەرەبی)',
'zh' => 'Chinese - 中文',
'zh-HK' => 'Chinese (Hong Kong) - 中文(香港)',
'zh-CN' => 'Chinese (Simplified) - 中文(简体)',
'zh-TW' => 'Chinese (Traditional) - 中文(繁體)',
'co' => 'Corsican',
'hr' => 'Croatian - hrvatski',
'cs' => 'Czech - čeština',
'da' => 'Danish - dansk',
'nl' => 'Dutch - Nederlands',
'en' => 'English',
'en-AU' => 'English (Australia)',
'en-CA' => 'English (Canada)',
'en-IN' => 'English (India)',
'en-NZ' => 'English (New Zealand)',
'en-ZA' => 'English (South Africa)',
'en-GB' => 'English (United Kingdom)',
'en-US' => 'English (United States)',
'eo' => 'Esperanto - esperanto',
'et' => 'Estonian - eesti',
'fo' => 'Faroese - føroyskt',
'fil' => 'Filipino',
'fi' => 'Finnish - suomi',
'fr' => 'French - français',
'fr-CA' => 'French (Canada) - français (Canada)',
'fr-FR' => 'French (France) - français (France)',
'fr-CH' => 'French (Switzerland) - français (Suisse)',
'gl' => 'Galician - galego',
'ka' => 'Georgian - ქართული',
'de' => 'German - Deutsch',
'de-AT' => 'German (Austria) - Deutsch (Österreich)',
'de-DE' => 'German (Germany) - Deutsch (Deutschland)',
'de-LI' => 'German (Liechtenstein) - Deutsch (Liechtenstein)',
'de-CH' => 'German (Switzerland) - Deutsch (Schweiz)',
'el' => 'Greek - Ελληνικά',
'gn' => 'Guarani',
'gu' => 'Gujarati - ગુજરાતી',
'ha' => 'Hausa',
'haw' => 'Hawaiian - ʻŌlelo Hawaiʻi',
'he' => 'Hebrew - עברית',
'hi' => 'Hindi - हिन्दी',
'hu' => 'Hungarian - magyar',
'is' => 'Icelandic - íslenska',
'id' => 'Indonesian - Indonesia',
'ia' => 'Interlingua',
'ga' => 'Irish - Gaeilge',
'it' => 'Italian - italiano',
'it-IT' => 'Italian (Italy) - italiano (Italia)',
'it-CH' => 'Italian (Switzerland) - italiano (Svizzera)',
'ja' => 'Japanese - 日本語',
'kn' => 'Kannada - ಕನ್ನಡ',
'kk' => 'Kazakh - қазақ тілі',
'km' => 'Khmer - ខ្មែរ',
'ko' => 'Korean - 한국어',
'ku' => 'Kurdish - Kurdî',
'ky' => 'Kyrgyz - кыргызча',
'lo' => 'Lao - ລາວ',
'la' => 'Latin',
'lv' => 'Latvian - latviešu',
'ln' => 'Lingala - lingála',
'lt' => 'Lithuanian - lietuvių',
'mk' => 'Macedonian - македонски',
'ms' => 'Malay - Bahasa Melayu',
'ml' => 'Malayalam - മലയാളം',
'mt' => 'Maltese - Malti',
'mr' => 'Marathi - मराठी',
'mn' => 'Mongolian - монгол',
'ne' => 'Nepali - नेपाली',
'no' => 'Norwegian - norsk',
'nb' => 'Norwegian Bokmål - norsk bokmål',
'nn' => 'Norwegian Nynorsk - nynorsk',
'oc' => 'Occitan',
'or' => 'Oriya - ଓଡ଼ିଆ',
'om' => 'Oromo - Oromoo',
'ps' => 'Pashto - پښتو',
'fa' => 'Persian - فارسی',
'pl' => 'Polish - polski',
'pt' => 'Portuguese - português',
'pt-BR' => 'Portuguese (Brazil) - português (Brasil)',
'pt-PT' => 'Portuguese (Portugal) - português (Portugal)',
'pa' => 'Punjabi - ਪੰਜਾਬੀ',
'qu' => 'Quechua',
'ro' => 'Romanian - română',
'mo' => 'Romanian (Moldova) - română (Moldova)',
'rm' => 'Romansh - rumantsch',
'ru' => 'Russian - русский',
'gd' => 'Scottish Gaelic',
'sr' => 'Serbian - српски',
'sh' => 'Serbo-Croatian - Srpskohrvatski',
'sn' => 'Shona - chiShona',
'sd' => 'Sindhi',
'si' => 'Sinhala - සිංහල',
'sk' => 'Slovak - slovenčina',
'sl' => 'Slovenian - slovenščina',
'so' => 'Somali - Soomaali',
'st' => 'Southern Sotho',
'es' => 'Spanish - español',
'es-AR' => 'Spanish (Argentina) - español (Argentina)',
'es-419' => 'Spanish (Latin America) - español (Latinoamérica)',
'es-MX' => 'Spanish (Mexico) - español (México)',
'es-ES' => 'Spanish (Spain) - español (España)',
'es-US' => 'Spanish (United States) - español (Estados Unidos)',
'su' => 'Sundanese',
'sw' => 'Swahili - Kiswahili',
'sv' => 'Swedish - svenska',
'tg' => 'Tajik - тоҷикӣ',
'ta' => 'Tamil - தமிழ்',
'tt' => 'Tatar',
'te' => 'Telugu - తెలుగు',
'th' => 'Thai - ไทย',
'ti' => 'Tigrinya - ትግርኛ',
'to' => 'Tongan - lea fakatonga',
'tr' => 'Turkish - Türkçe',
'tk' => 'Turkmen',
'tw' => 'Twi',
'uk' => 'Ukrainian - українська',
'ur' => 'Urdu - اردو',
'ug' => 'Uyghur',
'uz' => 'Uzbek - o‘zbek',
'vi' => 'Vietnamese - Tiếng Việt',
'wa' => 'Walloon - wa',
'cy' => 'Welsh - Cymraeg',
'fy' => 'Western Frisian',
'xh' => 'Xhosa',
'yi' => 'Yiddish',
'yo' => 'Yoruba - Èdè Yorùbá',
'zu' => 'Zulu - isiZulu',
];
const FLAG = [
'ar' => 'assets/img/LanguageImage/arabic.svg',
'en' => 'assets/img/LanguageImage/english.png',
'zh' => 'assets/img/LanguageImage/china.png',
'fr' => 'assets/img/LanguageImage/france.png',
'de' => 'assets/img/LanguageImage/german.png',
'pt' => 'assets/img/LanguageImage/portuguese.png',
'ru' => 'assets/img/LanguageImage/russian.jpeg',
'es' => 'assets/img/LanguageImage/spain.png',
'tr' => 'img/LanguageImage/turkish.png',
'it' => 'img/LanguageImage/italian.png',
'hi' => 'img/LanguageImage/india.png',
];
const PROFILE = 'profile';
const ALL = 2;
const STEP_3 = 3;
const IS_ACTIVE = 1;
const DEACTIVATE = 0;
const SELECT_STATUS = 2;
const STATUS_ARR = [
self::SELECT_STATUS => 'Select Status',
self::IS_ACTIVE => 'Active',
self::DEACTIVATE => 'Deactivate',
];
protected $appends = ['full_name', 'profile_image', 'plan_name', 'multi_language_date'];
/**
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* @var array
*/
public static $rules = [
'first_name' => 'required|string|max:180',
'last_name' => 'required|string|max:180',
'email' => 'required|email:filter|max:191|unique:users,email,',
];
public function getProfileImageAttribute(): string
{
/** @var Media $media */
$media = $this->getMedia(self::PROFILE)->first();
if (! empty($media)) {
return $media->getFullUrl();
}
return asset('web/media/avatars/user.png');
}
public function getFullNameAttribute(): string
{
return $this->first_name . ' ' . $this->last_name;
}
public function getMultiLanguageDateAttribute()
{
setLocalLang(getLogInUser()->language ?? 'en');
return Carbon::parse($this->created_at)->isoFormat('Do MMMM YYYY hh:mm A');
}
/**
* @return HigherOrderBuilderProxy|mixed
*/
public function getPlanNameAttribute()
{
$subscription = $this->subscriptions->where('status', Subscription::ACTIVE)->first();
if (! empty($subscription)) {
return $subscription->plan->name;
}
return '';
}
public function subscription(): BelongsTo
{
return $this->belongsTo(Subscription::class, 'tenant_id', 'tenant_id')
->where('status', Subscription::ACTIVE);
}
public function subscriptions(): HasMany
{
return $this->hasMany(Subscription::class, 'tenant_id', 'tenant_id');
}
public function markEmailAsVerified()
{
return DB::table('users')->where('id', $this->id)
->update(['email_verified_at' => \Carbon\Carbon::now()]);
}
public function products()
{
return $this->hasMany(Product::class);
}
public function testimonials()
{
return $this->belongsToMany(Testimonial::class);
}
public function blogs()
{
return $this->belongsToMany(VcardBlog::class);
}
public function services()
{
return $this->belongsToMany(VcardService::class);
}
public function blogallariesgs()
{
return $this->belongsToMany(Gallery::class);
}
}