From 18ae8245872a03e615c3e5a9b31d2c3e7d82b578 Mon Sep 17 00:00:00 2001 From: JB Date: Fri, 17 May 2024 22:14:25 +0100 Subject: [PATCH 1/8] - v10.2 --- CHANGELOG.md | 1 + VERSION.md | 2 +- db/schema.ver | 2 +- releasenotes.md | 9 +-------- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f5434b6c..63441573 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ # CHANGELOG +### Version 10.2 ### Version 10.1 - Added export to JSON for perfume types - Added export to JSON for categories diff --git a/VERSION.md b/VERSION.md index ae425d69..e2498ea5 100755 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -10.1 +10.2 diff --git a/db/schema.ver b/db/schema.ver index ae425d69..e2498ea5 100644 --- a/db/schema.ver +++ b/db/schema.ver @@ -1 +1 @@ -10.1 +10.2 diff --git a/releasenotes.md b/releasenotes.md index dfaac313..196b4387 100755 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,10 +1,3 @@ -Whats New in v10.1 +Whats New in v10.2 -------------------------- -- Expand/Collapse ingredient compositions (if any) when formulating -- Set custom decimal precission when generating a formula to sell -- Added orientation when exporting to a formula for selling -- Allow ordering in formula sell table -- Fix export functions in Formula Make page -- Added export to JSON for perfume types -- Added export to JSON for categories - For full details please refer to the CHANGELOG From df33fb1128934c0a89019d9cbe773d99e669c520 Mon Sep 17 00:00:00 2001 From: JB Date: Sat, 18 May 2024 10:47:50 +0100 Subject: [PATCH 2/8] - Added JSON export for formula making --- CHANGELOG.md | 2 ++ pages/makeFormula.php | 1 + pages/operations.php | 48 +++++++++++++++++++++++++++++++++++++++++++ releasenotes.md | 1 + 4 files changed, 52 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 63441573..eb2b4082 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # CHANGELOG ### Version 10.2 +- Added JSON export for formula making + ### Version 10.1 - Added export to JSON for perfume types - Added export to JSON for categories diff --git a/pages/makeFormula.php b/pages/makeFormula.php index f75beac3..81d8907f 100644 --- a/pages/makeFormula.php +++ b/pages/makeFormula.php @@ -108,6 +108,7 @@ +
  • Export as JSON
  • Export as CSV
  • Export as PDF
  • Print Formula
  • diff --git a/pages/operations.php b/pages/operations.php index 8c944fae..3295d89e 100644 --- a/pages/operations.php +++ b/pages/operations.php @@ -722,4 +722,52 @@ echo json_encode($result, JSON_PRETTY_PRINT); return; } + + + +//EXPORT MAKING FORMULA +if($_GET['action'] == 'exportMaking'){ + if(empty(mysqli_num_rows(mysqli_query($conn, "SELECT id FROM makeFormula")))){ + $msg['error'] = 'No data found to export.'; + echo json_encode($msg); + return; + } + $data = 0; + $q = mysqli_query($conn, "SELECT * FROM makeFormula"); + while($resData = mysqli_fetch_assoc($q)){ + + $r['id'] = (int)$resData['id']; + $r['fid'] = (string)$resData['fid']; + $r['name'] = (string)$resData['name']; + $r['ingredient'] = (string)$resData['ingredient']; + $r['ingredient_id'] = (int)$resData['ingredient_id']; + $r['replacement_id'] = (int)$resData['replacement_id']; + $r['concentration'] = (double)$resData['concentration']; + $r['dilutant'] = (string)$resData['dilutant']; + $r['quantity'] = (double)$resData['quantity']; + $r['overdose'] = (double)$resData['overdose']; + $r['originalQuantity'] = (double)$resData['originalQuantity']; + $r['notes'] = (string)$resData['notes']; + $r['skip'] = (int)$resData['skip']; + $r['toAdd'] = (int)$resData['toAdd']; + + $data++; + $dat_arr[] = $r; + } + + $vd['product'] = $product; + $vd['version'] = $ver; + $vd['makeFormula'] = $data; + $vd['timestamp'] = date('d/m/Y H:i:s'); + + + $result['makeFormula'] = $dat_arr; + $result['pvMeta'] = $vd; + + header('Content-disposition: attachment; filename=MakeFormula.json'); + header('Content-type: application/json'); + echo json_encode($result, JSON_PRETTY_PRINT); + return; +} + ?> diff --git a/releasenotes.md b/releasenotes.md index 196b4387..3cd85283 100755 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,4 @@ Whats New in v10.2 -------------------------- +- Added JSON export for formula making - For full details please refer to the CHANGELOG From d8d97e8097ce2643c78310eb9bf044e23615c298 Mon Sep 17 00:00:00 2001 From: JB Date: Sat, 18 May 2024 16:14:06 +0100 Subject: [PATCH 3/8] - Table allergens has been renamed to ingredient_compounds --- CHANGELOG.md | 1 + core/full_formula_data.php | 4 ++-- core/list_ing_compos_data.php | 2 +- db/pvault.sql | 6 +++--- db/updates/update_10.1-10.2.sql | 1 + func/calcPerc.php | 2 +- func/genBatchPDF.php | 4 ++-- pages/export.php | 4 ++-- pages/manageFormula.php | 4 ++-- pages/operations.php | 2 +- pages/update_data.php | 16 ++++++++-------- pages/upload.php | 4 ++-- pages/views/IFRA/genIFRAdoc.php | 2 +- pages/views/ingredients/whereUsed.php | 2 +- 14 files changed, 28 insertions(+), 26 deletions(-) create mode 100644 db/updates/update_10.1-10.2.sql diff --git a/CHANGELOG.md b/CHANGELOG.md index eb2b4082..0cabd2f6 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # CHANGELOG ### Version 10.2 - Added JSON export for formula making +- Table allergens has been renamed to ingredient_compounds ### Version 10.1 - Added export to JSON for perfume types diff --git a/core/full_formula_data.php b/core/full_formula_data.php index 67929bbd..d7adf5c3 100644 --- a/core/full_formula_data.php +++ b/core/full_formula_data.php @@ -125,7 +125,7 @@ $replacement[] = $replacements; } - $totalcontainsOthers = mysqli_num_rows(mysqli_query($conn, "SELECT name,percentage,cas FROM allergens WHERE ing = '".$formula['ingredient']."'")); + $totalcontainsOthers = mysqli_num_rows(mysqli_query($conn, "SELECT name,percentage,cas FROM ingredient_compounds WHERE ing = '".$formula['ingredient']."'")); $inventory = mysqli_fetch_array(mysqli_query($conn, "SELECT stock,mUnit,batch,purchased FROM suppliers WHERE ingID = '".$ing_q['id']."' AND preferred = '1'")); @@ -134,7 +134,7 @@ $conc_final = $formula['concentration'] / 100 * $formula['quantity']/$mg['total_mg'] * $meta['finalType']; if($settings['multi_dim_perc'] == '1'){ - $compos = mysqli_query($conn, "SELECT name,percentage,cas FROM allergens WHERE ing = '".$formula['ingredient']."'"); + $compos = mysqli_query($conn, "SELECT name,percentage,cas FROM ingredient_compounds WHERE ing = '".$formula['ingredient']."'"); while($compo = mysqli_fetch_array($compos)){ $cmp[] = $compo; diff --git a/core/list_ing_compos_data.php b/core/list_ing_compos_data.php index eff991a6..578c0cd9 100644 --- a/core/list_ing_compos_data.php +++ b/core/list_ing_compos_data.php @@ -6,7 +6,7 @@ $ingID = base64_decode($_GET["id"]); -$q = mysqli_query($conn, "SELECT id,ing,name,cas,ec,percentage,toDeclare FROM allergens WHERE ing = '$ingID'"); +$q = mysqli_query($conn, "SELECT id,ing,name,cas,ec,percentage,toDeclare FROM ingredient_compounds WHERE ing = '$ingID'"); while($res = mysqli_fetch_array($q)){ $compos[] = $res; } diff --git a/db/pvault.sql b/db/pvault.sql index 288b6b68..fd20febc 100755 --- a/db/pvault.sql +++ b/db/pvault.sql @@ -1,6 +1,6 @@ SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -CREATE TABLE `allergens` ( +CREATE TABLE `ingredient_compounds` ( `id` int(11) NOT NULL, `ing` varchar(255) COLLATE utf8_general_ci NOT NULL, `name` varchar(255) COLLATE utf8_general_ci NOT NULL, @@ -446,7 +446,7 @@ ALTER TABLE `users` ADD PRIMARY KEY (`id`); -ALTER TABLE `allergens` +ALTER TABLE `ingredient_compounds` ADD PRIMARY KEY (`id`); ALTER TABLE `bottles` @@ -491,7 +491,7 @@ ALTER TABLE `settings` ALTER TABLE `users` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; -ALTER TABLE `allergens` +ALTER TABLE `ingredient_compounds` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; CREATE TABLE `documents` ( diff --git a/db/updates/update_10.1-10.2.sql b/db/updates/update_10.1-10.2.sql new file mode 100644 index 00000000..4cbf348f --- /dev/null +++ b/db/updates/update_10.1-10.2.sql @@ -0,0 +1 @@ +RENAME TABLE `allergens` TO `ingredient_compounds`; diff --git a/func/calcPerc.php b/func/calcPerc.php index a4da3dd0..5beeaed9 100755 --- a/func/calcPerc.php +++ b/func/calcPerc.php @@ -35,7 +35,7 @@ function multi_dim_search($array, $key, $value){ function multi_dim_perc($conn, $form, $ingCas, $qStep) { foreach ($form as $formula){ - if($compos = mysqli_query($conn, "SELECT name,percentage,cas FROM allergens WHERE ing = '".$formula['ingredient']."'")){ + if($compos = mysqli_query($conn, "SELECT name,percentage,cas FROM ingredient_compounds WHERE ing = '".$formula['ingredient']."'")){ while($compo = mysqli_fetch_array($compos)){ $cmp[] = $compo; diff --git a/func/genBatchPDF.php b/func/genBatchPDF.php index d282af8f..bcac7f05 100644 --- a/func/genBatchPDF.php +++ b/func/genBatchPDF.php @@ -128,7 +128,7 @@ function Code39($xpos, $ypos, $code, $baseline=0.5, $height=5){ $fq = mysqli_query($conn, "SELECT ingredient FROM $formulaTable WHERE fid = '$fid'"); while($ing = mysqli_fetch_array($fq)){ $getIngAlergen = mysqli_fetch_array(mysqli_query($conn, "SELECT name FROM ingredients WHERE name = '".$ing['ingredient']."' AND allergen = '1'")); - $qAll = mysqli_query($conn, "SELECT name FROM allergens WHERE ing = '".$ing['ingredient']."'"); + $qAll = mysqli_query($conn, "SELECT name FROM ingredient_compounds WHERE ing = '".$ing['ingredient']."'"); while($getAllergen = mysqli_fetch_array($qAll)){ $allergen[] = $getAllergen['name']; @@ -217,7 +217,7 @@ function Code39($xpos, $ypos, $code, $baseline=0.5, $height=5){ } while ($res_all_ing = mysqli_fetch_array($qAllIng)) { - $bldQ = mysqli_query($conn, "SELECT ing,name,cas,percentage FROM allergens WHERE ing = '".$res_all_ing['ingredient']."'"); + $bldQ = mysqli_query($conn, "SELECT ing,name,cas,percentage FROM ingredient_compounds WHERE ing = '".$res_all_ing['ingredient']."'"); while($bld = mysqli_fetch_array($bldQ)){ $pdf->Ln(); $pdf->SetFont('Arial','',8); diff --git a/pages/export.php b/pages/export.php index 45d9c4a3..b2007308 100644 --- a/pages/export.php +++ b/pages/export.php @@ -315,7 +315,7 @@ $ing[] = $r; } - $q = mysqli_query($conn, "SELECT * FROM allergens"); + $q = mysqli_query($conn, "SELECT * FROM ingredient_compounds"); while($res = mysqli_fetch_assoc($q)){ $c['id'] = (string)$res['id']; @@ -462,7 +462,7 @@ $ing[] = $r; } - $q = mysqli_query($conn, "SELECT * FROM allergens WHERE ing ='".$ing['0']['name']."'"); + $q = mysqli_query($conn, "SELECT * FROM ingredient_compounds WHERE ing ='".$ing['0']['name']."'"); while($res = mysqli_fetch_assoc($q)){ $c['id'] = (int)$res['id']; diff --git a/pages/manageFormula.php b/pages/manageFormula.php index 7e3f7fdc..d82f26a2 100644 --- a/pages/manageFormula.php +++ b/pages/manageFormula.php @@ -363,7 +363,7 @@ $conc = number_format($formula['quantity']/100 * 100, $settings['qStep']); $conc_p = number_format($formula['concentration'] / 100 * $conc, $settings['qStep']); - mysqli_query($conn, "INSERT INTO allergens (ing, name, cas, percentage) VALUES ('$name','".$formula['ingredient']."','".$ing_data['cas']."','".$conc_p."')"); + mysqli_query($conn, "INSERT INTO ingredient_compounds (ing, name, cas, percentage) VALUES ('$name','".$formula['ingredient']."','".$ing_data['cas']."','".$conc_p."')"); } if(mysqli_query($conn, "INSERT INTO ingredients (name, type, cas, notes) VALUES ('$name','Base','Mixture','Converted from formula $fname')")){ @@ -734,7 +734,7 @@ while($ing = mysqli_fetch_array($qIng)){ $chName = mysqli_fetch_array(mysqli_query($conn, "SELECT chemical_name,name FROM ingredients WHERE name = '".$ing['ingredient']."' AND allergen = '1'")); - if($qCMP = mysqli_query($conn, "SELECT name FROM allergens WHERE ing = '".$ing['ingredient']."' AND toDeclare = '1'")){ + if($qCMP = mysqli_query($conn, "SELECT name FROM ingredient_compounds WHERE ing = '".$ing['ingredient']."' AND toDeclare = '1'")){ while($cmp = mysqli_fetch_array($qCMP)){ $allergen[] = $cmp['name']; } diff --git a/pages/operations.php b/pages/operations.php index 3295d89e..4cc6ad79 100644 --- a/pages/operations.php +++ b/pages/operations.php @@ -389,7 +389,7 @@ */ foreach ($data['compositions'] as $cmp) { // Prepare the statement - $stmt = mysqli_prepare($conn, "INSERT IGNORE INTO `allergens` (`ing`,`name`,`cas`,`ec`,`percentage`,`toDeclare`,`created`) VALUES (?, ?, ?, ?, ?, ?, current_timestamp())"); + $stmt = mysqli_prepare($conn, "INSERT IGNORE INTO `ingredient_compounds` (`ing`,`name`,`cas`,`ec`,`percentage`,`toDeclare`,`created`) VALUES (?, ?, ?, ?, ?, ?, current_timestamp())"); // Bind parameters mysqli_stmt_bind_param($stmt, "ssssss", $cmp['ing'], $cmp['name'], $cmp['cas'], $cmp['ec'], $cmp['percentage'], $cmp['toDeclare']); // Execute the statement diff --git a/pages/update_data.php b/pages/update_data.php index 5bece716..7298b83c 100755 --- a/pages/update_data.php +++ b/pages/update_data.php @@ -100,7 +100,7 @@ mysqli_query($conn, "TRUNCATE formulasMetaData"); mysqli_query($conn, "TRUNCATE formula_history"); mysqli_query($conn, "TRUNCATE formulasTags"); - mysqli_query($conn, "TRUNCATE allergens"); + mysqli_query($conn, "TRUNCATE ingredient_compounds"); mysqli_query($conn, "TRUNCATE formulaCategories"); mysqli_query($conn, "TRUNCATE formulasRevisions"); mysqli_query($conn, "TRUNCATE makeFormula"); @@ -1313,13 +1313,13 @@ function formatVal($num){ return; } - if(mysqli_num_rows(mysqli_query($conn, "SELECT name FROM allergens WHERE name = '$allgName' AND ing = '$ing'"))){ + if(mysqli_num_rows(mysqli_query($conn, "SELECT name FROM ingredient_compounds WHERE name = '$allgName' AND ing = '$ing'"))){ $response["error"] = 'Error: '.$allgName.' already exists!'; echo json_encode($response); return; } - if(mysqli_query($conn, "INSERT INTO allergens (name,cas,ec,percentage,toDeclare,ing) VALUES ('$allgName','$allgCAS','$allgEC','$allgPerc','$declare','$ing')")){ + if(mysqli_query($conn, "INSERT INTO ingredient_compounds (name,cas,ec,percentage,toDeclare,ing) VALUES ('$allgName','$allgCAS','$allgEC','$allgPerc','$declare','$ing')")){ $response["success"] = ''.$allgName.' added to the list'; echo json_encode($response); }else{ @@ -1343,7 +1343,7 @@ function formatVal($num){ $name = mysqli_real_escape_string($conn, $_POST['name']); $ing = base64_decode($_GET['ing']); - mysqli_query($conn, "UPDATE allergens SET $name = '$value' WHERE id = '$id' AND ing='$ing'"); + mysqli_query($conn, "UPDATE ingredient_compounds SET $name = '$value' WHERE id = '$id' AND ing='$ing'"); return; } @@ -1353,7 +1353,7 @@ function formatVal($num){ $id = mysqli_real_escape_string($conn, $_POST['allgID']); $ing = base64_decode($_POST['ing']); - $delQ = mysqli_query($conn, "DELETE FROM allergens WHERE id = '$id' AND ing='$ing'"); + $delQ = mysqli_query($conn, "DELETE FROM ingredient_compounds WHERE id = '$id' AND ing='$ing'"); if($delQ){ $response["success"] = ''.$ing.' removed!'; echo json_encode($response); @@ -1371,7 +1371,7 @@ function formatVal($num){ if(mysqli_num_rows(mysqli_query($conn, "SELECT ingredient FROM formulas WHERE ingredient = '".$ing['name']."'"))){ $response["error"] = ''.$ing['name'].' is in use by at least one formula and cannot be removed!'; }elseif(mysqli_query($conn, "DELETE FROM ingredients WHERE id = '$id'")){ - mysqli_query($conn,"DELETE FROM allergens WHERE ing = '".$ing['name']."'"); + mysqli_query($conn,"DELETE FROM ingredient_compounds WHERE ing = '".$ing['name']."'"); $response["success"] = 'Ingredient '.$ing['name'].' removed from the database!'; } @@ -1619,7 +1619,7 @@ function formatVal($num){ return; } - $sql.=mysqli_query($conn, "INSERT INTO allergens (ing,name,cas,percentage) SELECT '$new_ing_name',name,cas,percentage FROM allergens WHERE ing = '$old_ing_name'"); + $sql.=mysqli_query($conn, "INSERT INTO ingredient_compounds (ing,name,cas,percentage) SELECT '$new_ing_name',name,cas,percentage FROM ingredient_compounds WHERE ing = '$old_ing_name'"); $sql.=mysqli_query($conn, "INSERT INTO ingredients (name,INCI,type,strength,category,purity,cas,FEMA,reach,tenacity,chemical_name,formula,flash_point,appearance,notes,profile,solvent,odor,allergen,flavor_use,soluble,logp,cat1,cat2,cat3,cat4,cat5A,cat5B,cat5C,cat5D,cat6,cat7A,cat7B,cat8,cat9,cat10A,cat10B,cat11A,cat11B,cat12,impact_top,impact_heart,impact_base,created,usage_type,noUsageLimit,isPrivate,molecularWeight,physical_state) SELECT '$new_ing_name',INCI,type,strength,category,purity,cas,FEMA,reach,tenacity,chemical_name,formula,flash_point,appearance,notes,profile,solvent,odor,allergen,flavor_use,soluble,logp,cat1,cat2,cat3,cat4,cat5A,cat5B,cat5C,cat5D,cat6,cat7A,cat7B,cat8,cat9,cat10A,cat10B,cat11A,cat11B,cat12,impact_top,impact_heart,impact_base,created,usage_type,noUsageLimit,isPrivate,molecularWeight,physical_state FROM ingredients WHERE id = '$ing_id'"); @@ -1652,7 +1652,7 @@ function formatVal($num){ return; } - $sql.=mysqli_query($conn, "UPDATE allergens SET ing = '$new_ing_name' WHERE ing = '$old_ing_name'"); + $sql.=mysqli_query($conn, "UPDATE ingredient_compounds SET ing = '$new_ing_name' WHERE ing = '$old_ing_name'"); $sql.=mysqli_query($conn, "UPDATE ingredients SET name = '$new_ing_name' WHERE name = '$old_ing_name' AND id = '$ing_id'"); $sql.=mysqli_query($conn, "UPDATE formulas SET ingredient = '$new_ing_name' WHERE ingredient = '$old_ing_name' AND ingredient_id = '$ing_id'"); diff --git a/pages/upload.php b/pages/upload.php index 7f6118b7..bdcce061 100644 --- a/pages/upload.php +++ b/pages/upload.php @@ -310,8 +310,8 @@ if($_FILES['CSVFile']['size'] > 0){ $file = fopen($filename, "r"); while (($data = fgetcsv($file, 10000, ",")) !== FALSE){ - if(!mysqli_num_rows(mysqli_query($conn, "SELECT name FROM allergens WHERE ing = '$ing' AND name = '".trim(ucwords($data['0']))."'"))){ - $r = mysqli_query($conn, "INSERT INTO allergens (ing, name, cas, ec, percentage) VALUES ('$ing','".trim(ucwords($data['0']))."', '".trim($data['1'])."', '".trim($data['2'])."', '".rtrim($data['3'],'%')."')"); + if(!mysqli_num_rows(mysqli_query($conn, "SELECT name FROM ingredient_compounds WHERE ing = '$ing' AND name = '".trim(ucwords($data['0']))."'"))){ + $r = mysqli_query($conn, "INSERT INTO ingredient_compounds (ing, name, cas, ec, percentage) VALUES ('$ing','".trim(ucwords($data['0']))."', '".trim($data['1'])."', '".trim($data['2'])."', '".rtrim($data['3'],'%')."')"); $i++; } } diff --git a/pages/views/IFRA/genIFRAdoc.php b/pages/views/IFRA/genIFRAdoc.php index 08fee118..267265f3 100644 --- a/pages/views/IFRA/genIFRAdoc.php +++ b/pages/views/IFRA/genIFRAdoc.php @@ -102,7 +102,7 @@ } } - if($qCMP = mysqli_query($conn, "SELECT allergens.ing, allergens.name, allergens.cas, allergens.percentage, IFRALibrary.risk, IFRALibrary.$defCatClass FROM allergens, IFRALibrary WHERE allergens.ing = '".$formula['ingredient']."' AND toDeclare = '1' AND IFRALibrary.name = allergens.name GROUP BY name ")){ + if($qCMP = mysqli_query($conn, "SELECT ingredient_compounds.ing, ingredient_compounds.name, ingredient_compounds.cas, ingredient_compounds.percentage, IFRALibrary.risk, IFRALibrary.$defCatClass FROM ingredient_compounds, IFRALibrary WHERE ingredient_compounds.ing = '".$formula['ingredient']."' AND toDeclare = '1' AND IFRALibrary.name = ingredient_compounds.name GROUP BY name ")){ while($cmp = mysqli_fetch_array($qCMP)){ $x .=' '.$cmp['name'].' diff --git a/pages/views/ingredients/whereUsed.php b/pages/views/ingredients/whereUsed.php index 54f80512..2129defa 100644 --- a/pages/views/ingredients/whereUsed.php +++ b/pages/views/ingredients/whereUsed.php @@ -9,7 +9,7 @@ while($used_res = mysqli_fetch_array($ingUsage)){ $used[] = $used_res; } -$ingUsageCmp = mysqli_query($conn,"SELECT ing,percentage FROM allergens WHERE name = '".$ingID."'"); +$ingUsageCmp = mysqli_query($conn,"SELECT ing,percentage FROM ingredient_compounds WHERE name = '".$ingID."'"); while($used_cmp = mysqli_fetch_array($ingUsageCmp)){ $usedCmp[] = $used_cmp; } From d2077e703ed9d6a9e3bec7597aec8a89691144a6 Mon Sep 17 00:00:00 2001 From: JB Date: Tue, 21 May 2024 19:46:19 +0100 Subject: [PATCH 4/8] - Fix user menu position --- pages/top.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/top.php b/pages/top.php index fcc3f8e9..5f5258e7 100755 --- a/pages/top.php +++ b/pages/top.php @@ -52,7 +52,7 @@
    -