From b89941b909deeb59b16a7d3cae42ae35ced0bbf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Fri, 22 Jul 2016 16:30:20 +0200 Subject: [PATCH] FIX: fix saving and displaying menu with non-existing pages --- app/Widgets/Menu/Menu.php | 32 ++++++++++++++++--- app/Widgets/Menu/Presenters/Menu.php | 17 +--------- resources/lang/en/widgets/menu.php | 3 +- .../views/admin/widgets/menu/form.blade.php | 2 +- 4 files changed, 32 insertions(+), 22 deletions(-) diff --git a/app/Widgets/Menu/Menu.php b/app/Widgets/Menu/Menu.php index eff37d9c..b3ca55d9 100644 --- a/app/Widgets/Menu/Menu.php +++ b/app/Widgets/Menu/Menu.php @@ -1,10 +1,11 @@ settings); + $pages = self::selectContentPages(array_keys((array)$links)); + + foreach ($links as $link) { + if (!isset($pages[$link->id])) { + unset($links->{$link->id}); + } + } + $settings = [ - 'links' => json_decode($data->settings), + 'links' => $links, 'containerClass' => $data->containerClass ]; - + $widget->settings = json_encode($settings); return $widget; } + + public static function selectContentPages($ids) + { + $pages = Content::where('status', '!=', Content::STATUS_DELETED) + ->where('language', LaravelLocalization::getCurrentLocale()) + ->whereIn('id', $ids) + ->get(); + $used = []; + foreach ($pages as $page) { + $used[$page->id] = $page; + } + + return $used; + } } \ No newline at end of file diff --git a/app/Widgets/Menu/Presenters/Menu.php b/app/Widgets/Menu/Presenters/Menu.php index ded17c35..db3014d6 100644 --- a/app/Widgets/Menu/Presenters/Menu.php +++ b/app/Widgets/Menu/Presenters/Menu.php @@ -12,21 +12,6 @@ use Mcamara\LaravelLocalization\Facades\LaravelLocalization; class Menu implements WidgetRenderer { - protected static function selectContentPages($ids) - { - $pages = Content::where('status', '!=', Content::STATUS_DELETED) - ->where('language', LaravelLocalization::getCurrentLocale()) - ->whereIn('id', $ids) - ->get(); - $used = []; - - foreach ($pages as $page) { - $used[$page->id] = $page; - } - - return $used; - } - /** * Method used for displaying widget. * @@ -43,7 +28,7 @@ class Menu implements WidgetRenderer $pageIds = array_keys($links); // get pages - $pages = self::selectContentPages($pageIds); + $pages = \App\Widgets\Menu\Menu::selectContentPages($pageIds); // sort links using "order" uasort($links, function ($a, $b) { diff --git a/resources/lang/en/widgets/menu.php b/resources/lang/en/widgets/menu.php index 4be0f927..1e228c8a 100644 --- a/resources/lang/en/widgets/menu.php +++ b/resources/lang/en/widgets/menu.php @@ -10,5 +10,6 @@ return [ 'new' => 'New menu', 'edit' => 'Edit menu', 'preview' => 'Menu preview', - 'availablePages' => 'Available pages' + 'availablePages' => 'Available pages', + 'noLinks' => 'Cannot save menu without any link!', ]; \ No newline at end of file diff --git a/resources/views/admin/widgets/menu/form.blade.php b/resources/views/admin/widgets/menu/form.blade.php index 9b25cdbf..f8f01349 100644 --- a/resources/views/admin/widgets/menu/form.blade.php +++ b/resources/views/admin/widgets/menu/form.blade.php @@ -99,7 +99,7 @@ // check if menu is not empty if (i == 0) { - alert ('@lang('widget/menu.noLinks')'); + alert ('@lang('widgets/menu.noLinks')'); return false; }