78 lines
2.4 KiB
PHP

<?php
namespace App\Http\Controllers\Settings;
use App\Abstracts\Http\Controller;
use App\Utilities\BusinessNavigation;
use Illuminate\Http\Request;
class Navigation extends Controller
{
public function __construct()
{
parent::__construct();
$this->middleware(function ($request, $next) {
abort_unless(\App\Utilities\SystemAccess::canOpenSettings(), 403);
return $next($request);
});
}
public function manage()
{
return view('settings.navigation.edit', [
'sections' => BusinessNavigation::all(),
]);
}
public function save(Request $request)
{
$request->validate([
'section_titles' => ['nullable', 'array'],
'section_titles.*' => ['nullable', 'string', 'max:50'],
'page_titles' => ['nullable', 'array'],
'page_titles.*' => ['nullable', 'array'],
'page_titles.*.*' => ['nullable', 'string', 'max:50'],
]);
$sectionTitles = (array) $request->input('section_titles', []);
$pageTitles = (array) $request->input('page_titles', []);
$titles = ['sections' => [], 'pages' => []];
// Only persist labels for items that exist in the configured navigation.
foreach (config('business_navigation', []) as $section) {
$sectionSlug = $section['slug'];
$sectionTitle = trim((string) ($sectionTitles[$sectionSlug] ?? ''));
if ($sectionTitle !== '') {
$titles['sections'][$sectionSlug] = $sectionTitle;
}
foreach (collect($section['pages'] ?? [])->flatMap(fn (array $page) => [$page, ...($page['children'] ?? [])]) as $page) {
$pageTitle = trim((string) ($pageTitles[$sectionSlug][$page['slug']] ?? ''));
if ($pageTitle !== '') {
$titles['pages'][$sectionSlug][$page['slug']] = $pageTitle;
}
}
}
setting()->set('navigation.titles', $titles);
setting()->save();
$message = '保存成功,侧边栏功能名称已更新。';
flash($message)->success();
return response()->json([
'status' => null,
'success' => true,
'error' => false,
'message' => $message,
'data' => null,
'redirect' => route('dashboard'),
]);
}
}