dstpabuaran.com/app/Media/PathGenerators/CustomPathGenerator.php
Yoga Pangestu e9faa6a322 feat: update media handling to use 'images' collection and improve path generation
- Refactored CustomPathGenerator to handle S3 keys and default paths more effectively.
- Changed media collection references from 'photos' to 'images' across various services.
- Updated methods to retrieve media URLs using the new path generation logic.
- Enhanced transaction-related components to display associated images.
2026-08-12 12:11:29 +07:00

74 lines
2.1 KiB
PHP

<?php
namespace App\Media\PathGenerators;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\MediaLibrary\Support\PathGenerator\PathGenerator;
class CustomPathGenerator implements PathGenerator
{
public function getPath(Media $media): string
{
$s3Key = $media->getCustomProperty('s3_key');
if ($s3Key) {
return dirname($s3Key).'/';
}
if (str_contains($media->file_name, '/')) {
return '';
}
$model = $media->model;
if ($model && method_exists($model, 'getMediaPath')) {
return $model->getMediaPath($media).'/';
}
return $this->defaultPath($media);
}
public function getPathForConversions(Media $media): string
{
$s3Key = $media->getCustomProperty('s3_key');
$dir = $s3Key ? dirname($s3Key).'/' : $this->defaultPath($media);
return $dir.'conversions/';
}
public function getPathForResponsiveImages(Media $media): string
{
$s3Key = $media->getCustomProperty('s3_key');
$dir = $s3Key ? dirname($s3Key).'/' : $this->defaultPath($media);
return $dir.'responsive/';
}
private function defaultPath(Media $media): string
{
$moduleMap = [
'UserProfile' => 'user-profile',
'Attendance' => 'attendance',
'SystemConfiguration' => 'setting',
'HomepageConfiguration' => 'homepage',
'ProductVariant' => 'product',
'Cutting' => 'cutting',
'RawMaterialPrice' => 'raw-material',
'CashTransaction' => 'cash',
'Expense' => 'expense',
'Order' => 'order',
'Restock' => 'restock',
'Purchase' => 'purchase',
'OwnerVerificationRequest' => 'owner_verification_request',
];
$modelClass = class_basename($media->model_type);
$module = $moduleMap[$modelClass] ?? strtolower($modelClass);
$collection = $media->collection_name;
$date = $media->created_at->format('Y-m-d');
$id = $media->model_id;
return "{$module}/{$collection}/{$date}/{$id}/";
}
}