From 59c23bf46c65852b0ea1ba49bf07b4ee2f5c7b21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CVeLiTi=E2=80=9D?= <“info@veliti.nl”> Date: Mon, 3 Feb 2025 11:28:05 +0100 Subject: [PATCH] CMXX - Categories and filters --- api/v1/post/products.php | 25 ++++- api/v2/get/categories.php | 7 +- api/v2/get/products_categories.php | 123 ++++++++++++++++++++++++ api/v2/post/categories.php | 98 +++++++++++++++++++ api/v2/post/products.php | 21 ++++ api/v2/post/products_categories.php | 66 +++++++++++++ catalog.php | 4 +- categories.php | 142 +++++++++++++++++++++++++++ category.php | 143 ++++++++++++++++++++++++++++ product.php | 17 ++++ product_manage.php | 33 ++++++- products_versions.php | 4 +- settings/settingsprofiles.php | 2 +- settings/settingsviews.php | 2 + style/admin.css | 10 ++ 15 files changed, 688 insertions(+), 9 deletions(-) create mode 100644 api/v2/get/products_categories.php create mode 100644 api/v2/post/categories.php create mode 100644 api/v2/post/products_categories.php create mode 100644 categories.php create mode 100644 category.php diff --git a/api/v1/post/products.php b/api/v1/post/products.php index 171c339..b1b1c2a 100644 --- a/api/v1/post/products.php +++ b/api/v1/post/products.php @@ -53,12 +53,30 @@ elseif ($command == 'insert'){ $post_content['created'] = $date; $post_content['createdby'] = $username; $post_content['accounthierarchy'] = $partner_product; + } else { //do nothing } -//CREAT NEW ARRAY AND MAP TO CLAUSE +//CHECK IF CATEGORIES ARE SEND AND UPDATE +if (isset($post_content['categories'])){ + + if ($command != 'insert'){ + //CHANGE OR DELETE SO PRODUCT_ID IS AVAILABLE IN CALL + $api_url = '/v2/products_categories/'; + $data = json_encode(array("categories" => $post_content['categories'], "product_id" => $id), JSON_UNESCAPED_UNICODE); + $responses = ioApiv2($api_url,$data,$clientsecret); + } else { + //INSERT Product ROWID NOT AVAILABLE YET. store $post_content['categories'] in different variable. + $categories = $post_content['categories']; + } + + //REMOVE CATERGORIES FROM POST_CONTENT ARRAY + unset($post_content['categories']); +} + +//CREATe NEW ARRAY AND MAP TO CLAUSE if(isset($post_content) && $post_content!=''){ foreach ($post_content as $key => $var){ if ($key == 'submit' || $key == 'rowID'){ @@ -90,6 +108,11 @@ elseif ($command == 'insert' && isAllowed('products',$profile,$permission,'C') = $sql = 'INSERT INTO products ('.$clause_insert.') VALUES ('.$input_insert.')'; $stmt = $pdo->prepare($sql); $stmt->execute($execute_input); + + $api_url = '/v2/products_categories/'; + $data = json_encode(array("categories" => $categories, "product_id" => $id), JSON_UNESCAPED_UNICODE); + $responses = ioApiv2($api_url,$data,$clientsecret); + } elseif ($command == 'delete' && isAllowed('products',$profile,$permission,'D') === 1){ $stmt = $pdo->prepare('DELETE FROM products WHERE rowID = ? '.$whereclause.''); diff --git a/api/v2/get/categories.php b/api/v2/get/categories.php index a2438e5..04e55b6 100644 --- a/api/v2/get/categories.php +++ b/api/v2/get/categories.php @@ -48,8 +48,12 @@ if(isset($get_content) && $get_content!=''){ //build up search $clause .= ' AND name like :'.$v[0]; } + elseif ($v[0] == 'rowid_exclude') { + //build up search + $clause .= ' AND rowID != :'.$v[0]; + } else {//create clause - $clause .= ' AND '.$v[0].' = :'.$v[0]; + $clause .= ' AND '.$v[0].' = :'.$v[0]; } } if ($whereclause == '' && $clause !=''){ @@ -66,6 +70,7 @@ if(isset($criterias['totals']) && $criterias['totals'] ==''){ else { //SQL for Paging $sql = 'SELECT * FROM categories '.$whereclause.' LIMIT :page,:num_products'; + } $stmt = $pdo->prepare($sql); diff --git a/api/v2/get/products_categories.php b/api/v2/get/products_categories.php new file mode 100644 index 0000000..ddea494 --- /dev/null +++ b/api/v2/get/products_categories.php @@ -0,0 +1,123 @@ +soldto) || $partner->soldto == ''){$soldto_search = '%';} else {$soldto_search = '-%';} + +//default whereclause +$whereclause = ''; + +switch ($permission) { + case '4': + $whereclause = ''; + break; + case '3': + $whereclause = ''; + break; + default: + $condition = '__salesid___'.$partner->salesid.'___soldto___'.substr($partner->soldto, 0, strpos($partner->soldto, "-")).$soldto_search; + $whereclause = 'WHERE accounthierarchy like "'.$condition.'"'; + break; +} + +//NEW ARRAY +$criterias = []; +$clause = ''; + +//Check for $_GET variables and build up clause +if(isset($get_content) && $get_content!=''){ + //GET VARIABLES FROM URL + $requests = explode("&", $get_content); + //Check for keys and values + foreach ($requests as $y){ + $v = explode("=", $y); + //INCLUDE VARIABLES IN ARRAY + $criterias[$v[0]] = $v[1]; + + if ($v[0] == 'page' || $v[0] =='p' || $v[0] =='totals' || $v[0] =='list' || $v[0] =='history'|| $v[0] =='success_msg'){ + //do nothing + } + elseif ($v[0] == 'search') { + //build up search + $clause .= ' AND c.name like :'.$v[0]; + } + else {//create clause + $clause .= ' AND pc.'.$v[0].' = :'.$v[0]; + } + } + if ($whereclause == '' && $clause !=''){ + $whereclause = 'WHERE '.substr($clause, 4); + } else { + $whereclause .= $clause; + } +} +//Define Query +if(isset($criterias['totals']) && $criterias['totals'] ==''){ +//Request for total rows + $sql = 'SELECT count(*) as count FROM products_categories '.$whereclause.''; +} +else { + //SQL for Paging + $sql = 'SELECT c.name, c.rowID FROM products_categories pc JOIN categories c ON c.rowID = pc.category_id '.$whereclause.''; +} + +$stmt = $pdo->prepare($sql); + +//Bind to query +if (str_contains($whereclause, ':condition')){ + $stmt->bindValue('condition', $condition, PDO::PARAM_STR); +} + +if (!empty($criterias)){ + foreach ($criterias as $key => $value){ + $key_condition = ':'.$key; + if (str_contains($whereclause, $key_condition)){ + if ($key == 'search'){ + $search_value = '%'.$value.'%'; + $stmt->bindValue($key, $search_value, PDO::PARAM_STR); + } + else { + $stmt->bindValue($key, $value, PDO::PARAM_STR); + } + } + } +} + +//Add paging details +if(isset($criterias['totals']) && $criterias['totals']==''){ + $stmt->execute(); + $messages = $stmt->fetch(); + $messages = $messages[0]; +} +elseif(isset($criterias['list']) && $criterias['list']==''){ + //Excute Query + $stmt->execute(); + //Get results + $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); +} +else { + //$current_page = isset($criterias['p']) && is_numeric($criterias['p']) ? (int)$criterias['p'] : 1; + //$stmt->bindValue('page', ($current_page - 1) * $page_rows_products, PDO::PARAM_INT); + //$stmt->bindValue('num_products', $page_rows_products, PDO::PARAM_INT); + + //Excute Query + $stmt->execute(); + //Get results + $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); +} +//------------------------------------------ +//JSON_ENCODE +//------------------------------------------ +$messages = json_encode($messages, JSON_UNESCAPED_UNICODE); + +//Send results +echo $messages; + +?> \ No newline at end of file diff --git a/api/v2/post/categories.php b/api/v2/post/categories.php new file mode 100644 index 0000000..046cd58 --- /dev/null +++ b/api/v2/post/categories.php @@ -0,0 +1,98 @@ +soldto) || $partner->soldto == ''){$soldto_search = '%';} else {$soldto_search = '-%';} + +//default whereclause +$whereclause = ''; + +switch ($permission) { + case '4': + $whereclause = ''; + break; + case '3': + $whereclause = ''; + break; + default: + $condition = '__salesid___'.$partner->salesid.'___soldto___'.substr($partner->soldto, 0, strpos($partner->soldto, "-")).$soldto_search; + $whereclause = ' AND c.accounthierarchy like "'.$condition.'"'; + break; +} + +//BUILD UP PARTNERHIERARCHY FROM USER +$partner_product = json_encode(array("salesid"=>$partner->salesid,"soldto"=>$partner->soldto), JSON_UNESCAPED_UNICODE); + +$id = $post_content['rowID'] ?? ''; //check for rowID +$command = ($id == '')? 'insert' : 'update'; //IF rowID = empty then INSERT +if (isset($post_content['delete'])){$command = 'delete';} //change command to delete +$date = date('Y-m-d H:i:s'); + +//CREATE EMPTY STRINGS +$clause = ''; +$clause_insert =''; +$input_insert = ''; + +if ($command == 'update'){ + $post_content['updatedby'] = $username; +} +if ($command == 'insert'){ + $post_content['createdby'] = $username; + $post_content['accounthierarchy'] = $partner_product; +} + +//CREAT NEW ARRAY AND MAP TO CLAUSE +if(isset($post_content) && $post_content!=''){ + foreach ($post_content as $key => $var){ + if ($key == 'submit' || $key == 'rowID'){ + //do nothing + } + else { + $criterias[$key] = $var; + $clause .= ' , '.$key.' = ?'; + $clause_insert .= ' , '.$key.''; + $input_insert .= ', ?'; // ? for each insert item + $execute_input[]= $var; // Build array for input + } + } +} + +//CLEAN UP INPUT +$clause = substr($clause, 2); //Clean clause - remove first comma +$clause_insert = substr($clause_insert, 2); //Clean clause - remove first comma +$input_insert = substr($input_insert, 1); //Clean clause - remove first comma + +//QUERY AND VERIFY ALLOWED +if ($command == 'update' && isAllowed('categories',$profile,$permission,'U') === 1){ + $sql = 'UPDATE categories SET '.$clause.' WHERE rowID = ? '.$whereclause.''; + $execute_input[] = $id; + $stmt = $pdo->prepare($sql); + $stmt->execute($execute_input); +} +elseif ($command == 'insert' && isAllowed('categories',$profile,$permission,'C') === 1){ + $sql = 'INSERT INTO categories ('.$clause_insert.') VALUES ('.$input_insert.')'; + $stmt = $pdo->prepare($sql); + $stmt->execute($execute_input); +} +elseif ($command == 'delete' && isAllowed('categories',$profile,$permission,'D') === 1){ + $stmt = $pdo->prepare('DELETE c, pc FROM categories c LEFT JOIN products_categories pc ON pc.category_id = c.rowID WHERE c.rowID = ? '.$whereclause.''); + $stmt->execute([ $id ]); + + //Add deletion to changelog + changelog($dbname,'categories',$id,'Delete','Delete',$username); +} else +{ + //do nothing +} + + +?> \ No newline at end of file diff --git a/api/v2/post/products.php b/api/v2/post/products.php index 6aab0c3..017f800 100644 --- a/api/v2/post/products.php +++ b/api/v2/post/products.php @@ -58,6 +58,23 @@ else { //do nothing } +//CHECK IF CATEGORIES ARE SEND AND UPDATE +if (isset($post_content['categories'])){ + + if ($command != 'insert'){ + //CHANGE OR DELETE SO PRODUCT_ID IS AVAILABLE IN CALL + $api_url = '/v2/products_categories/'; + $data = json_encode(array("categories" => $post_content['categories'], "product_id" => $id), JSON_UNESCAPED_UNICODE); + $responses = ioApiv2($api_url,$data,$clientsecret); + } else { + //INSERT Product ROWID NOT AVAILABLE YET. store $post_content['categories'] in different variable. + $categories = $post_content['categories']; + } + + //REMOVE CATERGORIES FROM POST_CONTENT ARRAY + unset($post_content['categories']); +} + //CREAT NEW ARRAY AND MAP TO CLAUSE if(isset($post_content) && $post_content!=''){ foreach ($post_content as $key => $var){ @@ -90,6 +107,10 @@ elseif ($command == 'insert' && isAllowed('products',$profile,$permission,'C') = $sql = 'INSERT INTO products ('.$clause_insert.') VALUES ('.$input_insert.')'; $stmt = $pdo->prepare($sql); $stmt->execute($execute_input); + + $api_url = '/v2/products_categories/'; + $data = json_encode(array("categories" => $categories, "product_id" => $id), JSON_UNESCAPED_UNICODE); + $responses = ioApiv2($api_url,$data,$clientsecret); } elseif ($command == 'delete' && isAllowed('products',$profile,$permission,'D') === 1){ $stmt = $pdo->prepare('DELETE FROM products WHERE rowID = ? '.$whereclause.''); diff --git a/api/v2/post/products_categories.php b/api/v2/post/products_categories.php new file mode 100644 index 0000000..bbc1fda --- /dev/null +++ b/api/v2/post/products_categories.php @@ -0,0 +1,66 @@ +soldto) || $partner->soldto == ''){$soldto_search = '%';} else {$soldto_search = '-%';} + +//default whereclause +$whereclause = ''; + +switch ($permission) { + case '4': + $whereclause = ''; + break; + case '3': + $whereclause = ''; + break; + default: + $condition = '__salesid___'.$partner->salesid.'___soldto___'.substr($partner->soldto, 0, strpos($partner->soldto, "-")).$soldto_search; + $whereclause = ' AND accounthierarchy like "'.$condition.'"'; + break; +} +//CHECK IF PRODUCT ID IS SEND +if (isset($post_content['product_id']) && $post_content['product_id'] != ''){ + +//CHECK IF ALLOWED TO CRUD CATEGORIES + $sql = "SELECT * FROM products WHERE rowID = ? '.$whereclause.'"; + $stmt = $pdo->prepare($sql); + $stmt->execute([isset($post_content['product_id'])]); + $product_data = $stmt->fetch(); + $product_owner = ($product_data['rowID'])? 1 : 0; + + //IF PRODUCT IS OWNED THEN CRUD is ALLOWED + if ($product_owner === 1 ){ + + if(isAllowed('products_categories',$profile,$permission,'U') === 1 || isAllowed('products_categories',$profile,$permission,'C') === 1) { + + if (isset($post_content['categories']) && is_array($post_content['categories']) && count($post_content['categories']) > 0) { + $in = str_repeat('?,', count($post_content['categories']) - 1) . '?'; + $stmt = $pdo->prepare('DELETE FROM products_categories WHERE product_id = ? AND category_id NOT IN (' . $in . ')'); + $stmt->execute(array_merge([$post_content['product_id'] ], $post_content['categories'])); + + foreach ($post_content['categories'] as $cat) { + $stmt = $pdo->prepare('INSERT IGNORE INTO products_categories (product_id,category_id) VALUES (?,?)'); + $stmt->execute([$post_content['product_id'], $cat ]); + } + } + } else { + if(isAllowed('products_categories',$profile,$permission,'D') === 1){ + + $stmt = $pdo->prepare('DELETE FROM products_categories WHERE product_id = ?'); + $stmt->execute([$post_content['product_id']]); + + changelog($dbname,'products_categories',$id,'Delete','Delete',$username); + } + } + } +} \ No newline at end of file diff --git a/catalog.php b/catalog.php index 175b259..c9c86ec 100644 --- a/catalog.php +++ b/catalog.php @@ -14,12 +14,12 @@ include_once './settings/settings.php'; $prev_page = $_SESSION['prev_origin'] ?? ''; $page = $_SESSION['origin'] = 'catalog'; -/*Check if allowed +//Check if allowed if (isAllowed($page,$_SESSION['profile'],$_SESSION['permission'],'R') === 0){ header('location: index.php'); exit; } -*/ + //GET PARAMETERS $pagination_page = isset($_GET['p']) ? $_GET['p'] : 1; $search = isset($_GET['search']) ? '&search='.$_GET['search'] : ''; diff --git a/categories.php b/categories.php new file mode 100644 index 0000000..d4e560f --- /dev/null +++ b/categories.php @@ -0,0 +1,142 @@ + + -' . str_repeat('----', $n) . '' . $category['name'] . ' + Edit (ID =' . $category['rowID'] . ') + + '; + $html .= admin_populate_categories($categories, $category['rowID'], $n+1); + } + } + return $html; +} + +template_header('Categories', 'categories','view'); +$view = ' +
+
+ +
+

'.($categories_h2 ?? 'Categories').' ('.$query_total.')

+

'.($categories_p ?? '').'

+
+
+
'; + +if (isset($success_msg)){ +$view .= '
+ +

'.$success_msg.'

+ +
'; +} + +$view .= ' +
+ Create Category +
+
+
+ + + + + + + + '; + if (empty($categories)){ + $view .= ' + + '; + } + else { + $view .= admin_populate_categories($categories); + } + +$view .= ' + +
'.($categories_name ?? 'Name').''.$general_actions.'
'.($message_no_categories ?? 'There are no categories').'
+
+
+'; + +$view.=''; +//OUTPUT +echo $view; + +template_footer(); +?> \ No newline at end of file diff --git a/category.php b/category.php new file mode 100644 index 0000000..33d728c --- /dev/null +++ b/category.php @@ -0,0 +1,143 @@ + '', + 'name' => '', + 'parent_id' => 0, + 'status' => 1, + 'filter' => 0, + 'accounthierarchy' => '' +]; + +$category_exclude = (isset($_GET['rowID'])) ? 'rowID_exclude='.$_GET['rowID'] : ''; + +//GET ALL CATEGORIES +$api_url = '/v2/categories/'.$category_exclude; +$categories = ioServer($api_url,''); + +//Decode Payload +if (!empty($categories)){$categories = json_decode($categories,true);}else{$categories = null;} + +if (isset($_GET['rowID'])) { + + //CALL TO API + $api_url = '/v2/categories/rowID='.$_GET['rowID']; + $category = ioServer($api_url,''); + + //Decode Payload + if (!empty($category)){$category = json_decode($category,true);}else{$category = null;} + $category = $category[0]; + + // ID param exists, edit an existing category + $page = 'Edit'; + if (isset($_POST['submit'])) { + //Update the category + + //GET ALL POST DATA + $payload = json_encode($_POST, JSON_UNESCAPED_UNICODE); + //API call + $responses = ioServer('/v2/categories', $payload); + if ($responses === 'NOK'){ + + } else { + header('Location: index.php?page=categories&success_msg=2'); + exit; + } + } + if (isset($_POST['delete'])) { + //GET ALL POST DATA + $payload = json_encode($_POST, JSON_UNESCAPED_UNICODE); + var_dump($payload); + //API call + $responses = ioServer('/v2/categories', $payload); + if ($responses === 'NOK'){ + + } else { + //Redirect and delete product + header('Location: index.php?page=categories&success_msg=3'); + exit; + } + } + +} else { + + // Create a new category + $page = 'Create'; + if (isset($_POST['submit'])) { + //GET ALL POST DATA + $payload = json_encode($_POST , JSON_UNESCAPED_UNICODE); + + //API call + $responses = ioServer('/v2/categories', $payload); + if ($responses === 'NOK'){ + // DO nothing + } + else { + header('Location: index.php?page=categories&success_msg=1'); + exit; + } + } +} + +template_header('Category', 'categories', 'manage'); + +$view =' +
+
+

'.($categories_h2 ?? 'Categories').'

+ '.$button_cancel.' +'; + +if ($delete_allowed === 1){ + $view .= ''; +} +if ($update_allowed === 1){ + $view .= ''; +} + +$view .= '
'; + +$view .= '
+
+
+ + + + + + + + + +
+
+'; + +//Output +echo $view; +template_footer() +?> \ No newline at end of file diff --git a/product.php b/product.php index 3c43581..1b111c4 100644 --- a/product.php +++ b/product.php @@ -68,6 +68,12 @@ $products_configurations = ioServer($api_url,''); //Decode Payload if (!empty($products_configurations)){$products_configurations = json_decode($products_configurations,true);}else{$products_configurations = null;} +//GET RELATED CATEGORIES +$api_url = '/v2/products_categories/product_id='.$_GET['rowID']; +$product['categories'] = ioServer($api_url,''); +//Decode Payload +if (!empty($product['categories'] )){$product['categories'] = json_decode($product['categories'] ,true);}else{$product['categories'] = null;} + //------------------------------ // Variables //------------------------------ @@ -146,6 +152,17 @@ $view .= '

'.($product_quantity ?? 'Quantity').'

'.(${$responses->quantity} ?? $responses->quantity).'

+
+
+

'.($product_categories_text ?? 'Categories').'

+

'; + foreach ($product['categories'] as $cat){ + $view .= ' + ×'.$cat['name'].' + '; + } +$view .= '
+

'; $view .=' diff --git a/product_manage.php b/product_manage.php index c9e85e7..15dd199 100644 --- a/product_manage.php +++ b/product_manage.php @@ -41,9 +41,18 @@ $product = [ 'partnerhierarchy' => '', 'sn' =>'', 'healthindex' =>'', - 'configurable' =>'' + 'configurable' =>'', + 'categories' => [] ]; +//GET ALL CATEGORIES +$api_url = '/v2/categories/'; +$categories = ioServer($api_url,''); + +//Decode Payload +if (!empty($categories)){$categories = json_decode($categories,true);}else{$categories = null;} + + if (isset($_GET['id'])) { // ID param exists, edit an existing product //CALL TO API @@ -68,6 +77,13 @@ if (isset($_GET['id'])) { } } + //GET RELATED CATEGORIES + $api_url = '/v2/products_categories/product_id='.$_GET['id']; + $product['categories'] = ioServer($api_url,''); + + //Decode Payload + if (!empty($product['categories'] )){$product['categories'] = json_decode($product['categories'] ,true);}else{$product['categories'] = null;} + if ($update_allowed === 1){ if (isset($_POST['file_upload'])){ uploadProduct($_POST['productcode']); @@ -186,6 +202,21 @@ $view .= '
+ +
'; + foreach ($product['categories'] as $cat){ +$view .= ' + ×'.$cat['name'].' + + '; + } +$view .= ' +
'; + foreach ($categories as $cat) { + $view .= ' '.$cat['name'].''; + } +$view .= '
+
diff --git a/products_versions.php b/products_versions.php index 0d906da..c1706de 100644 --- a/products_versions.php +++ b/products_versions.php @@ -77,9 +77,7 @@ if (isset($_GET['rowID'])) { if (isset($_POST['submit']) && $create_allowed === 1) { //GET ALL POST DATA - $data = json_encode($_POST , JSON_UNESCAPED_UNICODE); - //Secure data - $payload = generate_payload($data); + $payload = json_encode($_POST , JSON_UNESCAPED_UNICODE); //API call $responses = ioServer('/v2/products_versions', $payload); if ($responses === 'NOK'){ diff --git a/settings/settingsprofiles.php b/settings/settingsprofiles.php index de44e6d..0a0cdfc 100644 --- a/settings/settingsprofiles.php +++ b/settings/settingsprofiles.php @@ -6,7 +6,7 @@ define('superuser_profile','dashboard,profile,assets,equipments,equipment,equipm /*Admin*/ define('admin_profile','dashboard,profile,buildtool,sales,accounts,account,contracts,contract,contract_manage,cartests,cartest,cartest_manage,assets,equipments,equipment,equipment_healthindex,equipment_data,equipment_manage,equipment_manage_edit,equipments_mass_update,histories,history,history_manage,firmwaretool,rmas,rma,rma_manage,rma_history,rma_history_manage,buildtool,products,products_versions,products_software,product,product_manage,servicereports,servicereport,admin,partners,partner,users,user,user_manage,communications,communication,communication_send,marketing,reporting,report_build,report_contracts_billing,report_healthindex,changelog,application'); /*AdminPlus*/ -define('adminplus_profile','dashboard,profile,buildtool,sales,accounts,account,contracts,contract,contract_manage,billing,cartests,cartest,cartest_manage,assets,equipments,equipment,equipment_healthindex,equipment_data,equipment_manage,equipment_manage_edit,equipments_mass_update,histories,history,history_manage,firmwaretool,rmas,rma,rma_manage,rma_history,rma_history_manage,buildtool,products,products_versions,products_software,products_attributes,products_attributes_items,products_attributes_manage,products_configurations,product,product_manage,pricelists,pricelists_items,pricelists_manage,catalog,servicereports,servicereport,admin,partners,partner,users,user,user_manage,communications,communication,communication_send,marketing,reporting,report_build,report_contracts_billing,report_healthindex,report_usage,config,settings,logfile,changelog,language,translations,translations_details,translation_manage,media,media_manage,application,maintenance,profiles,vin'); +define('adminplus_profile','dashboard,profile,buildtool,sales,accounts,account,contracts,contract,contract_manage,billing,cartests,cartest,cartest_manage,assets,equipments,equipment,equipment_healthindex,equipment_data,equipment_manage,equipment_manage_edit,equipments_mass_update,histories,history,history_manage,firmwaretool,rmas,rma,rma_manage,rma_history,rma_history_manage,buildtool,products,products_versions,products_software,products_attributes,products_attributes_items,products_attributes_manage,products_configurations,product,product_manage,pricelists,pricelists_items,pricelists_manage,catalog,categories,category,servicereports,servicereport,admin,partners,partner,users,user,user_manage,communications,communication,communication_send,marketing,reporting,report_build,report_contracts_billing,report_healthindex,report_usage,config,settings,logfile,changelog,language,translations,translations_details,translation_manage,media,media_manage,application,maintenance,profiles,vin'); /*Build*/ define('build','dashboard,profile,buildtool,firmwaretool,buildtool,products_software,application'); /*Distribution*/ diff --git a/settings/settingsviews.php b/settings/settingsviews.php index db3b53e..2c47f68 100644 --- a/settings/settingsviews.php +++ b/settings/settingsviews.php @@ -42,6 +42,7 @@ $all_views = [ "products_attributes_items", "products_attributes_manage", "products_configurations", + "products_categories", "product", "product_manage", "pricelists", @@ -49,6 +50,7 @@ $all_views = [ "pricelists_manage", "catalog", "categories", + "category", "servicereports", "servicereport", "admin", diff --git a/style/admin.css b/style/admin.css index 8ef8f85..4a5b654 100644 --- a/style/admin.css +++ b/style/admin.css @@ -731,6 +731,16 @@ main .form .multiselect > .item { justify-content: center; align-items: center; } +main .multiselect > .item { + display: inline-flex; + border: 1px solid #dedfe1; + padding: 0 10px; + height: 40px; + margin: 0 5px 5px 0; + font-size: 14px; + justify-content: center; + align-items: center; +} main .form .multiselect > .item .remove { font-style: normal;