wip
This commit is contained in:
181
app/Models/CMS/Media/Carousel.php
Normal file
181
app/Models/CMS/Media/Carousel.php
Normal file
@@ -0,0 +1,181 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\CMS\Media;
|
||||
|
||||
use App\Models\Concerns\HasSchemalessAttributes;
|
||||
use App\Models\Ecommerce\Product\Brand\Brand;
|
||||
use App\Models\Ecommerce\Product\Category\Category;
|
||||
use App\Models\Ecommerce\Product\Collection\Collection;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Spatie\EloquentSortable\SortableTrait;
|
||||
use Spatie\MediaLibrary\HasMedia;
|
||||
use Spatie\MediaLibrary\InteractsWithMedia;
|
||||
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||
use Spatie\Translatable\HasTranslations;
|
||||
|
||||
class Carousel extends Model implements HasMedia
|
||||
{
|
||||
use HasFactory;
|
||||
use HasSchemalessAttributes;
|
||||
use HasTranslations;
|
||||
use InteractsWithMedia;
|
||||
use SortableTrait;
|
||||
|
||||
/**
|
||||
* Table
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $table = 'carousels';
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<string>
|
||||
*/
|
||||
protected $fillable = [
|
||||
'id',
|
||||
'app',
|
||||
'title',
|
||||
'description',
|
||||
'place',
|
||||
'link',
|
||||
'is_visible',
|
||||
'resource_id',
|
||||
'resource_type',
|
||||
'sort_order',
|
||||
'options',
|
||||
];
|
||||
|
||||
/**
|
||||
* Transtable fields
|
||||
*
|
||||
* @var array<string>
|
||||
*/
|
||||
public array $translatable = ['title', 'description'];
|
||||
|
||||
/**
|
||||
* Sortable attributes
|
||||
*
|
||||
* @var array<string, mixed>
|
||||
*/
|
||||
public $sortable = [
|
||||
'order_column_name' => 'sort_order',
|
||||
'sort_when_creating' => true,
|
||||
];
|
||||
|
||||
/**
|
||||
* Category
|
||||
*/
|
||||
public function category(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Category::class, 'resource_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* Collection
|
||||
*/
|
||||
public function collection(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Collection::class, 'resource_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* Brand
|
||||
*/
|
||||
public function brand(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Brand::class, 'resource_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* Media collections
|
||||
*/
|
||||
public function registerMediaCollections(): void
|
||||
{
|
||||
$this->addMediaCollection('main')
|
||||
->singleFile();
|
||||
}
|
||||
|
||||
/**
|
||||
* Media conversations
|
||||
*/
|
||||
public function registerMediaConversions(?Media $media = null): void
|
||||
{
|
||||
$this->addMediaConversion('thumb50x50')
|
||||
->width(50)
|
||||
->height(50);
|
||||
|
||||
$this->addMediaConversion('thumb350x350')
|
||||
->width(350)
|
||||
->height(350);
|
||||
|
||||
$this->addMediaConversion('thumb650x650')
|
||||
->width(650)
|
||||
->height(650);
|
||||
}
|
||||
|
||||
/**
|
||||
* Thumbnail
|
||||
*/
|
||||
public function thumbnail(string $resolution = '50x50'): string
|
||||
{
|
||||
return $this->getFirstMediaUrl('main', 'thumb'.$resolution);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scope to filter
|
||||
*
|
||||
* @param mixed $query
|
||||
* @param string $attribute
|
||||
* @param string $value
|
||||
* @return $query
|
||||
*/
|
||||
public function scopeFilter($query, $attribute, $value): Builder
|
||||
{
|
||||
return $value ? $query->where($attribute, $value) : $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* Main image
|
||||
*/
|
||||
public function image(): string
|
||||
{
|
||||
return $this->getFirstMediaUrl('main');
|
||||
}
|
||||
|
||||
/**
|
||||
* Text color
|
||||
*/
|
||||
public function textColor(): string
|
||||
{
|
||||
return $this->options->get('color') ?? '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Places for banner
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function places(): array
|
||||
{
|
||||
return [
|
||||
'homepage' => __('Homepage'),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Attachable resourcec to banner
|
||||
*/
|
||||
public static function attachableResources(): array
|
||||
{
|
||||
return [
|
||||
'brand' => __('Brand'),
|
||||
'category' => __('Category'),
|
||||
'collection' => __('Collection'),
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user