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') +{{$extension->getDescription()}}
+ + +