⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.19
Server IP:
178.33.27.10
Server:
Linux cpanel.dev-unit.com 3.10.0-1160.108.1.el7.x86_64 #1 SMP Thu Jan 25 16:17:31 UTC 2024 x86_64
Server Software:
Apache/2.4.57 (Unix) OpenSSL/1.0.2k-fips
PHP Version:
8.2.11
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
home
/
id
/
b2c-booking.dev-unit.com
/
app
/
View File Name :
BaseModel.php
<?php namespace App; use App\Traits\HasStatus; use App\Traits\HasTranslations; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; use Modules\Core\Helpers\SitemapHelper; use Modules\Core\Models\SEO; use Modules\Media\Helpers\FileHelper; class BaseModel extends Model { use HasStatus; use HasTranslations; protected $dateFormat = 'Y-m-d H:i:s'; protected $slugField = ''; protected $slugFromField = ''; protected $cleanFields = []; protected $seo_type; public $translationForeignKey = 'origin_id'; public static function getModelName() { } public static function getAsMenuItem($id) { return false; } public static function searchForMenu($q = false) { return []; } public function save(array $options = []) { // Clear Sitemap on Save if($this->type or $this->sitemap_type){ $sitemapHelper = app()->make(SitemapHelper::class); $sitemapHelper->clear($this->sitemap_type ? $this->sitemap_type : $this->type); } if ($this->create_user) { $this->update_user = Auth::id(); } else { $this->create_user = Auth::id(); } if ($this->slugField && $this->slugFromField) { $slugField = $this->slugField; $this->$slugField = $this->generateSlug($this->$slugField); } $this->cleanFields(); return parent::save($options); // TODO: Change the autogenerated stub } /** * @todo HTMLPurifier * @param array $fields */ protected function cleanFields($fields = []) { if (empty($fields)) $fields = $this->cleanFields; if (!empty($fields)) { foreach ($fields as $field) { if ($this->$field !== NULL) { $this->$field = clean($this->$field,'youtube'); } } } } public function generateSlug($string = false, $count = 0) { $slugFromField = $this->slugFromField; if (empty($string)) $string = $this->$slugFromField; $slug = $newSlug = $this->strToSlug($string); $newSlug = $slug . ($count ? '-' . $count : ''); $model = static::select('count(id)'); if ($this->id) { $model->where('id', '<>', $this->id); } $check = $model->where($this->slugField, $newSlug)->count(); if (!empty($check)) { return $this->generateSlug($slug, $count + 1); } return $newSlug; } // Add Support for non-ascii string // Example বাংলাদেশ ব্যাংকের রিজার্ভের অর্থ চুরির ঘটনায় ফিলিপাইনের protected function strToSlug($string) { $slug = Str::slug($string); if(empty($slug)){ $slug = preg_replace('/\s+/u', '-', trim($string)); } return $slug; } public function getDetailUrl() { return ''; } public function getEditUrl() { return ''; } public function author() { return $this->belongsTo(User::class, "author_id", "id")->withDefault(); } public function vendor(){ return $this->belongsTo(User::class, "vendor_id", 'id')->withDefault(); } public function cacheKey(){ return strtolower($this->table); } public function findById($id) { return Cache::rememberForever($this->cacheKey() . ':' . $id, function () use ($id) { return $this->find($id); }); } public function currentUser() { return Auth::user(); } public function origin(){ return $this->hasOne(get_class($this),'id','origin_id'); } public function getIsTranslationAttribute(){ if($this->origin_id) return true; return false; } public function getTranslationsByLocalesAttribute(){ $translations = $this->translations; $res = []; foreach ($translations as $translation) { $res[$translation->lang] = $translation; } return $res; } public function getIsPublishedAttribute(){ if($this->is_translation){ $origin = $this->origin; if(empty($origin)) return false; return $origin->status == 'publish'; }else{ return $this->status == 'publish'; } } public function saveSEO(\Illuminate\Http\Request $request , $locale = false) { if(!$this->seo_type) return; $seo_key = $this->seo_type; if(!empty($locale)) $seo_key = $seo_key."_".$locale; $meta = SEO::where('object_id', $this->id)->where('object_model', $seo_key)->first(); if (!$meta) { $meta = new SEO(); $meta->object_id = $this->id; $meta->object_model = $seo_key; } $meta->fill($request->input()); return $meta->save(); } public function getSeoMeta($locale = false) { if(!$this->seo_type) return; $seo_key = $this->seo_type; if(!empty($locale)) $seo_key = $seo_key."_".$locale; $meta = SEO::where('object_id', $this->id ? $this->id : $this->origin_id )->where('object_model', $seo_key)->first(); if(!empty($meta)){ $meta = $meta->toArray(); } $meta['slug'] = $this->slug; $meta['full_url'] = $this->getDetailUrl(); $meta['service_title'] = $this->title ?? $this->name; $meta['service_desc'] = $this->short_desc ?: Str::limit(strip_tags($this->content), 160); $meta['service_image'] = $this->image_id; return $meta; } public function getSeoMetaWithTranslation($locale,$translation){ if(is_default_lang($locale)) return $this->getSeoMeta(); if(!empty($translation->origin_id)){ $meta = $translation->getSeoMeta( $locale ); $meta['full_url'] = $this->getDetailUrl(); $meta['slug'] = $this->slug; $meta['service_image'] = $this->image_id;; return $meta; } } public function fillByAttr($attributes , $input) { if(!empty($attributes)){ foreach ( $attributes as $item ){ $this->$item = isset($input[$item]) ? ($input[$item]) : null; } } } public function review_after_booking(){ } public static function getTableName() { return with(new static)->table; } public function hasPermissionDetailView(){ if($this->status == "publish"){ return true; } if(Auth::id() and $this->author_id == Auth::id() and Auth::user()->hasPermission('dashboard_vendor_access')){ return true; } return false; } public function getForSitemap(){ switch ($this->type){ case("location"); // code here break; } $all = parent::query()->where('status','publish')->get(); $res = []; foreach ($all as $item){ $res[] = [ 'loc'=>$item->getDetailUrl(), 'lastmod'=>date('c',strtotime($item->updated_at ? $item->updated_at : $item->created_at)), ]; } return $res; } public function getImageUrlAttribute($size = "medium") { $url = FileHelper::url($this->image_id, $size); return $url ? $url : ''; } public function getGallery($featuredIncluded = false) { if (empty($this->gallery)) { return []; } $list_item = []; if ($featuredIncluded and $this->image_id) { $list_item[] = [ 'large' => FileHelper::url($this->image_id, 'full'), 'thumb' => FileHelper::url($this->image_id, 'thumb') ]; } $items = explode(",", $this->gallery); foreach ($items as $k => $item) { $large = FileHelper::url($item, 'full'); $thumb = FileHelper::url($item, 'thumb'); if(!empty($large)){ $list_item[] = [ 'large' => $large, 'thumb' => $thumb ]; } } return $list_item; } public static function boot() { parent::boot(); static::deleted(function($table) { // clear cache Cache::forget($table->cacheKey() . ':' . $table->id); }); } }