82 lines
2.3 KiB
PHP
82 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
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
|
|
*/
|
|
protected $settings;
|
|
|
|
/**
|
|
* Settings constructor.
|
|
*
|
|
* @param SettingsModel $settings
|
|
*/
|
|
public function __construct(SettingsModel $settings)
|
|
{
|
|
$this->settings = $settings;
|
|
}
|
|
|
|
/**
|
|
* Get overview (with form) for editing settings
|
|
*
|
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
|
*/
|
|
public function getOverview()
|
|
{
|
|
$sections = App::make('registerSettingsExtension')
|
|
->get();
|
|
|
|
// load all settings with language info
|
|
$settings = $this->settings->getAllWithLanguage();
|
|
|
|
return view('admin.settings.overview', [
|
|
'formSections' => $sections,
|
|
'settings' => $settings
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 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
|
|
*
|
|
* @return \Illuminate\Http\RedirectResponse
|
|
*/
|
|
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();
|
|
}
|
|
|
|
return redirect()
|
|
->route('settings.overview')
|
|
->with('success', trans('admin/settings.successfullySaved'));
|
|
}
|
|
}
|