File "Location.php"
Full Path: /home/bettaeza/flyinsyria.com/Location/Models/Location.php
File size: 5.12 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace Modules\Location\Models;
use App\BaseModel;
use Illuminate\Http\Request;
use Kalnoy\Nestedset\NodeTrait;
use Modules\Booking\Models\Bookable;
use Modules\Media\Helpers\FileHelper;
use Illuminate\Database\Eloquent\SoftDeletes;
use Modules\Core\Models\SEO;
use Modules\Property\Models\Property;
class Location extends BaseModel
{
use SoftDeletes;
use NodeTrait;
protected $table = 'bravo_locations';
protected $fillable = [
'name',
'content',
'image_id',
'map_lat',
'map_lng',
'map_zoom',
'status',
'parent_id',
'banner_image_id',
'trip_ideas',
];
protected $slugField = 'slug';
protected $slugFromField = 'name';
protected $seo_type = 'location';
protected $casts = [
'trip_ideas' => 'array'
];
protected $translation_class = LocationTranslation::class;
public static function getModelName()
{
return __("Location");
}
public static function searchForMenu($q = false)
{
$query = static::select('id', 'name');
if (strlen($q)) {
$query->where('name', 'like', "%" . $q . "%");
}
$a = $query->orderBy('id', 'desc')->limit(10)->get();
return $a;
}
public function getImageUrl($size = "medium")
{
$url = FileHelper::url($this->image_id, $size);
return $url ? $url : '';
}
public function getImageUrlAttribute($size = "medium")
{
$url = FileHelper::url($this->image_id, $size);
return $url ? $url : '';
}
public function getBannerImageUrlAttribute($size = "medium")
{
$url = FileHelper::url($this->banner_image_id, $size);
return $url ? $url : '';
}
public function getDisplayNumberServiceInLocation($service_type)
{
$allServices = get_bookable_services();
if(empty($allServices[$service_type])) return false;
$module = new $allServices[$service_type];
return $module->getNumberServiceInLocation($this);
}
public function getDetailUrl($locale = false)
{
return url(app_get_locale(false, false, '/') . config('location.location_route_prefix') . "/" . $this->slug);
}
public function getLinkForPageSearch($service_type)
{
$allServices = get_bookable_services();
if(empty($allServices[$service_type])) return url('/');
$module = new $allServices[$service_type];
return $module->getLinkForPageSearch(false, ['location_id' => $this->id]);
}
public function search($request)
{
$query = parent::query()->select("bravo_locations.*");
if(!empty( $service_name = $request['service_name'] ?? '' )){
if( setting_item('site_enable_multi_lang') && setting_item('site_locale') != app()->getLocale() ){
$query->leftJoin('bravo_location_translations', function ($join) {
$join->on('bravo_locations.id', '=', 'bravo_location_translations.origin_id');
});
$query->where('bravo_location_translations.name', 'LIKE', '%' . $service_name . '%');
}else{
$query->where('bravo_locations.name', 'LIKE', '%' . $service_name . '%');
}
}
$query->orderBy("id", "desc");
$query->groupBy("bravo_locations.id");
$limit = min(20,$request['limit'] ?? 9);
return $query->with(['translation'])->paginate($limit);
}
public function dataForApi($forSingle = false){
$translation = $this->translate();
$data = [
'id'=>$this->id,
'title'=>$translation->name,
'image'=>get_file_url($this->image_id,'medium'),
'content'=>$translation->content,
];
if($forSingle){
$data["map_lat"] = $this->map_lat;
$data["map_lng"] = $this->map_lng;
$data["map_zoom"] = $this->map_zoom;
$data["banner_image"] = get_file_url($this->banner_image_id,'full');
$data["trip_ideas"] = null;
if (!empty($this->trip_ideas)) {
$trip_ideas = json_decode($this->trip_ideas, true);
foreach ($trip_ideas as &$item) {
$item['image'] = get_file_url($item['image_id'], 'full');
}
$data["trip_ideas"] = $trip_ideas;
}
}
return $data;
}
public function properties()
{
return $this->hasMany(Property::class, 'location_id');
}
}