FIX: fix saving and displaying menu with non-existing pages
This commit is contained in:
@@ -1,10 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Widgets\Menu;
|
namespace App\Widgets\Menu;
|
||||||
|
|
||||||
use App\Http\Requests\Request;
|
use App\Models\Content;
|
||||||
use App\Widgets\Contracts\WidgetRenderer;
|
use App\Widgets\Contracts\WidgetRenderer;
|
||||||
use App\Widgets\Exceptions\MissingParameterException;
|
use App\Widgets\Exceptions\MissingParameterException;
|
||||||
use App\Widgets\NonInstallableWidget;
|
use App\Widgets\NonInstallableWidget;
|
||||||
|
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
|
||||||
|
|
||||||
class Menu extends NonInstallableWidget
|
class Menu extends NonInstallableWidget
|
||||||
{
|
{
|
||||||
@@ -40,7 +41,7 @@ class Menu extends NonInstallableWidget
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param \App\Models\Widget $widget
|
* @param \App\Models\Widget $widget
|
||||||
* @param \stdClass $data
|
* @param \stdClass $data
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
@@ -50,13 +51,36 @@ class Menu extends NonInstallableWidget
|
|||||||
throw new MissingParameterException('settings');
|
throw new MissingParameterException('settings');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$links = json_decode($data->settings);
|
||||||
|
$pages = self::selectContentPages(array_keys((array)$links));
|
||||||
|
|
||||||
|
foreach ($links as $link) {
|
||||||
|
if (!isset($pages[$link->id])) {
|
||||||
|
unset($links->{$link->id});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$settings = [
|
$settings = [
|
||||||
'links' => json_decode($data->settings),
|
'links' => $links,
|
||||||
'containerClass' => $data->containerClass
|
'containerClass' => $data->containerClass
|
||||||
];
|
];
|
||||||
|
|
||||||
$widget->settings = json_encode($settings);
|
$widget->settings = json_encode($settings);
|
||||||
|
|
||||||
return $widget;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -12,21 +12,6 @@ use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
|
|||||||
|
|
||||||
class Menu implements WidgetRenderer
|
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.
|
* Method used for displaying widget.
|
||||||
*
|
*
|
||||||
@@ -43,7 +28,7 @@ class Menu implements WidgetRenderer
|
|||||||
$pageIds = array_keys($links);
|
$pageIds = array_keys($links);
|
||||||
|
|
||||||
// get pages
|
// get pages
|
||||||
$pages = self::selectContentPages($pageIds);
|
$pages = \App\Widgets\Menu\Menu::selectContentPages($pageIds);
|
||||||
|
|
||||||
// sort links using "order"
|
// sort links using "order"
|
||||||
uasort($links, function ($a, $b) {
|
uasort($links, function ($a, $b) {
|
||||||
|
|||||||
@@ -10,5 +10,6 @@ return [
|
|||||||
'new' => 'New menu',
|
'new' => 'New menu',
|
||||||
'edit' => 'Edit menu',
|
'edit' => 'Edit menu',
|
||||||
'preview' => 'Menu preview',
|
'preview' => 'Menu preview',
|
||||||
'availablePages' => 'Available pages'
|
'availablePages' => 'Available pages',
|
||||||
|
'noLinks' => 'Cannot save menu without any link!',
|
||||||
];
|
];
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
|
|
||||||
// check if menu is not empty
|
// check if menu is not empty
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
alert ('@lang('widget/menu.noLinks')');
|
alert ('@lang('widgets/menu.noLinks')');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user