feat: add media handling capabilities to multiple models and improve media conversion process
This commit is contained in:
parent
a3c642e173
commit
ff8dc64a27
@ -9,8 +9,10 @@
|
|||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
|
use Spatie\Image\Enums\Fit;
|
||||||
use Spatie\MediaLibrary\HasMedia;
|
use Spatie\MediaLibrary\HasMedia;
|
||||||
use Spatie\MediaLibrary\InteractsWithMedia;
|
use Spatie\MediaLibrary\InteractsWithMedia;
|
||||||
|
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||||
|
|
||||||
#[Appends(['formatted_attendance_date', 'formatted_check_in_at', 'formatted_check_out_at'])]
|
#[Appends(['formatted_attendance_date', 'formatted_check_in_at', 'formatted_check_out_at'])]
|
||||||
#[Guarded(['id'])]
|
#[Guarded(['id'])]
|
||||||
@ -62,4 +64,16 @@ public function payrollAdjustments(): HasMany
|
|||||||
{
|
{
|
||||||
return $this->hasMany(PayrollAdjustment::class);
|
return $this->hasMany(PayrollAdjustment::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function registerMediaCollections(): void
|
||||||
|
{
|
||||||
|
$this->addMediaCollection('checkin');
|
||||||
|
$this->addMediaCollection('checkout');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
|
{
|
||||||
|
$this->addMediaConversion('thumb')
|
||||||
|
->fit(Fit::Contain, 150, 150);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,8 +15,10 @@
|
|||||||
use Illuminate\Database\Eloquent\Relations\HasOne;
|
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||||
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
use Spatie\Image\Enums\Fit;
|
||||||
use Spatie\MediaLibrary\HasMedia;
|
use Spatie\MediaLibrary\HasMedia;
|
||||||
use Spatie\MediaLibrary\InteractsWithMedia;
|
use Spatie\MediaLibrary\InteractsWithMedia;
|
||||||
|
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||||
|
|
||||||
#[Appends(['formatted_amount', 'formatted_balance_after', 'formatted_created_at', 'type_label'])]
|
#[Appends(['formatted_amount', 'formatted_balance_after', 'formatted_created_at', 'type_label'])]
|
||||||
#[Guarded(['id'])]
|
#[Guarded(['id'])]
|
||||||
@ -119,4 +121,15 @@ public function reference(): MorphTo
|
|||||||
{
|
{
|
||||||
return $this->morphTo();
|
return $this->morphTo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function registerMediaCollections(): void
|
||||||
|
{
|
||||||
|
$this->addMediaCollection('photos');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
|
{
|
||||||
|
$this->addMediaConversion('thumb')
|
||||||
|
->fit(Fit::Contain, 150, 150);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,8 +13,10 @@
|
|||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
use Spatie\Image\Enums\Fit;
|
||||||
use Spatie\MediaLibrary\HasMedia;
|
use Spatie\MediaLibrary\HasMedia;
|
||||||
use Spatie\MediaLibrary\InteractsWithMedia;
|
use Spatie\MediaLibrary\InteractsWithMedia;
|
||||||
|
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||||
|
|
||||||
#[Appends(['formatted_cost_per_unit', 'formatted_other_cost', 'formatted_sewing_cost', 'status_label', 'formatted_total_material_cost'])]
|
#[Appends(['formatted_cost_per_unit', 'formatted_other_cost', 'formatted_sewing_cost', 'status_label', 'formatted_total_material_cost'])]
|
||||||
#[Guarded(['id'])]
|
#[Guarded(['id'])]
|
||||||
@ -110,4 +112,15 @@ public function submittedBy(): BelongsTo
|
|||||||
{
|
{
|
||||||
return $this->belongsTo(User::class, 'submitted_by_id');
|
return $this->belongsTo(User::class, 'submitted_by_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function registerMediaCollections(): void
|
||||||
|
{
|
||||||
|
$this->addMediaCollection('photos');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
|
{
|
||||||
|
$this->addMediaConversion('thumb')
|
||||||
|
->fit(Fit::Contain, 150, 150);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,8 +9,10 @@
|
|||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
use Spatie\Image\Enums\Fit;
|
||||||
use Spatie\MediaLibrary\HasMedia;
|
use Spatie\MediaLibrary\HasMedia;
|
||||||
use Spatie\MediaLibrary\InteractsWithMedia;
|
use Spatie\MediaLibrary\InteractsWithMedia;
|
||||||
|
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||||
|
|
||||||
#[Appends(['formatted_amount', 'formatted_created_at', 'formatted_date'])]
|
#[Appends(['formatted_amount', 'formatted_created_at', 'formatted_date'])]
|
||||||
#[Guarded(['id'])]
|
#[Guarded(['id'])]
|
||||||
@ -56,4 +58,15 @@ public function createdBy(): BelongsTo
|
|||||||
{
|
{
|
||||||
return $this->belongsTo(User::class, 'created_by_id');
|
return $this->belongsTo(User::class, 'created_by_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function registerMediaCollections(): void
|
||||||
|
{
|
||||||
|
$this->addMediaCollection('photos');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
|
{
|
||||||
|
$this->addMediaConversion('thumb')
|
||||||
|
->fit(Fit::Contain, 150, 150);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,8 +16,10 @@
|
|||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
use Spatie\Image\Enums\Fit;
|
||||||
use Spatie\MediaLibrary\HasMedia;
|
use Spatie\MediaLibrary\HasMedia;
|
||||||
use Spatie\MediaLibrary\InteractsWithMedia;
|
use Spatie\MediaLibrary\InteractsWithMedia;
|
||||||
|
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||||
|
|
||||||
#[Appends(['channel_label', 'formatted_cogs', 'formatted_discount', 'formatted_nego_price', 'payment_type_label', 'status_label', 'formatted_subtotal', 'formatted_total_amount'])]
|
#[Appends(['channel_label', 'formatted_cogs', 'formatted_discount', 'formatted_nego_price', 'payment_type_label', 'status_label', 'formatted_subtotal', 'formatted_total_amount'])]
|
||||||
#[Guarded(['id'])]
|
#[Guarded(['id'])]
|
||||||
@ -200,4 +202,15 @@ public function orderItems(): HasMany
|
|||||||
{
|
{
|
||||||
return $this->hasMany(OrderItem::class);
|
return $this->hasMany(OrderItem::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function registerMediaCollections(): void
|
||||||
|
{
|
||||||
|
$this->addMediaCollection('photos');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
|
{
|
||||||
|
$this->addMediaConversion('thumb')
|
||||||
|
->fit(Fit::Contain, 150, 150);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,8 +12,10 @@
|
|||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
use Spatie\Image\Enums\Fit;
|
||||||
use Spatie\MediaLibrary\HasMedia;
|
use Spatie\MediaLibrary\HasMedia;
|
||||||
use Spatie\MediaLibrary\InteractsWithMedia;
|
use Spatie\MediaLibrary\InteractsWithMedia;
|
||||||
|
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||||
|
|
||||||
#[Appends(['formatted_name', 'formatted_stock'])]
|
#[Appends(['formatted_name', 'formatted_stock'])]
|
||||||
#[Guarded(['id'])]
|
#[Guarded(['id'])]
|
||||||
@ -80,4 +82,15 @@ public function stockMutations(): HasMany
|
|||||||
return $this->hasMany(StockMutation::class, 'stockable_id')
|
return $this->hasMany(StockMutation::class, 'stockable_id')
|
||||||
->where('stockable_type', self::class);
|
->where('stockable_type', self::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function registerMediaCollections(): void
|
||||||
|
{
|
||||||
|
$this->addMediaCollection('images');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
|
{
|
||||||
|
$this->addMediaConversion('thumb')
|
||||||
|
->fit(Fit::Contain, 150, 150);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,8 +10,10 @@
|
|||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
use Spatie\Image\Enums\Fit;
|
||||||
use Spatie\MediaLibrary\HasMedia;
|
use Spatie\MediaLibrary\HasMedia;
|
||||||
use Spatie\MediaLibrary\InteractsWithMedia;
|
use Spatie\MediaLibrary\InteractsWithMedia;
|
||||||
|
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||||
|
|
||||||
#[Appends(['formatted_discount', 'formatted_shipping_cost', 'formatted_subtotal', 'formatted_total'])]
|
#[Appends(['formatted_discount', 'formatted_shipping_cost', 'formatted_subtotal', 'formatted_total'])]
|
||||||
#[Guarded(['id'])]
|
#[Guarded(['id'])]
|
||||||
@ -71,4 +73,15 @@ public function supplier(): BelongsTo
|
|||||||
{
|
{
|
||||||
return $this->belongsTo(Supplier::class);
|
return $this->belongsTo(Supplier::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function registerMediaCollections(): void
|
||||||
|
{
|
||||||
|
$this->addMediaCollection('photos');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
|
{
|
||||||
|
$this->addMediaConversion('thumb')
|
||||||
|
->fit(Fit::Contain, 150, 150);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,8 +13,10 @@
|
|||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
use Spatie\Image\Enums\Fit;
|
||||||
use Spatie\MediaLibrary\HasMedia;
|
use Spatie\MediaLibrary\HasMedia;
|
||||||
use Spatie\MediaLibrary\InteractsWithMedia;
|
use Spatie\MediaLibrary\InteractsWithMedia;
|
||||||
|
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||||
|
|
||||||
#[Appends(['formatted_price'])]
|
#[Appends(['formatted_price'])]
|
||||||
#[Guarded(['id'])]
|
#[Guarded(['id'])]
|
||||||
@ -61,4 +63,15 @@ public function getPhotoUrlAttribute(): ?string
|
|||||||
? app(S3PresignedService::class)->getTemporaryUrl($media->getPath())
|
? app(S3PresignedService::class)->getTemporaryUrl($media->getPath())
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function registerMediaCollections(): void
|
||||||
|
{
|
||||||
|
$this->addMediaCollection('images');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
|
{
|
||||||
|
$this->addMediaConversion('thumb')
|
||||||
|
->fit(Fit::Contain, 150, 150);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,8 +13,10 @@
|
|||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
use Spatie\Image\Enums\Fit;
|
||||||
use Spatie\MediaLibrary\HasMedia;
|
use Spatie\MediaLibrary\HasMedia;
|
||||||
use Spatie\MediaLibrary\InteractsWithMedia;
|
use Spatie\MediaLibrary\InteractsWithMedia;
|
||||||
|
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||||
|
|
||||||
#[Appends(['stock_type_label', 'formatted_subtotal', 'formatted_total'])]
|
#[Appends(['stock_type_label', 'formatted_subtotal', 'formatted_total'])]
|
||||||
#[Guarded(['id'])]
|
#[Guarded(['id'])]
|
||||||
@ -73,4 +75,15 @@ public function restockItems(): HasMany
|
|||||||
{
|
{
|
||||||
return $this->hasMany(RestockItem::class);
|
return $this->hasMany(RestockItem::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function registerMediaCollections(): void
|
||||||
|
{
|
||||||
|
$this->addMediaCollection('photos');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
|
{
|
||||||
|
$this->addMediaConversion('thumb')
|
||||||
|
->fit(Fit::Contain, 150, 150);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,11 +2,13 @@
|
|||||||
|
|
||||||
namespace App\Services\Concerns;
|
namespace App\Services\Concerns;
|
||||||
|
|
||||||
use App\Services\S3PresignedService;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Support\Facades\Bus;
|
||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
|
use Spatie\MediaLibrary\Conversions\ConversionCollection;
|
||||||
|
use Spatie\MediaLibrary\Conversions\Jobs\PerformConversionsJob;
|
||||||
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||||
|
|
||||||
trait RegistersMedia
|
trait RegistersMedia
|
||||||
@ -61,7 +63,6 @@ private function registerMedia(
|
|||||||
Model $model,
|
Model $model,
|
||||||
string $s3Key,
|
string $s3Key,
|
||||||
string $collectionName,
|
string $collectionName,
|
||||||
array $generatedConversions = [],
|
|
||||||
?int $fileSize = null,
|
?int $fileSize = null,
|
||||||
?string $mimeType = null,
|
?string $mimeType = null,
|
||||||
?int $orderColumn = null,
|
?int $orderColumn = null,
|
||||||
@ -69,7 +70,7 @@ private function registerMedia(
|
|||||||
): void {
|
): void {
|
||||||
$fileName = pathinfo($s3Key, PATHINFO_BASENAME);
|
$fileName = pathinfo($s3Key, PATHINFO_BASENAME);
|
||||||
|
|
||||||
Media::create([
|
$media = Media::create([
|
||||||
'model_type' => $model->getMorphClass(),
|
'model_type' => $model->getMorphClass(),
|
||||||
'model_id' => $model->id,
|
'model_id' => $model->id,
|
||||||
'uuid' => Str::uuid(),
|
'uuid' => Str::uuid(),
|
||||||
@ -82,10 +83,29 @@ private function registerMedia(
|
|||||||
'size' => $fileSize ?? 0,
|
'size' => $fileSize ?? 0,
|
||||||
'manipulations' => [],
|
'manipulations' => [],
|
||||||
'custom_properties' => ['s3_key' => $s3Key],
|
'custom_properties' => ['s3_key' => $s3Key],
|
||||||
'generated_conversions' => $generatedConversions,
|
'generated_conversions' => [],
|
||||||
'responsive_images' => [],
|
'responsive_images' => [],
|
||||||
'order_column' => $orderColumn ?? 1,
|
'order_column' => $orderColumn ?? 1,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$this->generateMediaConversions($media);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function generateMediaConversions(Media $media): void
|
||||||
|
{
|
||||||
|
$model = $media->model;
|
||||||
|
|
||||||
|
if (! $model || ! method_exists($model, 'registerMediaConversions')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$conversions = ConversionCollection::createForMedia($media);
|
||||||
|
|
||||||
|
if ($conversions->isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bus::dispatch(new PerformConversionsJob($conversions, $media));
|
||||||
}
|
}
|
||||||
|
|
||||||
private function syncPhoto(Model $model, array $data, string $collectionName = 'photos'): void
|
private function syncPhoto(Model $model, array $data, string $collectionName = 'photos'): void
|
||||||
@ -132,7 +152,6 @@ private function syncReceipt(Model $model, ?string $newKey, string $collectionNa
|
|||||||
model: $model,
|
model: $model,
|
||||||
s3Key: $newKey,
|
s3Key: $newKey,
|
||||||
collectionName: $collectionName,
|
collectionName: $collectionName,
|
||||||
generatedConversions: ['thumb' => true],
|
|
||||||
fileSize: $fileSize,
|
fileSize: $fileSize,
|
||||||
mimeType: $fileMimeType,
|
mimeType: $fileMimeType,
|
||||||
);
|
);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user