Some checks failed
Tests / PHP 8.1 (push) Has been cancelled
Tests / PHP 8.2 (push) Has been cancelled
Tests / PHP 8.3 (push) Has been cancelled
100 lines
2.7 KiB
PHP
100 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Business;
|
|
|
|
use App\Utilities\SidebarPermissions;
|
|
use Illuminate\Routing\Controller;
|
|
|
|
class Pages extends Controller
|
|
{
|
|
public function home()
|
|
{
|
|
$section = collect(SidebarPermissions::navigationFor(user()))->first();
|
|
|
|
abort_if(empty($section), 403, '当前账号没有已授权的侧边栏功能。');
|
|
|
|
$page = collect($section['pages'] ?? [])->first();
|
|
$parameters = ['section' => $section['slug']];
|
|
|
|
if ($page) {
|
|
$parameters['page'] = $page['slug'];
|
|
|
|
if (! empty($page['tabs'])) {
|
|
$parameters['tab'] = $page['tabs'][0]['slug'];
|
|
}
|
|
}
|
|
|
|
return redirect()->route('business.pages.show', $parameters);
|
|
}
|
|
|
|
public function show(string $section, ?string $page = null, ?string $tab = null)
|
|
{
|
|
$sectionConfig = collect(SidebarPermissions::navigationFor(user()))->firstWhere('slug', $section);
|
|
|
|
abort_if(empty($sectionConfig), 403, '当前账号没有该页面权限。');
|
|
|
|
$pages = collect($sectionConfig['pages'] ?? []);
|
|
|
|
if ($pages->isEmpty()) {
|
|
abort_if($page !== null || $tab !== null, 404);
|
|
|
|
return view('business.pages.show', [
|
|
'section' => $sectionConfig,
|
|
'page' => null,
|
|
'tabs' => collect(),
|
|
'activeTab' => null,
|
|
]);
|
|
}
|
|
|
|
if ($page === null) {
|
|
return $this->redirectToPage($sectionConfig, $pages->first());
|
|
}
|
|
|
|
$pageConfig = $pages->firstWhere('slug', $page);
|
|
|
|
abort_if(empty($pageConfig), 404);
|
|
|
|
$tabs = collect($pageConfig['tabs'] ?? []);
|
|
|
|
if ($tabs->isEmpty()) {
|
|
abort_if($tab !== null, 404);
|
|
|
|
return view('business.pages.show', [
|
|
'section' => $sectionConfig,
|
|
'page' => $pageConfig,
|
|
'tabs' => $tabs,
|
|
'activeTab' => null,
|
|
]);
|
|
}
|
|
|
|
if ($tab === null) {
|
|
return $this->redirectToPage($sectionConfig, $pageConfig);
|
|
}
|
|
|
|
$activeTab = $tabs->firstWhere('slug', $tab);
|
|
|
|
abort_if(empty($activeTab), 404);
|
|
|
|
return view('business.pages.show', [
|
|
'section' => $sectionConfig,
|
|
'page' => $pageConfig,
|
|
'tabs' => $tabs,
|
|
'activeTab' => $activeTab,
|
|
]);
|
|
}
|
|
|
|
protected function redirectToPage(array $section, array $page)
|
|
{
|
|
$parameters = [
|
|
'section' => $section['slug'],
|
|
'page' => $page['slug'],
|
|
];
|
|
|
|
if (! empty($page['tabs'])) {
|
|
$parameters['tab'] = $page['tabs'][0]['slug'];
|
|
}
|
|
|
|
return redirect()->route('business.pages.show', $parameters);
|
|
}
|
|
}
|