94 lines
3.2 KiB
PHP
94 lines
3.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 ((array) ($pageExtensions['module_sections'] ?? []) as $definition) {
|
|
$section = (array) ($definition['section'] ?? []);
|
|
$sectionSlug = trim((string) ($section['slug'] ?? ''));
|
|
if ($sectionSlug === ''
|
|
|| collect($navigation)->contains(
|
|
static fn (array $existing): bool => ($existing['slug'] ?? null) === $sectionSlug,
|
|
)) {
|
|
continue;
|
|
}
|
|
|
|
$positionAfter = trim((string) ($definition['position_after'] ?? ''));
|
|
$anchorIndex = $positionAfter === ''
|
|
? false
|
|
: collect($navigation)->search(
|
|
static fn (array $existing): bool => ($existing['slug'] ?? null) === $positionAfter,
|
|
);
|
|
array_splice(
|
|
$navigation,
|
|
is_int($anchorIndex) ? $anchorIndex + 1 : count($navigation),
|
|
0,
|
|
[$section],
|
|
);
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|