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

@@ -14,7 +14,7 @@ $post_content = json_decode(decode_payload($input),true);
if (empty($partner->soldto) || $partner->soldto == ''){$soldto_search = '%';} else {$soldto_search = '-%';}
//default whereclause to check if data is owned by user
$whereclause = getWhereclauselvl2('partners',$permission,$partner);
list($whereclause,$condition) = getWhereclauselvl2('partners',$permission,$partner);
//SET PARAMETERS FOR QUERY
$id = $post_content['partnerID'] ?? ''; //check for rowID

View File

@@ -12,7 +12,7 @@ $pdo = dbConnect($dbname);
if (empty($partner->soldto) || $partner->soldto == ''){$soldto_search = '%';} else {$soldto_search = '-%';}
//default whereclause
$whereclause = getWhereclauselvl2("discounts",$permission,$partner);
list($whereclause,$condition) = getWhereclauselvl2("discounts",$permission,$partner);
//NEW ARRAY
$criterias = [];

View File

@@ -12,7 +12,7 @@ $pdo = dbConnect($dbname);
if (empty($partner->soldto) || $partner->soldto == ''){$soldto_search = '%';} else {$soldto_search = '-%';}
//default whereclause
$whereclause = getWhereclauselvl2("invoice",$permission,$partner);
list($whereclause,$condition) = getWhereclauselvl2("invoice",$permission,$partner);
//NEW ARRAY
$criterias = [];

View File

@@ -12,7 +12,7 @@ $pdo = dbConnect($dbname);
if (empty($partner->soldto) || $partner->soldto == ''){$soldto_search = '%';} else {$soldto_search = '-%';}
//default whereclause
$whereclause = getWhereclauselvl2("attributes",$permission,$partner);
list($whereclause,$condition) = getWhereclauselvl2("attributes",$permission,$partner);
//NEW ARRAY
$criterias = [];

View File

@@ -12,7 +12,7 @@ $pdo = dbConnect($dbname);
if (empty($partner->soldto) || $partner->soldto == ''){$soldto_search = '%';} else {$soldto_search = '-%';}
//default whereclause
$whereclause = getWhereclauselvl2("config",$permission,$partner);
list($whereclause,$condition) = getWhereclauselvl2("config",$permission,$partner);
//NEW ARRAY
$criterias = [];

View File

@@ -12,7 +12,7 @@ $pdo = dbConnect($dbname);
if (empty($partner->soldto) || $partner->soldto == ''){$soldto_search = '%';} else {$soldto_search = '-%';}
//default whereclause
$whereclause = getWhereclauselvl2("software",$permission,$partner);
list($whereclause,$condition) = getWhereclauselvl2("software",$permission,$partner);
//NEW ARRAY
$criterias = [];

View File

@@ -12,12 +12,14 @@ $pdo = dbConnect($dbname);
if (empty($partner->soldto) || $partner->soldto == ''){$soldto_search = '%';} else {$soldto_search = '-%';}
//default whereclause
$whereclause = getWhereclauselvl2("transactions",$permission,$partner);
list($whereclause,$condition) = getWhereclauselvl2("transactions",$permission,$partner);
//NEW ARRAY
$criterias = [];
$clause = '';
var_dump($w)
//Check for $_GET variables and build up clause
if(isset($get_content) && $get_content!=''){
//GET VARIABLES FROM URL

View File

@@ -14,7 +14,7 @@ $post_content = json_decode($input,true);
if (empty($partner->soldto) || $partner->soldto == ''){$soldto_search = '%';} else {$soldto_search = '-%';}
//default whereclause
$whereclause = getWhereclauselvl2("categories",$permission,$partner);
list($whereclause,$condition) = getWhereclauselvl2("categories",$permission,$partner);
//BUILD UP PARTNERHIERARCHY FROM USER

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';
@@ -163,31 +208,30 @@ function menu($selected,$selected_child){
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>';
//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;
}
@@ -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;

View File

@@ -7,242 +7,268 @@
// Each Menu name in urls array requires reference
// into translation files and corresponding profile
//------------------------------------------
//Menu Setup
$main_menu = array ('dashboard','sales','buildtool','cartests','marketing','equipments','products','reporting','admin','settings');
//Sub menus
$equipments_sub = array('equipments','servicereports','rmas','histories','firmwaretool','equipments_mass_update');
$sales_sub = array('accounts','contracts','catalog','orders');
$products_sub = array('products','products_attributes','pricelists');
$admin_sub = array('users','categories','discounts','shipping','communications','partners','media');
$reporting_sub = array('report_build','report_contracts_billing','report_healthindex','report_usage');
$settings_sub = array('config','translations','logfile','maintenance','profiles');
//URLS
$urls = array(
"dashboard" => array(
$main_menu = [
"dashboard" => [
"main_menu" => [
"url" => "dashboard",
"selected" => "dashboard",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_dashboard"
),
"equipments" => array(
"url" => "equipments",
"selected" => "assets",
"icon" => "fa-solid fa-database",
"name" => "menu_assets"
),
"servicereports" => array(
"url" => "servicereports",
"selected" => "servicereports",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_service_reports"
),
"rmas" => array(
"url" => "rmas",
"selected" => "rmas",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_rmas"
),
"histories" => array(
"url" => "histories",
"selected" => "histories",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_history"
),
"firmwaretool" => array(
"url" => "firmwaretool",
"selected" => "firmwaretool",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_firmwaretool"
),
"equipments_mass_update" => array(
"url" => "equipments_mass_update",
"selected" => "equipments_mass_update",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_equipments_mass_update"
),
"products" => array(
"url" => "products&status=1",
"selected" => "products",
"icon" => "fas fa-box-open",
"name" => "menu_products"
),
"products_attributes" => array(
"url" => "products_attributes",
"selected" => "products_attributes",
"icon" => "fas fa-box-open",
"name" => "menu_products_attributes"
),
"pricelists" => array(
"url" => "pricelists",
"selected" => "pricelists",
"icon" => "fa-solid fa-coins",
"name" => "menu_pricelists"
),
"sales" => array(
]
],
"sales" => [
"main_menu" => [
"url" => "contracts",
"selected" => "contracts",
"icon" => "fa-solid fa-bars",
"name" => "menu_sales"
),
"accounts" => array(
],
"accounts" => [
"url" => "accounts",
"selected" => "accounts",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_sales_accounts"
),
"contracts" => array(
"url" => "contracts",
"selected" => "contracts",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_sales_contracts"
),
"orders" => array(
"url" => "orders",
"selected" => "orders",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_sales_orders"
),
"admin" => array(
"url" => "partners",
"selected" => "partners",
"icon" => "fa-solid fa-bars",
"name" => "menu_admin"
),
"users" => array(
"url" => "users",
"selected" => "users",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_admin_users"
),
"communications" => array(
"url" => "communications",
"selected" => "communications",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_admin_communications"
),
"media" => array(
"url" => "media",
"selected" => "media",
"icon" => "fa-solid fa-photo-film",
"name" => "menu_media"
),
"categories" => array(
"url" => "categories",
"selected" => "categories",
"icon" => "fa-solid fa-photo-film",
"name" => "menu_categories"
),
"discounts" => array(
"url" => "discounts",
"selected" => "discounts",
"icon" => "fa-solid fa-photo-film",
"name" => "menu_discounts"
),
"shipping" => array(
"url" => "shipping",
"selected" => "shipping",
"icon" => "fa-solid fa-truck-fast",
"name" => "menu_shipping"
),
"catalog" => array(
],
"catalog" => [
"url" => "catalog",
"selected" => "catalog",
"icon" => "fa-solid fa-photo-film",
"name" => "menu_catalog"
),
"partners" => array(
"url" => "partners",
"selected" => "partners",
],
"contracts" => [
"url" => "contracts",
"selected" => "contracts",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_admin_partners"
),
"settings" => array(
"url" => "settings",
"selected" => "settings",
"icon" => "fas fa-tools",
"name" => "menu_settings"
),
"config" => array(
"url" => "settings",
"selected" => "settings",
"icon" => "fas fa-tools",
"name" => "menu_config"
),
"translations" => array(
"url" => "translations",
"selected" => "translations",
"name" => "menu_sales_contracts"
],
"orders" => [
"url" => "orders",
"selected" => "orders",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_translations"
),
"logfile" => array(
"url" => "logfile",
"selected" => "logfile",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_logfile"
),
"maintenance" => array(
"url" => "maintenance",
"selected" => "maintenance",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_maintenance"
),
"profiles" => array(
"url" => "profiles",
"selected" => "profiles",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_profiles"
),
"marketing" => array(
"url" => "marketing&product_group=Emergency_Plug&product_content=Images",
"selected" => "marketing",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_marketing"
),
"buildtool" => array(
"name" => "menu_sales_orders"
]
],
"buildtool" => [
"main_menu" => [
"url" => "buildtool",
"selected" => "buildtool",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_build"
),
"cartests" => array(
]
],
"cartests" => [
"main_menu" => [
"url" => "cartests",
"selected" => "cartests",
"icon" => "fa-solid fa-car",
"name" => "menu_cartest"
),
"reporting" => array(
]
],
"marketing" => [
"main_menu" => [
"url" => "marketing&product_group=Emergency_Plug&product_content=Images",
"selected" => "marketing",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_marketing"
]
],
"equipments" => [
"main_menu" => [
"url" => "equipments",
"selected" => "assets",
"icon" => "fa-solid fa-database",
"name" => "menu_assets"
],
"equipments" =>[
"url" => "equipments",
"selected" => "assets",
"icon" => "fa-solid fa-database",
"name" => "menu_assets"
],
"servicereports" => [
"url" => "servicereports",
"selected" => "servicereports",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_service_reports"
],
"rmas" => [
"url" => "rmas",
"selected" => "rmas",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_rmas"
],
"histories" => [
"url" => "histories",
"selected" => "histories",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_history"
],
"firmwaretool" => [
"url" => "firmwaretool",
"selected" => "firmwaretool",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_firmwaretool"
] ,
"equipments_mass_update" => [
"url" => "equipments_mass_update",
"selected" => "equipments_mass_update",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_equipments_mass_update"
]
],
"products" => [
"main_menu" => [
"url" => "products&status=1",
"selected" => "products",
"icon" => "fas fa-box-open",
"name" => "menu_products"
],
"products" => [
"url" => "products&status=1",
"selected" => "products",
"icon" => "fas fa-box-open",
"name" => "menu_products"
],
"products_attributes" => [
"url" => "products_attributes",
"selected" => "products_attributes",
"icon" => "fas fa-box-open",
"name" => "menu_products_attributes"
],
"pricelists" => [
"url" => "pricelists",
"selected" => "pricelists",
"icon" => "fa-solid fa-coins",
"name" => "menu_pricelists"
]
],
"reporting" => [
"main_menu" => [
"url" => "report_build",
"selected" => "report_build",
"icon" => "fa-solid fa-magnifying-glass-chart",
"name" => "menu_report_main"
),
"report_build" => array(
],
"report_build" => [
"url" => "report_build",
"selected" => "report_build",
"icon" => "fa-solid fa-magnifying-glass-chart",
"name" => "menu_report_build"
),
"report_contracts_billing" => array(
],
"report_contracts_billing" => [
"url" => "report_contracts_billing",
"selected" => "report_contracts_billing",
"icon" => "fa-solid fa-magnifying-glass-chart",
"name" => "menu_report_contracts_billing"
),
"report_healthindex" => array(
],
"report_healthindex" => [
"url" => "report_healthindex",
"selected" => "report_healthindex",
"icon" => "fa-solid fa-magnifying-glass-chart",
"name" => "menu_report_healthindex"
),
"report_usage" => array(
],
"report_usage" => [
"url" => "report_usage",
"selected" => "report_usage",
"icon" => "fa-solid fa-magnifying-glass-chart",
"name" => "menu_report_usage"
)
);
]
],
"admin" =>[
"main_menu" => [
"url" => "partners",
"selected" => "partners",
"icon" => "fa-solid fa-bars",
"name" => "menu_admin"
],
"partners" => [
"url" => "partners",
"selected" => "partners",
"icon" => "fa-solid fa-bars",
"name" => "menu_admin"
],
"users" => [
"url" => "users",
"selected" => "users",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_admin_users"
],
"communications" => [
"url" => "communications",
"selected" => "communications",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_admin_communications"
],
"media" => [
"url" => "media",
"selected" => "media",
"icon" => "fa-solid fa-photo-film",
"name" => "menu_media"
],
"categories" => [
"url" => "categories",
"selected" => "categories",
"icon" => "fa-solid fa-photo-film",
"name" => "menu_categories"
],
"discounts" => [
"url" => "discounts",
"selected" => "discounts",
"icon" => "fa-solid fa-photo-film",
"name" => "menu_discounts"
],
"shipping" => [
"url" => "shipping",
"selected" => "shipping",
"icon" => "fa-solid fa-truck-fast",
"name" => "menu_shipping"
]
],
"settings" => [
"main_menu" => [
"url" => "settings",
"selected" => "settings",
"icon" => "fas fa-tools",
"name" => "menu_settings"
],
"settings" => [
"url" => "settings",
"selected" => "settings",
"icon" => "fas fa-tools",
"name" => "menu_settings"
],
"config" => [
"url" => "settings",
"selected" => "settings",
"icon" => "fas fa-tools",
"name" => "menu_config"
],
"translations" => [
"url" => "translations",
"selected" => "translations",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_translations"
],
"logfile" => [
"url" => "logfile",
"selected" => "logfile",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_logfile"
],
"maintenance" => [
"url" => "maintenance",
"selected" => "maintenance",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_maintenance"
],
"profiles" => [
"url" => "profiles",
"selected" => "profiles",
"icon" => "fas fa-tachometer-alt",
"name" => "menu_profiles"
]
]
];
$routes = array(
'/' => 'equipments.php',

View File

@@ -10,7 +10,7 @@ define('adminplus_profile','dashboard,profile,buildtool,sales,accounts,account,c
/*Build*/
define('build','dashboard,profile,buildtool,firmwaretool,buildtool,products_software,application');
/*Commerce*/
define('commerce','dashboard,profile,assets,equipments,equipment,equipment_manage,equipment_manage_edit,equipments_mass_update,histories,history,history_manage,firmwaretool,products,products_versions,products_software,product,product_manage,servicereports,servicereport,admin,partners,partner,users,user,user_manage,marketing,application');
define('commerce','dashboard,profile,products,products_versions,products_software,products_attributes,products_attributes_items,products_attributes_manage,products_configurations,products_categories,products_media,product,product_manage,pricelists,pricelists_items,pricelists_manage,catalog,categories,category,discounts,discount,shipping,shipping_manage,admin,users,user,user_manage,translations,translations_details,translation_manage,media,media_manage,application,profiles,shopping_cart,checkout,placeorder,taxes,transactions,transactions_items,invoice,order,orders');
/*Distribution*/
define('distribution','dashboard,profile,assets,equipments,equipment,equipment_manage,equipment_manage_edit,equipments_mass_update,histories,history,history_manage,firmwaretool,products,products_versions,products_software,product,product_manage,servicereports,servicereport,admin,partners,partner,users,user,user_manage,marketing,application');
/*Firmware*/