From 19e0977bbb6f711b916719c92e3628749ad04238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Sat, 2 Apr 2016 08:03:35 +0200 Subject: [PATCH] FEATURE #1496: add simple menu --- app/Providers/AppServiceProvider.php | 6 +- app/Widgets/Menu/Menu.php | 12 ++ app/Widgets/Menu/Presenters/Menu.php | 88 ++++++++++++- resources/lang/en/widgets/menu.php | 11 +- .../menu/advanced/extensions/edit.blade.php | 20 +++ .../menu/advanced/extensions/form.blade.php | 97 ++++++++++++++ .../menu/advanced/extensions/new.blade.php | 10 ++ .../{ => advanced}/extensions/url.blade.php | 0 .../views/admin/widgets/menu/form.blade.php | 119 +++++++++++------- .../views/admin/widgets/menu/new.blade.php | 5 +- 10 files changed, 312 insertions(+), 56 deletions(-) create mode 100644 resources/views/admin/widgets/menu/advanced/extensions/edit.blade.php create mode 100644 resources/views/admin/widgets/menu/advanced/extensions/form.blade.php create mode 100644 resources/views/admin/widgets/menu/advanced/extensions/new.blade.php rename resources/views/admin/widgets/menu/{ => advanced}/extensions/url.blade.php (100%) diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index c62d48ff..3ee85967 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -92,11 +92,11 @@ class AppServiceProvider extends ServiceProvider // register all available widgets $registrator->register(HtmlCode::class); $registrator->register(Menu::class); + $registrator->register(OrbitSlider::class); // register some menu extensions - $menuExtensions = $this->app->make('registerMenuExtension'); - $menuExtensions->register(new URL()); - $registrator->register(OrbitSlider::class); +// $menuExtensions = $this->app->make('registerMenuExtension'); +// $menuExtensions->register(new URL()); } /** diff --git a/app/Widgets/Menu/Menu.php b/app/Widgets/Menu/Menu.php index 84d01e30..ebdf7e43 100644 --- a/app/Widgets/Menu/Menu.php +++ b/app/Widgets/Menu/Menu.php @@ -3,6 +3,7 @@ namespace App\Widgets\Menu; use App\Http\Requests\Request; use App\Widgets\Contracts\WidgetRenderer; +use App\Widgets\Exceptions\MissingParameterException; use App\Widgets\NonInstallableWidget; class Menu extends NonInstallableWidget @@ -45,6 +46,17 @@ class Menu extends NonInstallableWidget */ public static function save(\App\Models\Widget $widget, Request $request) { + if (!isset($request->settings) || empty($request->settings) || !json_decode($request->settings)) { + throw new MissingParameterException('settings'); + } + + $settings = [ + 'links' => json_decode($request->settings), + 'containerClass' => $request->containerClass + ]; + + $widget->settings = json_encode($settings); + return $widget; } } \ No newline at end of file diff --git a/app/Widgets/Menu/Presenters/Menu.php b/app/Widgets/Menu/Presenters/Menu.php index 13bb1275..ae99665c 100644 --- a/app/Widgets/Menu/Presenters/Menu.php +++ b/app/Widgets/Menu/Presenters/Menu.php @@ -1,13 +1,30 @@ whereIn('id', $ids) + ->get(); + $used = []; + + foreach ($pages as $page) { + $used[$page->id] = $page; + } + + return $used; + } + /** * Method used for displaying widget. * @@ -19,7 +36,43 @@ class Menu implements WidgetRenderer */ public static function render($settings) { - return json_encode($settings); + $links = (array)$settings->links; + + $pageIds = array_keys($links); + + // get pages + $pages = self::selectContentPages($pageIds); + + // sort links using "order" + uasort($links, function ($a, $b) { + return $a->order - $b->order; + }); + + $route = Request::route() + ->getName(); + $parameters = Route::current() + ->parameters(); + + $code = '"; + + return $code; } /** @@ -35,10 +88,19 @@ class Menu implements WidgetRenderer ->get(); $widget = new Widget(); + $content = new Content(); + + // get list of all pages + $pages = $content->getOverview() + ->get(); + + $widget->settingsObj = new \stdClass(); + $widget->settingsObj->links = new \stdClass(); return view('admin.widgets.menu.new', [ 'type' => $type, 'widget' => $widget, + 'pages' => $pages, 'extensions' => $extensions ]); } @@ -52,9 +114,29 @@ class Menu implements WidgetRenderer */ public static function renderEditForm(Widget $widget) { - $extensions = App::make('registerMenuExtension') + // $extensions = App::make('registerMenuExtension') + // ->get(); + $content = new Content(); + + // get list of all pages + $pages = $content->getOverview() ->get(); - return view('admin.widgets.menu.edit', ['widget' => $widget]); + // make object from JSON + $widget->settingsObj = json_decode($widget->settings); + if (!isset($widget->settingsObj->links)) { + $links = new \stdClass(); + } else { + $links = (array)$widget->settingsObj->links; + } + + // sort links using "order" + uasort($links, function ($a, $b) { + return $a->order - $b->order; + }); + + $widget->settingsObj->links = (object)$links; + + return view('admin.widgets.menu.edit', ['widget' => $widget, 'pages' => $pages]); } } \ No newline at end of file diff --git a/resources/lang/en/widgets/menu.php b/resources/lang/en/widgets/menu.php index 854dc151..4be0f927 100644 --- a/resources/lang/en/widgets/menu.php +++ b/resources/lang/en/widgets/menu.php @@ -1,5 +1,14 @@ 'Menu', - 'widgetDescription' => 'User defined menu' + 'widgetDescription' => 'User defined menu', + 'name' => 'Menu name', + 'description' => 'Menu description', + 'containerClass' => 'HTML class used for container of this widget', + 'addedPages' => 'Pages in menu', + 'save' => 'Save', + 'new' => 'New menu', + 'edit' => 'Edit menu', + 'preview' => 'Menu preview', + 'availablePages' => 'Available pages' ]; \ No newline at end of file diff --git a/resources/views/admin/widgets/menu/advanced/extensions/edit.blade.php b/resources/views/admin/widgets/menu/advanced/extensions/edit.blade.php new file mode 100644 index 00000000..3685072f --- /dev/null +++ b/resources/views/admin/widgets/menu/advanced/extensions/edit.blade.php @@ -0,0 +1,20 @@ +@extends('admin.layout') + +@section('pageName', @trans('widgets/menu.edit', ['name' => $widget->name])) + +@section('content') +

@lang('widgets/menu.edit', ['name' => $widget->name])

+ +
+
+ @include('admin.widgets.menu.form', ['formAction' => route('widgets.postEdit', ['id' => $widget->id])]) + +
+
+

@lang('widgets/menu.preview')

+ + @widgetPreview($widget) +
+
+@stop + diff --git a/resources/views/admin/widgets/menu/advanced/extensions/form.blade.php b/resources/views/admin/widgets/menu/advanced/extensions/form.blade.php new file mode 100644 index 00000000..a8afd180 --- /dev/null +++ b/resources/views/admin/widgets/menu/advanced/extensions/form.blade.php @@ -0,0 +1,97 @@ +@if (!isset($hideMessages)) + @if (session('success')) +
+ {{ session('success') }} +
+ @endif + + @if (session('error')) +
+ {{ session('error') }} +
+ @endif +@endif + +
+ {!! csrf_field() !!} + + + + + + + +
+ + + + +
+ @foreach($extensions as $extension) +
+

{{$extension->getName()}}

+

{{$extension->getDescription()}}

+ + +
+ @endforeach +
+ +@section('javascripts') + +@stop \ No newline at end of file diff --git a/resources/views/admin/widgets/menu/advanced/extensions/new.blade.php b/resources/views/admin/widgets/menu/advanced/extensions/new.blade.php new file mode 100644 index 00000000..cc9e5e70 --- /dev/null +++ b/resources/views/admin/widgets/menu/advanced/extensions/new.blade.php @@ -0,0 +1,10 @@ +@extends('admin.layout') + +@section('pageName', @trans('widgets/menu.new')) + +@section('content') +

@lang('widgets/menu.new')

+ + @include('admin.widgets.menu.form', ['formAction' => route('widgets.postNew', ['type' => $type])]) +@stop + diff --git a/resources/views/admin/widgets/menu/extensions/url.blade.php b/resources/views/admin/widgets/menu/advanced/extensions/url.blade.php similarity index 100% rename from resources/views/admin/widgets/menu/extensions/url.blade.php rename to resources/views/admin/widgets/menu/advanced/extensions/url.blade.php diff --git a/resources/views/admin/widgets/menu/form.blade.php b/resources/views/admin/widgets/menu/form.blade.php index a8afd180..9b25cdbf 100644 --- a/resources/views/admin/widgets/menu/form.blade.php +++ b/resources/views/admin/widgets/menu/form.blade.php @@ -12,12 +12,13 @@ @endif @endif -
+ {!! csrf_field() !!}