diff --git a/src/app/Library/Uploaders/Support/RegisterUploadEvents.php b/src/app/Library/Uploaders/Support/RegisterUploadEvents.php index 53458b819c..3dccd438f7 100644 --- a/src/app/Library/Uploaders/Support/RegisterUploadEvents.php +++ b/src/app/Library/Uploaders/Support/RegisterUploadEvents.php @@ -6,6 +6,7 @@ use Backpack\CRUD\app\Library\CrudPanel\CrudField; use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD; use Backpack\CRUD\app\Library\Uploaders\Support\Interfaces\UploaderInterface; +use Backpack\CRUD\app\Library\Uploaders\Support\UploaderLocator; use Exception; use Illuminate\Database\Eloquent\Relations\Pivot; @@ -45,19 +46,21 @@ private function registerEvents(array|null $subfield = [], ?bool $registerModelE $attributes = $this->crudObject->getAttributes(); $model = $attributes['model'] ?? get_class($this->crudObject->crud()->getModel()); - $uploader = $this->getUploader($attributes, $this->uploaderConfiguration); + /** @var UploaderInterface */ + $uploader = UploaderLocator::for($attributes, $this->uploaderConfiguration, $this->crudObjectType, $this->macro); if (isset($attributes['relation_type']) && $attributes['entity'] !== false) { $uploader = $uploader->relationship(true); } - + $this->setupModelEvents($model, $uploader); $this->setupUploadConfigsInCrudObject($uploader); } private function registerSubfieldEvent(array $subfield, bool $registerModelEvents = true): void { - $uploader = $this->getUploader($subfield, $this->uploaderConfiguration); + /** @var UploaderInterface */ + $uploader = UploaderLocator::for($subfield, $this->uploaderConfiguration, $this->crudObjectType, $this->macro); $crudObject = $this->crudObject->getAttributes(); $uploader = $uploader->repeats($crudObject['name']); diff --git a/src/app/Library/Uploaders/Support/UploaderLocator.php b/src/app/Library/Uploaders/Support/UploaderLocator.php new file mode 100644 index 0000000000..3126bc9b7b --- /dev/null +++ b/src/app/Library/Uploaders/Support/UploaderLocator.php @@ -0,0 +1,21 @@ +hasUploadFor($crudObject['type'], $macro)) { + return app('UploadersRepository')->getUploadFor($crudObject['type'], $macro)::for($crudObject, $uploaderConfiguration); + } + + throw new Exception('Undefined upload type for '.$crudObjectType.' type: '.$crudObject['type']); + } +} \ No newline at end of file diff --git a/src/app/Library/Uploaders/Uploader.php b/src/app/Library/Uploaders/Uploader.php index e636aa6fa9..a394c69351 100644 --- a/src/app/Library/Uploaders/Uploader.php +++ b/src/app/Library/Uploaders/Uploader.php @@ -3,8 +3,6 @@ namespace Backpack\CRUD\app\Library\Uploaders; use Backpack\CRUD\app\Library\Uploaders\Support\Interfaces\UploaderInterface; -use Backpack\CRUD\app\Library\Uploaders\Support\Traits\HandleFileNaming; -use Backpack\CRUD\app\Library\Uploaders\Support\Traits\HandleRepeatableUploads; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Support\Facades\Storage; @@ -12,8 +10,8 @@ abstract class Uploader implements UploaderInterface { - use HandleFileNaming; - use HandleRepeatableUploads; + use \Backpack\CRUD\app\Library\Uploaders\Support\Traits\HandleFileNaming, + \Backpack\CRUD\app\Library\Uploaders\Support\Traits\HandleRepeatableUploads; private string $name;