*/ /** * \file htdocs/public/webportal/lib/webportal.lib.php * \ingroup webportal * \brief Lib for public access of WebPortal */ /** * Get nav menu * * @param array,children?:array}>}> $Tmenu Array of menu * @return string */ function getNav($Tmenu) { $menu = ''; foreach ($Tmenu as $item) { $menu .= getNavItem($item); } return $menu; } /** * Get nav item * * TODO : Dropdown is actually not css implemented * @param array{id:string,rank:int,url:string,name:string,group:string,override?:int<0,1>,children?:array,active?:bool,separator?:bool}>} $item Item of menu * @param int $deep Level of deep * @return string */ function getNavItem($item, $deep = 0) { $context = Context::getInstance(); $menu = ''; $itemDefault = array( 'active' => false, 'separator' => false, ); $item = array_replace($itemDefault, $item); // applique les valeurs par default if ($context->menuIsActive($item['id'])) { $item['active'] = true; } if (!isset($item['class'])) { $item['class'] = '--item-' . preg_replace('/[^a-z0-9 ]/i', '-', $item['id']); } if (!empty($item['override'])) { $menu .= $item['override']; } elseif (!empty($item['children'])) { $menuChildren = ''; $haveChildActive = false; foreach ($item['children'] as $child) { $item = array_replace($itemDefault, $item); // applique les valeurs par default '@phan-var-force array{id:string,rank:int,url:string,name:string,group:string,override?:int<0,1>,active?:bool,separator?:bool} $child'; if (!empty($child['separator'])) { $menuChildren .= ''; } if ($context->menuIsActive($child['id'])) { $child['active'] = true; $haveChildActive = true; } if (!empty($child['children'])) { $menuChildren .= "\n\r" . '' . "\n\r"; $menuChildren .= getNavItem($child, $deep + 1); $menuChildren .= "\n\r" . '' . "\n\r"; } else { $menuChildren .= ''; } } $active = ''; if ($haveChildActive || $item['active']) { $active = 'active'; } $menu .= ''; } else { $menu .= '
  • ' . $item['name'] . '
  • '; } return $menu; } /** * Sort menu * uasort callback function to Sort menu fields * * @param array{rank?:int} $a PDF lines array fields configs * @param array{rank?:int} $b PDF lines array fields configs * @return int<-1,1> Return compare result * * // Sorting * uasort ( $this->cols, array( $this, 'menuSort' ) ); * */ function menuSortInv($a, $b) { if (empty($a['rank'])) { $a['rank'] = 0; } if (empty($b['rank'])) { $b['rank'] = 0; } if ($a['rank'] == $b['rank']) { return 0; } return ($a['rank'] < $b['rank']) ? -1 : 1; }