diff --git a/Modules/Setting/Entities/Setting.php b/Modules/Setting/Entities/Setting.php index 4afa2fa44..79314a955 100644 --- a/Modules/Setting/Entities/Setting.php +++ b/Modules/Setting/Entities/Setting.php @@ -4,12 +4,19 @@ use Dimsav\Translatable\Translatable; use Illuminate\Database\Eloquent\Model; +use Modules\Media\Support\Traits\MediaRelation; class Setting extends Model { - use Translatable; + use Translatable, MediaRelation; public $translatedAttributes = ['value', 'description']; protected $fillable = ['name', 'value', 'description', 'isTranslatable', 'plainValue']; protected $table = 'setting__settings'; + + public function isMedia(): bool + { + $value = json_decode($this->plainValue, true); + return is_array($value) && isset($value['medias_single']); + } } diff --git a/Modules/Setting/Events/SettingWasCreated.php b/Modules/Setting/Events/SettingWasCreated.php index b10d6b99b..2536a87e4 100644 --- a/Modules/Setting/Events/SettingWasCreated.php +++ b/Modules/Setting/Events/SettingWasCreated.php @@ -2,17 +2,40 @@ namespace Modules\Setting\Events; +use Modules\Media\Contracts\StoringMedia; use Modules\Setting\Entities\Setting; -class SettingWasCreated +class SettingWasCreated implements StoringMedia { /** * @var Setting */ public $setting; - public function __construct(Setting $setting) + /** + * @var array + */ + public $data; + + public function __construct(Setting $setting, $data) { $this->setting = $setting; + $this->data = $data; + } + + /** + * @inheritDoc + */ + public function getEntity() + { + return $this->setting; + } + + /** + * @inheritDoc + */ + public function getSubmissionData() + { + return $this->data; } } diff --git a/Modules/Setting/Events/SettingWasUpdated.php b/Modules/Setting/Events/SettingWasUpdated.php index 7a0da6a55..edd464622 100644 --- a/Modules/Setting/Events/SettingWasUpdated.php +++ b/Modules/Setting/Events/SettingWasUpdated.php @@ -2,17 +2,41 @@ namespace Modules\Setting\Events; +use Modules\Media\Contracts\StoringMedia; + use Modules\Setting\Entities\Setting; -class SettingWasUpdated +class SettingWasUpdated implements StoringMedia { /** * @var Setting */ public $setting; - public function __construct(Setting $setting) + /** + * @var array + */ + public $data; + + public function __construct(Setting $setting, $data) { $this->setting = $setting; + $this->data = $data; + } + + /** + * @inheritDoc + */ + public function getEntity() + { + return $this->setting; + } + + /** + * @inheritDoc + */ + public function getSubmissionData() + { + return $this->data; } } diff --git a/Modules/Setting/Repositories/Eloquent/EloquentSettingRepository.php b/Modules/Setting/Repositories/Eloquent/EloquentSettingRepository.php index 27e46d7bb..c1fcf7132 100644 --- a/Modules/Setting/Repositories/Eloquent/EloquentSettingRepository.php +++ b/Modules/Setting/Repositories/Eloquent/EloquentSettingRepository.php @@ -49,6 +49,16 @@ public function createOrUpdate($settings) $this->removeTokenKey($settings); foreach ($settings as $settingName => $settingValues) { + // Check if media exists + if($settingName == 'medias_single') { + // Get first key of values (Original settingName) + foreach ($settingValues as $key => $value) { + $normalisedValue = [ $settingName => [$key => $value] ]; + $settingName = $key; + break; + } + $settingValues = $normalisedValue; + } if ($setting = $this->findByName($settingName)) { $this->updateSetting($setting, $settingValues); continue; @@ -99,7 +109,7 @@ private function createForName($settingName, $settingValues) $setting->save(); - event(new SettingWasCreated($setting)); + event(new SettingWasCreated($setting, $settingValues)); return $setting; } @@ -121,7 +131,7 @@ private function updateSetting($setting, $settingValues) } $setting->save(); - event(new SettingWasUpdated($setting)); + event(new SettingWasUpdated($setting, $settingValues)); return $setting; } diff --git a/Modules/Setting/Resources/views/admin/fields/plain/media-single.blade.php b/Modules/Setting/Resources/views/admin/fields/plain/media-single.blade.php new file mode 100644 index 000000000..fa7df6fed --- /dev/null +++ b/Modules/Setting/Resources/views/admin/fields/plain/media-single.blade.php @@ -0,0 +1,5 @@ +@php + $setting = isset($dbSettings[$settingName]) ? $dbSettings[$settingName] : null; +@endphp + +@mediaSingle($settingName, $setting, null, trans($moduleInfo['description'])) diff --git a/Modules/Setting/Resources/views/admin/fields/translatable/media-single.blade.php b/Modules/Setting/Resources/views/admin/fields/translatable/media-single.blade.php new file mode 100644 index 000000000..fa7df6fed --- /dev/null +++ b/Modules/Setting/Resources/views/admin/fields/translatable/media-single.blade.php @@ -0,0 +1,5 @@ +@php + $setting = isset($dbSettings[$settingName]) ? $dbSettings[$settingName] : null; +@endphp + +@mediaSingle($settingName, $setting, null, trans($moduleInfo['description'])) diff --git a/Modules/Setting/Support/Settings.php b/Modules/Setting/Support/Settings.php index c11587735..9ac9db50d 100644 --- a/Modules/Setting/Support/Settings.php +++ b/Modules/Setting/Support/Settings.php @@ -36,6 +36,10 @@ public function get($name, $locale = null, $default = null) return is_null($default) ? $defaultFromConfig : $default; } + if($setting->isMedia() && $media = $setting->files()->first()) { + return $media->path; + } + if ($setting->isTranslatable) { if ($setting->hasTranslation($locale)) { return trim($setting->translate($locale)->value) === '' ? $defaultFromConfig : $setting->translate($locale)->value; diff --git a/Modules/Setting/Tests/BaseSettingTest.php b/Modules/Setting/Tests/BaseSettingTest.php index 409a6978e..38d41642e 100644 --- a/Modules/Setting/Tests/BaseSettingTest.php +++ b/Modules/Setting/Tests/BaseSettingTest.php @@ -78,5 +78,9 @@ private function resetDatabase() $this->artisan('migrate', [ '--database' => 'sqlite', ]); + $this->artisan('migrate', [ + '--database' => 'sqlite', + '--path' => 'Modules/Media/Database/Migrations', + ]); } }