CMXX - Improved menu handling

This commit is contained in:
“VeLiTi”
2025-02-20 17:26:38 +01:00
parent 92b47c3da3
commit 9e7cbc3115
11 changed files with 348 additions and 276 deletions

View File

@@ -146,6 +146,51 @@ function routes($urls) {
//------------------------------------------
// Menu Builder
//------------------------------------------
function filterMenuByProfile($menu, $profileString) {
// Convert profile string to array
$profileArray = explode(',', $profileString);
// Initialize result array
$filteredMenu = [];
// Loop through main menu sections
foreach ($menu as $sectionKey => $section) {
$sectionIncluded = in_array($sectionKey, $profileArray);
$submenuFound = false;
$firstSubmenuItem = null;
// First check if any submenu items are in profile
foreach ($section as $itemKey => $item) {
if ($itemKey !== 'main_menu' && in_array($itemKey, $profileArray)) {
$submenuFound = true;
if ($firstSubmenuItem === null) {
$firstSubmenuItem = $item;
}
}
}
// Include this section if either section key or any submenu is in profile
if ($sectionIncluded || $submenuFound) {
$filteredMenu[$sectionKey] = [];
// Add main_menu - if section not in profile but submenu found, use first submenu as main_menu
if (!$sectionIncluded && $submenuFound && $firstSubmenuItem !== null) {
$filteredMenu[$sectionKey]['main_menu'] = $firstSubmenuItem;
} else {
$filteredMenu[$sectionKey]['main_menu'] = $section['main_menu'];
}
// Add allowed submenu items
foreach ($section as $itemKey => $item) {
if ($itemKey !== 'main_menu' && in_array($itemKey, $profileArray)) {
$filteredMenu[$sectionKey][$itemKey] = $item;
}
}
}
}
return $filteredMenu;
}
function menu($selected,$selected_child){
include dirname(__FILE__,2).'/settings/settings.php';
@@ -153,43 +198,42 @@ function menu($selected,$selected_child){
if(isset($_SESSION['country_code'])){
$api_file_language = dirname(__FILE__,2).'/settings/translations/translations_'.strtoupper($_SESSION['country_code']).'.php';
if (file_exists($api_file_language)){
include $api_file_language; //Include the code
include $api_file_language; //Include the code
}
else {
include dirname(__FILE__,2).'/settings/translations/translations_US.php';
include dirname(__FILE__,2).'/settings/translations/translations_US.php';
}
}
else {
include dirname(__FILE__,2).'/settings/translations/translations_US.php';
}
}
else {
include dirname(__FILE__,2).'/settings/translations/translations_US.php';
}
$profile = explode(',',$_SESSION['profile']);
//Define Menu
$menu = '';
foreach ($main_menu as $menu_item){
if (in_array($item = $menu_item, $profile,)){
//Main URL
$menu .= '<a href="index.php?page='.$urls[$item]['url'].'"' . ($selected == $urls[$item]['selected'] ? ' class="selected"' : '') . '><i class="'.$urls[$item]['icon'].'"></i>'.ucfirst((${$urls[$item]['name']}?? 'not specified')).'</a>';
//DEFINE SUBMENU
$sub_menu = $item.'_sub' ?? '';
$sub_menu = (isset($$sub_menu) && $$sub_menu !='')? $$sub_menu : 0;
//CHECK IF SUBMENU EXIST
if ($sub_menu !=0){
$menu .= '<div class="sub" ' . ($selected == $urls[$item]['selected'] ? ' class="selected"' : '') . '>';
foreach($sub_menu as $key){
//CHECK IF USER IS ALLOWED
if (in_array($key,$profile)){
$menu .= '<a href="index.php?page='.$urls[$key]['url'].'"' . ($selected == $urls[$key]['selected'] && $selected_child == 'view' ? ' class="selected"' : '') . '><span>&#9724;</span>'.ucfirst((${$urls[$key]['name']}?? 'not specified')).'</a>';
}
}
$menu .= '</div>';
}
//filter the main_menu array based on profile
$filteredMenu = filterMenuByProfile($main_menu, $_SESSION['profile']);
foreach ($filteredMenu as $menu_item){
//Main Item
$menu .= '<a href="index.php?page='.$menu_item['main_menu']['url'].'"' . ($selected == $menu_item['main_menu']['selected'] ? ' class="selected"' : '') . '><i class="'.$menu_item['main_menu']['icon'].'"></i>'.ucfirst((${$menu_item['main_menu']['name']} ?? 'not specified')).'</a>';
if (count($menu_item) > 1){
//SUBMENU
$menu .= '<div class="sub" ' . ($selected == $menu_item['main_menu']['selected'] ? ' class="selected"' : '') . '>';
foreach ($menu_item as $key => $item){
//filter out main_menu
if($key !='main_menu'){
$menu .= '<a href="index.php?page='.$item['url'].'"' . ($selected == $item['selected'] ? ' class="selected"' : '') . '><span>&#9724;</span>'.ucfirst((${$item['name']}?? 'not specified')).'</a>';
}
}
$menu .= '</div>';
}
}
return $menu;
}
}
//------------------------------------------
// Template Header
@@ -669,15 +713,15 @@ function getWhereclause($table_name,$permission,$partner){
break;
case '3':
$condition = '__salesid___'.$partner->salesid.'___soldto___%';
$whereclause = 'WHERE '.$table.' like :condition ';
$whereclause = 'WHERE '.$table.' like "'.$condition.'"';
break;
case '2':
$condition = '__salesid___'.$partner->salesid.'___soldto___'.substr($partner->soldto, 0, strpos($partner->soldto, "-")).$soldto_search;
$whereclause = 'WHERE '.$table.' like :condition ';
$whereclause = 'WHERE '.$table.' like "'.$condition.'"';
break;
default:
$condition = '__salesid___'.$partner->salesid.'___soldto___'.substr($partner->soldto, 0, strpos($partner->soldto, "-")).$soldto_search.'___shipto___'.substr($partner->shipto, 0, strpos($partner->shipto, "-")).'%___location___'.substr($partner->location, 0, strpos($partner->location, "-")).'%';
$whereclause = 'WHERE '.$table.' like :condition ';
$whereclause = 'WHERE '.$table.' like "'.$condition.'"';
break;
}
@@ -717,7 +761,7 @@ function getWhereclauselvl2($table_name,$permission,$partner){
break;
case '3':
$condition = '__salesid___'.$partner->salesid.'___soldto___%';
$whereclause = 'WHERE '.$table.' like :condition ';
$whereclause = 'WHERE '.$table.' like "'.$condition.'" ';
break;
default:
$condition = '__salesid___'.$partner->salesid.'___soldto___'.substr($partner->soldto, 0, strpos($partner->soldto, "-")).$soldto_search;