Current File : /home/getxxhzo/app.genicards.com/app/Models/Vcard.php |
<?php
namespace App\Models;
use App\Traits\Multitenantable;
use App\Models\Traits\StorageLimit;
use Barryvdh\LaravelIdeHelper\Eloquent;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Support\Carbon;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Stancl\Tenancy\Database\Concerns\BelongsToTenant;
/**
* App\Models\Vcard
*
* @property int $id
* @property string $url_alias
* @property string $name
* @property string|null $occupation
* @property string|null $description
* @property string|null $first_name
* @property string|null $last_name
* @property string|null $email
* @property string|null $region_code
* @property float|null $phone
* @property string|null $location
* @property string|null $location_url
* @property string|null $made_by
* @property string|null $made_by_url
* @property int|null $template_id
* @property int $share_btn
* @property int $status
* @property string|null $company
* @property string|null $job_title
* @property string|null $dob
* @property string|null $password
* @property int $branding
* @property string $font_family
* @property string|null $font_size
* @property string|null $custom_css
* @property string|null $custom_js
* @property string|null $site_title
* @property string|null $home_title
* @property string|null $meta_keyword
* @property string|null $meta_description
* @property string|null $google_analytics
* @property string $tenant_id
* @property string $language_enable
* @property string|null $default_language
* @property Carbon|null $created_at
* @property Carbon|null $updated_at
* @property string|null $alternative_phone
* @property string|null $alternative_email
* @property-read Collection|Analytic[] $Analytics
* @property-read int|null $analytics_count
* @property-read AppointmentDetail|null $appointmentDetail
* @property-read Collection|Appointment[] $appointmentHours
* @property-read int|null $appointment_hours_count
* @property-read Collection|VcardBlog[] $blogs
* @property-read int|null $blogs_count
* @property-read Collection|BusinessHour[] $businessHours
* @property-read int|null $business_hours_count
* @property-read Collection|Enquiry[] $enquiry
* @property-read int|null $enquiry_count
* @property-read Collection|Gallery[] $gallery
* @property-read int|null $gallery_count
* @property-read string $cover_url
* @property-read string $full_name
* @property-read string $profile_url
* @property-read string $profile_url_base64
* @property-read MediaCollection|Media[] $media
* @property-read int|null $media_count
* @property-read PrivacyPolicy|null $privacy_policy
* @property-read Collection|Product[] $products
* @property-read int|null $products_count
* @property-read Collection|VcardService[] $services
* @property-read int|null $services_count
* @property-read SocialLink|null $socialLink
* @property-read Collection|Subscription[] $subscriptions
* @property-read int|null $subscriptions_count
* @property-read Template|null $template
* @property-read MultiTenant $tenant
* @property-read TermCondition|null $term_condition
* @property-read Collection|Testimonial[] $testimonials
* @property-read int|null $testimonials_count
* @property-read User|null $user
*
* @method static Builder|Vcard newModelQuery()
* @method static Builder|Vcard newQuery()
* @method static Builder|Vcard query()
* @method static Builder|Vcard whereAlternativeEmail($value)
* @method static Builder|Vcard whereAlternativePhone($value)
* @method static Builder|Vcard whereBranding($value)
* @method static Builder|Vcard whereCompany($value)
* @method static Builder|Vcard whereCreatedAt($value)
* @method static Builder|Vcard whereCustomCss($value)
* @method static Builder|Vcard whereCustomJs($value)
* @method static Builder|Vcard whereDefaultLanguage($value)
* @method static Builder|Vcard whereDescription($value)
* @method static Builder|Vcard whereDob($value)
* @method static Builder|Vcard whereEmail($value)
* @method static Builder|Vcard whereFirstName($value)
* @method static Builder|Vcard whereFontFamily($value)
* @method static Builder|Vcard whereFontSize($value)
* @method static Builder|Vcard whereGoogleAnalytics($value)
* @method static Builder|Vcard whereHomeTitle($value)
* @method static Builder|Vcard whereId($value)
* @method static Builder|Vcard whereJobTitle($value)
* @method static Builder|Vcard whereLanguageEnable($value)
* @method static Builder|Vcard whereLastName($value)
* @method static Builder|Vcard whereLocation($value)
* @method static Builder|Vcard whereLocationUrl($value)
* @method static Builder|Vcard whereMadeBy($value)
* @method static Builder|Vcard whereMadeByUrl($value)
* @method static Builder|Vcard whereMetaDescription($value)
* @method static Builder|Vcard whereMetaKeyword($value)
* @method static Builder|Vcard whereName($value)
* @method static Builder|Vcard whereOccupation($value)
* @method static Builder|Vcard wherePassword($value)
* @method static Builder|Vcard wherePhone($value)
* @method static Builder|Vcard whereRegionCode($value)
* @method static Builder|Vcard whereShareBtn($value)
* @method static Builder|Vcard whereSiteTitle($value)
* @method static Builder|Vcard whereStatus($value)
* @method static Builder|Vcard whereTemplateId($value)
* @method static Builder|Vcard whereTenantId($value)
* @method static Builder|Vcard whereUpdatedAt($value)
* @method static Builder|Vcard whereUrlAlias($value)
*
* @mixin Eloquent
*/
class Vcard extends Model implements HasMedia
{
use InteractsWithMedia, StorageLimit, HasFactory, BelongsToTenant, Multitenantable;
protected $table = 'vcards';
/**
* @var string[]
*/
protected $fillable = [
'url_alias',
'name',
'occupation',
'description',
'first_name',
'last_name',
'email',
'region_code',
'phone',
'location',
'location_url',
'template_id',
'share_btn',
'company',
'job_title',
'dob',
'password',
'branding',
'font_family',
'font_size',
'custom_css',
'custom_js',
'status',
'tenant_id',
'qr_code_download_size',
'site_title',
'home_title',
'meta_keyword',
'meta_description',
'google_analytics',
'default_language',
'language_enable',
'enable_enquiry_form',
'enable_download_qr_code',
'made_by_url',
'made_by',
'alternative_email',
'alternative_phone',
'alternative_region_code',
'show_qr_code',
'iframes',
'is_verified',
'enable_affiliation',
'enable_contact',
'hide_stickybar',
'whatsapp_share',
'services_slider_view',
'location_type',
'location_embed_tag',
'cover_image_type',
];
protected $casts = [
'url_alias' => 'string',
'name' => 'string',
'occupation' => 'string',
'description' => 'string',
'first_name' => 'string',
'last_name' => 'string',
'email' => 'string',
'region_code' => 'string',
'phone' => 'string',
'location' => 'string',
'location_url' => 'string',
'template_id' => 'integer',
'share_btn' => 'integer',
'company' => 'string',
'job_title' => 'string',
'dob' => 'string',
'password' => 'string',
'branding' => 'integer',
'font_family' => 'string',
'font_size' => 'string',
'custom_css' => 'string',
'custom_js' => 'string',
'status' => 'integer',
'enable_download_qr_code' => 'integer',
'tenant_id' => 'string',
'qr_code_download_size' => 'integer',
'site_title' => 'string',
'home_title' => 'string',
'meta_keyword' => 'string',
'meta_description' => 'string',
'google_analytics' => 'string',
'default_language' => 'string',
'language_enable' => 'string',
'enable_enquiry_form' => 'integer',
'made_by_url' => 'string',
'made_by' => 'string',
'alternative_email' => 'string',
'alternative_phone' => 'string',
'alternative_region_code' => 'string',
'services_slider_view' => 'integer',
'cover_image_type' => 'string',
];
const VERIFIED = 1;
const NOTVERIFIED = 0;
const SELECT_VERIFIED = 2;
const STATUS_ARR = [
self::SELECT_VERIFIED => 'Select Verified',
self::VERIFIED => 'Verified',
self::NOTVERIFIED => 'Not Verified',
];
/**
* @var string[]
*/
protected $appends = ['profile_url', 'cover_url', 'profile_url_base64', 'full_name'];
/**
* Validation rules
*
* @var array
*/
public static $rules = [
'url_alias' => 'string|min:6|max:24|unique:vcards,url_alias',
'name' => 'string|min:2',
'occupation' => 'nullable|string',
'first_name' => 'string|min:2',
'description' => 'nullable|string',
'last_name' => 'string',
'company' => 'nullable|string',
'job_title' => 'nullable|string',
'email' => 'nullable|email:filter',
'phone' => 'nullable',
'made_by_url' => 'nullable|url',
'made_by' => 'nullable|',
'alternative_email' => 'nullable|email:filter',
'alternative_phone' => 'nullable',
];
const PROFILE_PATH = 'vcards/profiles';
const COVER_PATH = 'vcards/covers';
const LANGUAGE_ENABLE = 1;
const TEMPLATE_1 = 1;
const TEMPLATE_2 = 2;
const TEMPLATE_3 = 3;
const TEMPLATE_4 = 4;
const TEMPLATE = [
self::TEMPLATE_1,
self::TEMPLATE_2,
self::TEMPLATE_3,
self::TEMPLATE_4,
];
const ACTIVE = 1;
const INACTIVE = 0;
const SELECT_STATUS = 2;
const STATUS = [
self::SELECT_STATUS => 'Select Status',
self::ACTIVE => 'Active',
self::INACTIVE => 'Deactive',
];
const TEMPLATE_URL = [
self::TEMPLATE_1 => 'assets/images/default_cover_image.jpg',
self::TEMPLATE_2 => 'assets/images/default_cover_image.jpg',
self::TEMPLATE_3 => 'assets/images/default_cover_image.jpg',
self::TEMPLATE_4 => 'assets/images/default_cover_image.jpg',
];
const FONT_FAMILY = [
'Poppins' => 'Default',
'Roboto' => 'Roboto',
'Times New Roman' => 'Times New Roman',
'Open Sans' => 'Open Sans',
'Montserrat' => 'Montserrat',
'Lato' => 'Lato',
'Raleway' => 'Raleway',
'PT Sans' => 'PT Sans',
'Merriweather' => 'Merriweather',
'Prompt' => 'Prompt',
'Work Sans' => 'Work Sans',
'Concert One' => 'Concert One',
];
const LINK = 0;
const EMBED_TAG = 1;
const LOCATION_TYPE = [
self::LINK => 'link',
self::EMBED_TAG => 'embed_tag',
];
const COVER = 0;
const CONTAIN = 1;
const COVER_IMAGE_TYPE = [
self::COVER => 'cover',
self::CONTAIN => 'contain',
];
public function getFullNameAttribute(): string
{
return $this->first_name . ' ' . $this->last_name;
}
public function getProfileUrlAttribute(): string
{
/** @var Media $media */
$media = $this->getMedia(self::PROFILE_PATH)->first();
if ($media !== null) {
return $media->getFullUrl();
}
return asset('web/media/avatars/user2.png');
}
public function getProfileUrlBase64Attribute(): string
{
$url = asset('web/media/avatars/user2.png');
/** @var Media $media */
$media = $this->getMedia(self::PROFILE_PATH)->first();
if ($media !== null) {
$url = $media->getFullUrl();
}
return base64_encode($url);
}
public function getCoverUrlAttribute(): string
{
/** @var Media $media */
$media = $this->getMedia(self::COVER_PATH)->first();
if ($media !== null) {
return $media->getFullUrl();
}
return asset('assets/images/default_cover_image.jpg');
}
public function template(): BelongsTo
{
return $this->belongsTo(Template::class, 'template_id');
}
public function services(): HasMany
{
return $this->hasMany(VcardService::class, 'vcard_id');
}
public function gallery(): HasMany
{
return $this->hasMany(Gallery::class, 'vcard_id');
}
public function products(): HasMany
{
return $this->hasMany(Product::class, 'vcard_id');
}
public function InstagramEmbed(): HasMany
{
return $this->hasMany(InstagramEmbed::class, 'vcard_id');
}
public function testimonials(): HasMany
{
return $this->hasMany(Testimonial::class, 'vcard_id');
}
public function socialLink(): HasOne
{
return $this->hasOne(SocialLink::class, 'vcard_id');
}
public function subscriptions(): HasMany
{
return $this->hasMany(Subscription::class, 'tenant_id', 'tenant_id');
}
public function user(): HasOne
{
return $this->hasOne(User::class, 'tenant_id', 'tenant_id');
}
public function appointmentDetail(): HasOne
{
return $this->hasOne(AppointmentDetail::class, 'vcard_id');
}
public function businessCard(): HasOne
{
return $this->hasOne(BusinessCards::class, 'vcard_id');
}
public function businessHours(): HasMany
{
return $this->hasMany(BusinessHour::class, 'vcard_id', 'id');
}
public function appointmentHours(): HasMany
{
return $this->hasMany(Appointment::class, 'vcard_id', 'id');
}
public function enquiry(): HasMany
{
return $this->hasMany(Enquiry::class, 'vcard_id');
}
public function Analytics(): HasMany
{
return $this->hasMany(Analytic::class, 'vcard_id');
}
public function blogs(): HasMany
{
return $this->hasMany(VcardBlog::class, 'vcard_id');
}
public function privacy_policy(): HasOne
{
return $this->hasOne(PrivacyPolicy::class, 'vcard_id');
}
public function term_condition(): HasOne
{
return $this->hasOne(TermCondition::class, 'vcard_id');
}
public function schedule_appointments(): HasMany
{
return $this->hasMany(ScheduleAppointment::class, 'vcard_id');
}
public function subscriptions_email(): HasMany
{
return $this->hasMany(VcardEmailSubscription::class, 'vcard_id');
}
public function banners()
{
return $this->hasMany(Banner::class);
}
public function iframes()
{
return $this->hasMany(Iframe::class);
}
public function dynamic_vcard(): HasMany
{
return $this->hasMany(DynamicVcard::class, 'vcard_id');
}
public function customeLink(): HasMany
{
return $this->hasMany(CustomLink::class, 'vcard_id');
}
public function Qrcode()
{
return $this->hasMany(QrcodeEdit::class);
}
}