FEATURE: refactorize settings

This commit is contained in:
Michal Kváček
2017-08-02 10:27:58 +02:00
parent e5d9ce682d
commit e8065c99c7
4 changed files with 37 additions and 37 deletions
+2 -2
View File
@@ -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();
});
}
}
@@ -1,14 +1,14 @@
<?php
namespace App\Models\ModelTraits;
namespace App\CMS\Repositories\Settings;
use App\Models\Settings as SettingsModel;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
trait Settings
class Settings
{
/**
* Prepares common query for selecting settings
*
* @return mixed
*/
protected function getSettingsQuery()
@@ -21,7 +21,6 @@ trait Settings
/**
* 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();
}
}
}
+4 -24
View File
@@ -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')
-2
View File
@@ -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'];