78 lines
2.4 KiB
PHP
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'),
|
|
]);
|
|
}
|
|
}
|