70 lines
2.2 KiB
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;
|
|
}
|
|
}
|