From 00d7bd562c0e7774376b9399a36ae037267eb3fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Sun, 25 Sep 2016 00:19:20 +0200 Subject: [PATCH 1/7] FEATURE: make user id not mandatory in widgets table --- ..._24_220747_MakeUserIdNullableAtWidgets.php | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 database/migrations/2016_09_24_220747_MakeUserIdNullableAtWidgets.php diff --git a/database/migrations/2016_09_24_220747_MakeUserIdNullableAtWidgets.php b/database/migrations/2016_09_24_220747_MakeUserIdNullableAtWidgets.php new file mode 100644 index 00000000..2c1e7c95 --- /dev/null +++ b/database/migrations/2016_09_24_220747_MakeUserIdNullableAtWidgets.php @@ -0,0 +1,55 @@ +dropForeign(['user_id']); + + $table->integer('user_id') + ->nullable(true) + ->default(null) + ->comment('User ID who created this widget. NULL for widget created by template.')->change(); + + $table->foreign('user_id') + ->references('id') + ->on('users') + ->onDelete('cascade') + ->onUpdate('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('widgets', function (Blueprint $table) { + $table->dropForeign(['user_id']); + }); + + Schema::table('widgets', function (Blueprint $table) { + $table->integer('user_id') + ->nullable(false) + ->comment('User ID who created this widget. ')->change(); + + $table->foreign('user_id') + ->references('id') + ->on('users') + ->onDelete('no action') + ->onUpdate('no action'); + }); + } +} From 9802161af187ec598003b5109bd70a50e14e7bdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Sun, 25 Sep 2016 00:21:18 +0200 Subject: [PATCH 2/7] FIX: add deletable fields into in widgets and widget area models --- app/Models/Widget.php | 5 +++-- app/Models/WidgetArea.php | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/Models/Widget.php b/app/Models/Widget.php index 5ed96c28..dc0d14bf 100644 --- a/app/Models/Widget.php +++ b/app/Models/Widget.php @@ -17,7 +17,9 @@ class Widget extends Model 'user_id', 'name', 'settings', - 'description' + 'language', + 'description', + 'deletable' ]; protected $guarded = []; @@ -31,7 +33,6 @@ class Widget extends Model */ public function createNew(WidgetType $widgetType, $data) { - // convert array or whatever into object if (!is_object($data)) { $data = (object)$data; diff --git a/app/Models/WidgetArea.php b/app/Models/WidgetArea.php index 009e5f32..1eaf2592 100644 --- a/app/Models/WidgetArea.php +++ b/app/Models/WidgetArea.php @@ -15,7 +15,8 @@ class WidgetArea extends Model protected $fillable = [ 'name', 'code', - 'description' + 'description', + 'deletable' ]; protected $guarded = []; From 09151e97d187dfda7f0d50d252005fc04fc2b0a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Sun, 25 Sep 2016 01:35:03 +0200 Subject: [PATCH 3/7] FEATURE: prepare widget for displaying menu on onepage templates --- templates/Base/OnePage/Handlers/OnePage.php | 44 ++++++++----- .../OnePage/Providers/OnePageTemplate.php | 43 +++++++++--- .../OnePage/Resources/lang/en/widget/menu.php | 12 ++++ .../admin/widgets/onePageMenu/edit.blade.php | 15 +++++ .../admin/widgets/onePageMenu/form.blade.php | 27 ++++++++ .../admin/widgets/onePageMenu/new.blade.php | 9 +++ .../Widgets/OnePageMenu/OnePageMenu.php | 55 ++++++++++++++++ .../OnePage/Widgets/OnePageMenu/Presenter.php | 65 +++++++++++++++++++ 8 files changed, 246 insertions(+), 24 deletions(-) create mode 100644 templates/Base/OnePage/Resources/lang/en/widget/menu.php create mode 100644 templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/edit.blade.php create mode 100644 templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/form.blade.php create mode 100644 templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/new.blade.php create mode 100644 templates/Base/OnePage/Widgets/OnePageMenu/OnePageMenu.php create mode 100644 templates/Base/OnePage/Widgets/OnePageMenu/Presenter.php diff --git a/templates/Base/OnePage/Handlers/OnePage.php b/templates/Base/OnePage/Handlers/OnePage.php index db912392..1a0e1264 100644 --- a/templates/Base/OnePage/Handlers/OnePage.php +++ b/templates/Base/OnePage/Handlers/OnePage.php @@ -32,30 +32,42 @@ abstract class OnePage implements TemplateHandler $menu->route('template.setHomepage', trans('template::admin/mainMenu.setHomepage'), [], 1, ['icon' => 'fa fa-fw fa-home']); } + /** + * Getter for pages displayed on homepage + * + * @return array + */ + public static function getPagesOnHomepage() + { + $pageIds = (array)json_decode(Settings::get(self::HOMEPAGE_PAGES_SETTINGS_KEY, '[]')); + + if (empty($pageIds)) { + return []; + } + + // get all available pages + $pages = Content::whereIn('id', $pageIds); + + if (Auth::user()) { + $pages = $pages->where('status', '!=', Content::STATUS_DRAFT); + } else { + $pages = $pages->where('status', Content::STATUS_PUBLIC); + } + + return $pages->get(); + } + /** * Prepare Content object to be rendered using Blade template * * @param Content $content + * + * @return array */ public static function beforeRender(Content & $content) { if ($content->is_homepage) { - $pageIds = (array)json_decode(Settings::get(self::HOMEPAGE_PAGES_SETTINGS_KEY, '[]')); - - if (empty($pageIds)) { - return []; - } - - // get all available pages - $pages = Content::whereIn('id', $pageIds); - - if (Auth::user()) { - $pages = $pages->where('status', '!=', Content::STATUS_DRAFT); - } else { - $pages = $pages->where('status', Content::STATUS_PUBLIC); - } - - $pages = $pages->get(); + $pages = self::getPagesOnHomepage(); // create real content from pages $pagesRaw = $pagesInTemplates = []; diff --git a/templates/Base/OnePage/Providers/OnePageTemplate.php b/templates/Base/OnePage/Providers/OnePageTemplate.php index 642466d1..6516fa52 100644 --- a/templates/Base/OnePage/Providers/OnePageTemplate.php +++ b/templates/Base/OnePage/Providers/OnePageTemplate.php @@ -2,6 +2,7 @@ namespace Templates\Base\OnePage\Providers; use Illuminate\Support\ServiceProvider; +use Templates\Base\OnePage\Widgets\OnePageMenu\OnePageMenu; class OnePageTemplate extends ServiceProvider { @@ -11,20 +12,46 @@ class OnePageTemplate extends ServiceProvider * @return void */ public function register() - { + { $this->registerTranslations(); } public function boot() { - // register translations - $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'template'); - - // load views - $this->loadViewsFrom(array_merge(array_map(function ($path) { - return $path; - }, \Config::get('view.paths')), [__DIR__ . '/../Resources/views']), 'template'); + $this->registerViews(); + $this->registerWidgets(); // register event service provider for this template $this->app->register(EventProvider::class); } + + /** + * Register translations used in this base template + */ + private function registerTranslations() + { + // register translations + $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'template'); + } + + /** + * Register views used in this template - both visitor's and admin's + */ + private function registerViews() + { + // load views + $this->loadViewsFrom(array_merge(array_map(function ($path) { + return $path; + }, \Config::get('view.paths')), [__DIR__ . '/../Resources/views']), 'template'); + } + + /** + * Register all widgets related to this template + */ + private function registerWidgets() + { + $registrator = $this->app->make('registerWidget'); + + // register all available widgets + $registrator->register(OnePageMenu::class); + } } \ No newline at end of file diff --git a/templates/Base/OnePage/Resources/lang/en/widget/menu.php b/templates/Base/OnePage/Resources/lang/en/widget/menu.php new file mode 100644 index 00000000..04a5c5c8 --- /dev/null +++ b/templates/Base/OnePage/Resources/lang/en/widget/menu.php @@ -0,0 +1,12 @@ + 'One page menu', + 'description' => 'Simple menu used for one page templates. This menu navigates using nachor links on page. Links are generated automatically using list of pages on homepage.', + 'new' => 'Create new menu', + 'form' => [ + 'name' => 'Menu name', + 'description' => 'Description', + 'containerClass' => 'HTML class for container element', + 'save' => 'Save', + ] +]; \ No newline at end of file diff --git a/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/edit.blade.php b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/edit.blade.php new file mode 100644 index 00000000..e91e4a74 --- /dev/null +++ b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/edit.blade.php @@ -0,0 +1,15 @@ +@extends('admin.layoutWithNavigation') + +@section('pageHeading', @trans('widgets/htmlCode.edit', ['name' => $widget->name])) + +@section('content') +
+ @include('admin.widgets.htmlCode.form', ['action' => route('widgets.postEdit', ['id' => $widget->id])]) +
+
+

@lang('widgets/htmlCode.preview')

+ + @widgetPreview($widget) +
+@stop + diff --git a/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/form.blade.php b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/form.blade.php new file mode 100644 index 00000000..94d02c07 --- /dev/null +++ b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/form.blade.php @@ -0,0 +1,27 @@ +
+ {!! csrf_field() !!} + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/new.blade.php b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/new.blade.php new file mode 100644 index 00000000..426b2db2 --- /dev/null +++ b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/new.blade.php @@ -0,0 +1,9 @@ +@extends('admin.layoutWithNavigation') + +@section('pageHeading', @trans('template::widget/menu.new')) +@section('pageDescription', @trans($type->description)) + +@section('content') + @include('template::admin.widgets.onePageMenu.form', ['action' => route('widgets.postNew', ['type' => $type->id])]) +@stop + diff --git a/templates/Base/OnePage/Widgets/OnePageMenu/OnePageMenu.php b/templates/Base/OnePage/Widgets/OnePageMenu/OnePageMenu.php new file mode 100644 index 00000000..724f9871 --- /dev/null +++ b/templates/Base/OnePage/Widgets/OnePageMenu/OnePageMenu.php @@ -0,0 +1,55 @@ + isset($data->containerClass) ? $data->containerClass : '']; + + $widget->settings = json_encode($widgetSettings); + + return $widget; + } +} diff --git a/templates/Base/OnePage/Widgets/OnePageMenu/Presenter.php b/templates/Base/OnePage/Widgets/OnePageMenu/Presenter.php new file mode 100644 index 00000000..da128fa7 --- /dev/null +++ b/templates/Base/OnePage/Widgets/OnePageMenu/Presenter.php @@ -0,0 +1,65 @@ + $pages])->render(); + } + + /** + * Display form for creating new instance of widget + * + * @param WidgetType $type + * + * @return mixed + */ + public static function renderAddForm(WidgetType $type) + { + return view('template::admin.widgets.onePageMenu.new', [ + 'type' => $type, + 'widget' => new Widget(), + 'settings' => new \stdClass() + ]); + } + + /** + * Display form for editing already existing widget + * + * @param Widget $widget + * + * @return mixed + */ + public static function renderEditForm(Widget $widget) + { + $settings = json_decode($widget->settings); + return view('template::admin.widgets.onePageMenu.edit', ['widget' => $widget, 'settings' => $settings]); + } +} \ No newline at end of file From 80105c857e69f4e320aa4589aee1ce0d3f02c07a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Sun, 25 Sep 2016 01:35:39 +0200 Subject: [PATCH 4/7] FEATURE: extend registering widgets by setting template and module ID --- app/Handlers/Registrators/WidgetRegistrator.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/Handlers/Registrators/WidgetRegistrator.php b/app/Handlers/Registrators/WidgetRegistrator.php index e70cf9ee..d3b68a3a 100644 --- a/app/Handlers/Registrators/WidgetRegistrator.php +++ b/app/Handlers/Registrators/WidgetRegistrator.php @@ -18,9 +18,11 @@ class WidgetRegistrator /** * Method used for registering new widgets * - * @param $classname + * @param $classname + * @param null $templateId + * @param null $moduleId */ - public function register($classname) + public function register($classname, $templateId = null, $moduleId = null) { $class = new $classname; if (!$class instanceof PublicWidget) { @@ -36,6 +38,8 @@ class WidgetRegistrator WidgetType::create([ 'handler' => $classname, 'name' => $widgetName, + 'module_id' => $moduleId, + 'template_id' => $templateId, 'description' => $widgetDescription ]); From 85bbc384a7da702e27313ca302ede85a3b8b9421 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Sun, 25 Sep 2016 01:35:52 +0200 Subject: [PATCH 5/7] FEATURE: add getJson method to Settings helper --- app/Helpers/Settings.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/Helpers/Settings.php b/app/Helpers/Settings.php index cac5e30d..56882328 100644 --- a/app/Helpers/Settings.php +++ b/app/Helpers/Settings.php @@ -45,6 +45,18 @@ class Settings return $default; } + /** + * Shortcut for obtaining settings saved as JSON + * + * @param $key + * + * @return mixed + */ + public static function getJson($key) + { + return json_decode(self::get($key, '{}')); + } + /** * Get all settings * From d6a441cb96501ac5fb7edf63c7cc8d228cf68fa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Sun, 25 Sep 2016 01:36:18 +0200 Subject: [PATCH 6/7] FEATURE: add template_id and module_id into in WidgetType model --- app/Models/WidgetType.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/Models/WidgetType.php b/app/Models/WidgetType.php index 07330dc1..caa38892 100644 --- a/app/Models/WidgetType.php +++ b/app/Models/WidgetType.php @@ -15,6 +15,8 @@ class WidgetType extends Model protected $fillable = [ 'handler', 'name', + 'template_id', + 'module_id', 'description' ]; From 52394c62890bea6c918ec24e6e1e6818fd283646 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Sun, 25 Sep 2016 01:57:45 +0200 Subject: [PATCH 7/7] FEATURE: add widget association in new admin layout - hopefully last try of doing this --- .../views/admin/widgets/association.blade.php | 60 +++---------------- .../widgets/widgetsToAssociate.blade.php | 2 +- 2 files changed, 8 insertions(+), 54 deletions(-) diff --git a/resources/views/admin/widgets/association.blade.php b/resources/views/admin/widgets/association.blade.php index 5ac74f6f..67679ad5 100644 --- a/resources/views/admin/widgets/association.blade.php +++ b/resources/views/admin/widgets/association.blade.php @@ -1,61 +1,15 @@ -@extends('admin.layout') +@extends('admin.layoutWithNavigation') @section('pageName', @trans('admin/widgets.overview')) @section('content')
- - @if (session('success')) -
- {{ session('success') }} -
- @endif - - @if (session('error')) -
- {{ session('error') }} -
- @endif - -
- +

@lang('admin/widgets.overview')

- @forelse($widgets as $widget) -
-
-

{{str_limit($widget->name, 20)}}

-

- {{trans(call_user_func([$widget->widget_type_handler, 'getName']))}} -

-

- {{str_limit($widget->description, 150)}} -

- -
- - - @if (in_array($widget->id, $associatedWidgetIds)) - - - - @else - - @endif -
-
-
- @empty - @lang('admin/widgets.noEntries') - @endforelse - -
- {!! $widgets->render() !!} -
+ @include('admin.widgets.widgetsToAssociate', ['tileClass' => 'col-lg-3 col-md-4 col-sm-6 col-xs-12'])
-
+

{{$widgetArea->name}}

@@ -63,11 +17,11 @@

    -
  • @lang('admin/widgets.createdAt'): {{$widgetArea->created_at}}
  • -
  • @lang('admin/widgets.updatedAt'): {{$widgetArea->updated_at}}
  • +
  • @lang('admin/widgets.createdAt'): @date($widgetArea->created_at)
  • +
  • @lang('admin/widgets.updatedAt'): @date($widgetArea->updated_at)
- @lang('admin/widgetAreas.editButton') + @lang('admin/widgetAreas.editButton') @if (!empty($associatedWidgetIds))

@lang('admin/widgets.preview')

diff --git a/resources/views/admin/widgets/widgetsToAssociate.blade.php b/resources/views/admin/widgets/widgetsToAssociate.blade.php index b54fc505..81671c3f 100644 --- a/resources/views/admin/widgets/widgetsToAssociate.blade.php +++ b/resources/views/admin/widgets/widgetsToAssociate.blade.php @@ -2,7 +2,7 @@
-
+

{{str_limit($widget->name, 15)}}