diff --git a/app/Handlers/Handler.php b/app/Handlers/Handler.php index be438540..2a68820c 100644 --- a/app/Handlers/Handler.php +++ b/app/Handlers/Handler.php @@ -127,7 +127,7 @@ abstract class Handler implements AppHandler $sub->route('customfields.overview', trans('admin/mainMenu.customFieldsOverview'), [], 50, ['icon' => 'fa fa-code-fork']); }, 30, ['icon' => 'fa fa-code']); $menu->route('log.overview', trans('admin/mainMenu.actionLog'), [], 40, ['icon' => 'fa fa-history']); - $menu->url('#', trans('admin/mainMenu.settings'), 50, ['icon' => 'fa fa-gear']); + $menu->route('settings.overview', trans('admin/mainMenu.settings'), [], 50, ['icon' => 'fa fa-gear']); }); // order diff --git a/app/Http/Controllers/Admin/Settings.php b/app/Http/Controllers/Admin/Settings.php new file mode 100644 index 00000000..91033c9e --- /dev/null +++ b/app/Http/Controllers/Admin/Settings.php @@ -0,0 +1,60 @@ +settings = $settings; + } + + public function getOverview() + { + $sections = App::make('registerSettingsExtension') + ->get(); + $settings = $this->settings->getAll(); + + return view('admin.settings.overview', [ + 'formSections' => $sections, + 'settings' => $settings + ]); + } + + public function saveSettings(Requests\SaveSettingsRequest $request) + { + $data = $request->all(); + // remove CSRF token field + unset($data['_token']); + + $settings = $this->settings->getAll(); + $updated = 0; + foreach($data as $key => $value) { + if ($settings->$key != $value) { + $updated ++; + \App\Models\Settings::where('key', $key)->update(['value' => $value]); + } + } + + if ($updated > 0) { + return redirect()->route('settings.overview')->with('success', trans('admin/settings.successfullySaved')); + } else { + return redirect()->route('settings.overview')->with('error', trans('admin/settings.nothingToSave')); + } + + } +} diff --git a/app/Http/Requests/SaveSettingsRequest.php b/app/Http/Requests/SaveSettingsRequest.php new file mode 100644 index 00000000..5f637372 --- /dev/null +++ b/app/Http/Requests/SaveSettingsRequest.php @@ -0,0 +1,18 @@ + 'required', + ]; + } +} diff --git a/app/Http/routes.php b/app/Http/routes.php index 9758f27a..2014d145 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -58,8 +58,8 @@ Route::group([ Route::post('templates/copy', 'CopyTemplate@createCopy') ->name('templates.postCopy'); -// Route::get('templates/new/{pathId}', 'TemplateOverview@getPath') -// ->name('templates.new'); + // Route::get('templates/new/{pathId}', 'TemplateOverview@getPath') + // ->name('templates.new'); Route::get('templates/edit/{id}', 'EditTemplate@getEdit') ->name('templates.edit'); @@ -209,6 +209,13 @@ Route::group([ Route::post('upload/image', 'UploadFile@postImage') ->name('upload.postImage'); + // form with settings + Route::get('settings', 'Settings@getOverview') + ->name('settings.overview'); + + Route::post('settings', 'Settings@saveSettings') + ->name('settings.save'); + // custom fields // ------------------------------ diff --git a/app/Models/Settings.php b/app/Models/Settings.php new file mode 100644 index 00000000..0957e175 --- /dev/null +++ b/app/Models/Settings.php @@ -0,0 +1,25 @@ +get(); + + $data = new \stdClass(); + foreach ($settings as $conf) { + $data->{$conf->key} = $conf->value; + } + + return $data; + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index c1795b57..df9d98ac 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use App\Handlers\Registrators\SettingsExtensionRegistrator; use App\Handlers\Registrators\TemplateRegistrator; use App\Handlers\Registrators\WidgetRegistrator; use App\Widgets\HtmlCode\HtmlCode; @@ -18,6 +19,7 @@ class AppServiceProvider extends ServiceProvider { $this->registerWidgets(); $this->registerTemplates(); + $this->registerSettings(); } /** @@ -45,6 +47,10 @@ class AppServiceProvider extends ServiceProvider $this->app->singleton('registerTemplateDir', function ($app) { return new TemplateRegistrator($app); }); + + $this->app->singleton('registerSettingsExtension', function ($app) { + return new SettingsExtensionRegistrator($app); + }); } /** @@ -74,4 +80,15 @@ class AppServiceProvider extends ServiceProvider $registrator->register(config('app.theme'), 'admin/templates.core'); } + + /** + * Register setting sections + */ + private function registerSettings() + { + $registrator = $this->app->make('registerSettingsExtension'); + + $registrator->register('basic', 'admin/settings.basic', 'admin.settings.parts.basic'); + $registrator->register('meta', 'admin/settings.meta', 'admin.settings.parts.meta'); + } } diff --git a/resources/lang/en/admin/settings.php b/resources/lang/en/admin/settings.php new file mode 100644 index 00000000..4bd27177 --- /dev/null +++ b/resources/lang/en/admin/settings.php @@ -0,0 +1,14 @@ + 'All available settings', + 'basic' => 'Basic information', + 'save' => 'Save', + 'pageName' => 'Page name', + 'metaKeywords' => 'Web keywords', + 'metaDescription' => 'Web description', + 'googleAnalyticsCode' => 'Google Analytics code', + 'author' => 'Page owner', + 'successfullySaved' => 'Settings successfully saved', + 'nothingToSave' => 'You have submitted unchanged form. Try to change some attribute first.', + 'meta' => 'Meta information' +]; \ No newline at end of file diff --git a/resources/views/admin/settings/overview.blade.php b/resources/views/admin/settings/overview.blade.php new file mode 100644 index 00000000..69aa2c94 --- /dev/null +++ b/resources/views/admin/settings/overview.blade.php @@ -0,0 +1,50 @@ +@extends('admin.layout') + +@section('pageName', @trans('admin/settings.overview')) + +@section('content') + +