From e8065c99c7eead053c9d78be24af935ebeb83009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 2 Aug 2017 10:27:58 +0200 Subject: [PATCH] FEATURE: refactorize settings --- app/CMS/Helpers/Settings.php | 4 +- .../Repositories/Settings}/Settings.php | 40 ++++++++++++++----- app/Http/Controllers/Admin/Settings.php | 28 ++----------- app/Models/Settings.php | 2 - 4 files changed, 37 insertions(+), 37 deletions(-) rename app/{Models/ModelTraits => CMS/Repositories/Settings}/Settings.php (61%) diff --git a/app/CMS/Helpers/Settings.php b/app/CMS/Helpers/Settings.php index dac28723..805afd6d 100644 --- a/app/CMS/Helpers/Settings.php +++ b/app/CMS/Helpers/Settings.php @@ -2,6 +2,7 @@ namespace App\CMS\Helpers; +use App\CMS\Repositories\Settings\Settings as SettingsRepository; use App\Models\Settings as SettingsModel; use Illuminate\Support\Facades\Cache; @@ -78,8 +79,7 @@ class Settings { if (!self::$initialized) { self::$settings = Cache::remember('settings', config('cache.settingCacheLifetime'), function () { - $model = new SettingsModel(); - return $model->getAll(); + app(SettingsRepository::class)->getAll(); }); } } diff --git a/app/Models/ModelTraits/Settings.php b/app/CMS/Repositories/Settings/Settings.php similarity index 61% rename from app/Models/ModelTraits/Settings.php rename to app/CMS/Repositories/Settings/Settings.php index 841c6125..e4110a38 100644 --- a/app/Models/ModelTraits/Settings.php +++ b/app/CMS/Repositories/Settings/Settings.php @@ -1,27 +1,26 @@ where('language', LaravelLocalization::getCurrentLocale()) - ->orWhere('language', null) - ->orderBy('language', 'ASC'); + ->where('language', LaravelLocalization::getCurrentLocale()) + ->orWhere('language', null) + ->orderBy('language', 'ASC'); } /** * Load all settings - * * @return \stdClass */ public function getAll() @@ -34,7 +33,6 @@ trait Settings /** * Get all settings with language info - * * @return \stdClass */ public function getAllWithLanguage() @@ -55,7 +53,6 @@ trait Settings /** * Load only config for views - * * @return \stdClass */ public function getForView() @@ -83,4 +80,29 @@ trait Settings return $data; } + + /** + * Save settings + * + * @param array $data + */ + public function save(array $data) + { + $commonSettings = isset($data['commonSettings']) ? $data['commonSettings'] : []; + unset($data['commonSettings']); + + foreach ($data as $key => $value) { + // select language for this setting key + $language = isset($commonSettings[$key]) ? null : LaravelLocalization::getCurrentLocale(); + $setting = SettingsModel::firstOrNew(['language' => $language, 'key' => $key]); + + if ($setting->value == $value) { + continue; + } + + // set value and save or delete + $setting->value = $value; + empty($value) ? $setting->delete() : $setting->save(); + } + } } \ No newline at end of file diff --git a/app/Http/Controllers/Admin/Settings.php b/app/Http/Controllers/Admin/Settings.php index a2c87b2d..eaea2c39 100644 --- a/app/Http/Controllers/Admin/Settings.php +++ b/app/Http/Controllers/Admin/Settings.php @@ -2,15 +2,15 @@ namespace App\Http\Controllers\Admin; +use App\CMS\Repositories\Settings\Settings as SettingsRepository; use App\Http\Requests; use App\Models\Settings as SettingsModel; use Illuminate\Support\Facades\App; -use Mcamara\LaravelLocalization\Facades\LaravelLocalization; class Settings extends Controller { /** - * @var SettingsModel + * @var SettingsRepository */ protected $settings; @@ -19,14 +19,13 @@ class Settings extends Controller * * @param SettingsModel $settings */ - public function __construct(SettingsModel $settings) + public function __construct(SettingsRepository $settings) { $this->settings = $settings; } /** * Get overview (with form) for editing settings - * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function getOverview() @@ -45,7 +44,6 @@ class Settings extends Controller /** * Save all settings (ignore empty ones) - * * When settings used to be non-empty string and user deletes it, key is also deleted from database * * @param Requests\SaveSettingsRequest $request @@ -54,25 +52,7 @@ class Settings extends Controller */ public function saveSettings(Requests\SaveSettingsRequest $request) { - $data = $request->all(); - $commonSettings = isset($data['commonSettings']) ? $data['commonSettings'] : []; - - // remove CSRF token field - unset($data['_token'], $data['commonSettings']); - - foreach ($data as $key => $value) { - // select language for this setting key - $language = isset($commonSettings[$key]) ? null : LaravelLocalization::getCurrentLocale(); - $setting = SettingsModel::firstOrNew(['language' => $language, 'key' => $key]); - - if ($setting->value == $value) { - continue; - } - - // set value and save or delete - $setting->value = $value; - empty($value) ? $setting->delete() : $setting->save(); - } + $this->settings->save($request->except(['_token'])); return redirect() ->route('settings.overview') diff --git a/app/Models/Settings.php b/app/Models/Settings.php index 5ab99456..3f875daf 100644 --- a/app/Models/Settings.php +++ b/app/Models/Settings.php @@ -7,8 +7,6 @@ use Mcamara\LaravelLocalization\Facades\LaravelLocalization; class Settings extends Model { - use ModelTraits\Settings; - protected $table = 'settings'; public $timestamps = false; protected $fillable = ['key', 'value', 'language'];