Allow settings navigation items with no route entrytags/v26.0.0beta3
<navigation> | <navigation> | ||||
<id>user_status-menuitem</id> | <id>user_status-menuitem</id> | ||||
<name>User status</name> | <name>User status</name> | ||||
<route /> | |||||
<order>1</order> | <order>1</order> | ||||
<type>settings</type> | <type>settings</type> | ||||
</navigation> | </navigation> |
* @return bool | * @return bool | ||||
*/ | */ | ||||
private function isNavigationItem($data): bool { | private function isNavigationItem($data): bool { | ||||
// Allow settings navigation items with no route entry | |||||
$type = $data['type'] ?? 'link'; | |||||
if ($type === 'settings') { | |||||
return isset($data['name']); | |||||
} | |||||
return isset($data['name'], $data['route']); | return isset($data['name'], $data['route']); | ||||
} | } | ||||
continue; | continue; | ||||
} | } | ||||
foreach ($info['navigations']['navigation'] as $key => $nav) { | foreach ($info['navigations']['navigation'] as $key => $nav) { | ||||
$nav['type'] = $nav['type'] ?? 'link'; | |||||
if (!isset($nav['name'])) { | if (!isset($nav['name'])) { | ||||
continue; | continue; | ||||
} | } | ||||
if (!isset($nav['route'])) { | |||||
// Allow settings navigation items with no route entry, all other types require one | |||||
if (!isset($nav['route']) && $nav['type'] !== 'settings') { | |||||
continue; | continue; | ||||
} | } | ||||
$role = isset($nav['@attributes']['role']) ? $nav['@attributes']['role'] : 'all'; | $role = isset($nav['@attributes']['role']) ? $nav['@attributes']['role'] : 'all'; | ||||
$l = $this->l10nFac->get($app); | $l = $this->l10nFac->get($app); | ||||
$id = $nav['id'] ?? $app . ($key === 0 ? '' : $key); | $id = $nav['id'] ?? $app . ($key === 0 ? '' : $key); | ||||
$order = isset($nav['order']) ? $nav['order'] : 100; | $order = isset($nav['order']) ? $nav['order'] : 100; | ||||
$type = isset($nav['type']) ? $nav['type'] : 'link'; | |||||
$route = $nav['route'] !== '' ? $this->urlGenerator->linkToRoute($nav['route']) : ''; | |||||
$type = $nav['type']; | |||||
$route = !empty($nav['route']) ? $this->urlGenerator->linkToRoute($nav['route']) : ''; | |||||
$icon = isset($nav['icon']) ? $nav['icon'] : 'app.svg'; | $icon = isset($nav['icon']) ? $nav['icon'] : 'app.svg'; | ||||
foreach ([$icon, "$app.svg"] as $i) { | foreach ([$icon, "$app.svg"] as $i) { | ||||
try { | try { |
<xs:sequence> | <xs:sequence> | ||||
<xs:element name="id" type="id" minOccurs="0" maxOccurs="1"/> | <xs:element name="id" type="id" minOccurs="0" maxOccurs="1"/> | ||||
<xs:element name="name" type="non-empty-string" minOccurs="1" maxOccurs="1"/> | <xs:element name="name" type="non-empty-string" minOccurs="1" maxOccurs="1"/> | ||||
<xs:element name="route" type="route" minOccurs="1" maxOccurs="1"/> | |||||
<xs:element name="route" type="route" minOccurs="0" maxOccurs="1"/> | |||||
<xs:element name="icon" type="xs:anyURI" minOccurs="0" maxOccurs="1"/> | <xs:element name="icon" type="xs:anyURI" minOccurs="0" maxOccurs="1"/> | ||||
<xs:element name="order" type="xs:int" minOccurs="0" maxOccurs="1"/> | <xs:element name="order" type="xs:int" minOccurs="0" maxOccurs="1"/> | ||||
<xs:element name="type" type="navigation-type" minOccurs="0" maxOccurs="1"/> | <xs:element name="type" type="navigation-type" minOccurs="0" maxOccurs="1"/> |
<xs:sequence> | <xs:sequence> | ||||
<xs:element name="id" type="id" minOccurs="0" maxOccurs="1"/> | <xs:element name="id" type="id" minOccurs="0" maxOccurs="1"/> | ||||
<xs:element name="name" type="non-empty-string" minOccurs="1" maxOccurs="1"/> | <xs:element name="name" type="non-empty-string" minOccurs="1" maxOccurs="1"/> | ||||
<xs:element name="route" type="route" minOccurs="1" maxOccurs="1"/> | |||||
<xs:element name="route" type="route" minOccurs="0" maxOccurs="1"/> | |||||
<xs:element name="icon" type="xs:anyURI" minOccurs="0" maxOccurs="1"/> | <xs:element name="icon" type="xs:anyURI" minOccurs="0" maxOccurs="1"/> | ||||
<xs:element name="order" type="xs:int" minOccurs="0" maxOccurs="1"/> | <xs:element name="order" type="xs:int" minOccurs="0" maxOccurs="1"/> | ||||
<xs:element name="type" type="navigation-type" minOccurs="0" maxOccurs="1"/> | <xs:element name="type" type="navigation-type" minOccurs="0" maxOccurs="1"/> |