CaiWuXiTong/app/Utilities/BusinessNavigation.php

70 lines
2.2 KiB
PHP

<?php
namespace App\Utilities;
class BusinessNavigation
{
/**
* Return the configured business navigation with this company's title overrides applied.
*/
public static function all(): array
{
$navigation = config('business_navigation', []);
$pageExtensions = (array) config('business_navigation_page_extensions', []);
foreach ($navigation as &$section) {
$sectionSlug = (string) ($section['slug'] ?? '');
foreach ((array) ($pageExtensions[$sectionSlug] ?? []) as $extension) {
$extensionSlug = trim((string) ($extension['slug'] ?? ''));
if ($extensionSlug === '') {
continue;
}
$exists = collect($section['pages'] ?? [])->contains(
static fn (array $page): bool => (string) ($page['slug'] ?? '') === $extensionSlug
);
if (! $exists) {
$section['pages'][] = $extension;
}
}
}
unset($section);
$titles = (array) setting('navigation.titles', []);
$sectionTitles = (array) ($titles['sections'] ?? []);
$pageTitles = (array) ($titles['pages'] ?? []);
foreach ($navigation as &$section) {
$sectionSlug = $section['slug'];
$section['title'] = self::title($sectionTitles[$sectionSlug] ?? null, $section['title']);
foreach ($section['pages'] ?? [] as $pageIndex => $page) {
$section['pages'][$pageIndex]['title'] = self::title(
$pageTitles[$sectionSlug][$page['slug']] ?? null,
$page['title']
);
foreach ($page['children'] ?? [] as $childIndex => $child) {
$section['pages'][$pageIndex]['children'][$childIndex]['title'] = self::title(
$pageTitles[$sectionSlug][$child['slug']] ?? null,
$child['title']
);
}
}
}
unset($section);
return $navigation;
}
private static function title($value, string $default): string
{
$value = trim((string) $value);
return $value === '' ? $default : $value;
}
}