![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/job-board.corals.io/Corals/modules/Directory/Models/ |
<?php namespace Corals\Modules\Directory\Models; use Corals\Foundation\Models\BaseModel; use Corals\Foundation\Search\Indexable; use Corals\Foundation\Traits\ModelPropertiesTrait; use Corals\Foundation\Transformers\PresentableTrait; use Corals\Modules\Utility\Models\Address\Location; use Corals\User\Models\User; use Corals\Modules\Utility\Traits\Gallery\ModelHasGallery; use Cviebrock\EloquentSluggable\Sluggable; use Spatie\Activitylog\Traits\LogsActivity; use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\HasMedia; use Corals\Modules\Utility\Traits\Tag\HasTags; use Corals\Modules\Utility\Traits\Category\ModelHasCategory; use Corals\Modules\Utility\Traits\Wishlist\Wishlistable; use Corals\Modules\Utility\Traits\Rating\ReviewRateable as ReviewRateableTrait; use Corals\Modules\Utility\Traits\Schedules\Scheduleable; class Listing extends BaseModel implements HasMedia { use Indexable, Sluggable, PresentableTrait, ModelHasGallery, LogsActivity, ModelHasCategory, ModelPropertiesTrait , HasTags, InteractsWithMedia , ReviewRateableTrait, Wishlistable, Scheduleable; public $galleryMediaCollection = 'directory-listing-gallery'; /** * Model configuration. * @var string */ public $config = 'directory.models.listing'; protected $casts = [ 'properties' => 'array', 'is_featured' => 'boolean', ]; public function getModuleName() { return 'Directory'; } protected $guarded = []; protected $indexContentColumns = ['description', 'caption']; protected $indexTitleColumns = ['name', 'tags.name', 'tags.slug', 'categories.name']; protected $table = 'directory_listings'; public function sluggable() { return [ 'slug' => [ 'source' => 'name' ] ]; } public function location() { return $this->belongsTo(Location::class); } public function scopeVisible($query) { return $query->where('directory_listings.status', '<>', 'deleted'); } public function scopeActive($query) { return $query->where('directory_listings.status', 'active'); } public function scopeArchived($query) { return $query->where('directory_listings.status', 'archived'); } public function scopeFeatured($query) { return $query->where('directory_listings.is_featured', true)->where('directory_listings.status', 'active'); } public function user() { return $this->belongsTo(User::class); } public function scopeCalculateDistanceFor($query, $lat, $long, $radius) { $haversine = "(6371 * acos(cos(radians(" . $lat . ")) * cos(radians(directory_listings.`lat`)) * cos(radians(directory_listings.`long`) - radians(" . $long . ")) + sin(radians(" . $lat . ")) * sin(radians(directory_listings.`lat`))))"; return $query->select('*') ->selectRaw("{$haversine} AS distance") ->whereRaw("{$haversine} < ?", [$radius]); } public function scopeAuthUser($query) { return $query->where('user_id', user()->id); } public function getShowURL($id = null, $params = []) { return urlWithParameters("listings/{$this->slug}", $params); } public function getDisplayReference() { return $this->name; } public function owner() { if ($this->getAttributeValue('user_id')) { return $this->belongsTo(User::class, 'user_id'); } else { return $this->belongsTo(User::class, 'created'); } } }