From adf2ff2b2458dc79fa79539f4fd3c87f7ea2087c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CVeLiTi=E2=80=9D?= <“info@veliti.nl”> Date: Fri, 22 Nov 2024 11:05:17 +0100 Subject: [PATCH] CMXX - Update products_software to include versions --- api/v1/get/equipments.php | 8 +- api/v1/get/products_software.php | 160 +++++++++++++--------------- api/v1/post/products_software.php | 15 +-- api/v2/get/equipments.php | 8 +- api/v2/get/products_software.php | 167 +++++++++++++----------------- api/v2/post/products_software.php | 11 +- assets/scripts.js | 2 +- product.php | 2 + products_software.php | 5 +- 9 files changed, 182 insertions(+), 196 deletions(-) diff --git a/api/v1/get/equipments.php b/api/v1/get/equipments.php index ad959dd..44f9836 100644 --- a/api/v1/get/equipments.php +++ b/api/v1/get/equipments.php @@ -11,7 +11,13 @@ $pdo = dbConnect($dbname); //------------------------------------------ //UPDATE SW_STATUS //------------------------------------------ -$sql = 'UPDATE equipment e JOIN products_software ps ON e.productrowid = ps.productrowid SET e.sw_version_latest = 1 WHERE ps.latest = 1 AND lower(e.sw_version) = lower(ps.version) AND e.sw_version_latest = 0'; +//UPDATE LATEST TO NO IN CASE HW_VERSION ARE EQUAL AND SW_VERSIONS NOT AND NOT LATEST +$sql = 'UPDATE equipment e JOIN products_software ps ON e.productrowid = ps.productrowid SET e.sw_version_latest = 0 WHERE ps.latest = 1 AND lower(e.sw_version) <> lower(ps.version) AND lower(e.hw_version) = lower(ps.hw_version) AND e.sw_version_latest = 1'; +$stmt = $pdo->prepare($sql); +$stmt->execute(); + +//UPDATE LATEST TO YES IN CASE HW_VERSION ARE EQUAL AND SW_VERSIONS ARE EQUAL +$sql = 'UPDATE equipment e JOIN products_software ps ON e.productrowid = ps.productrowid SET e.sw_version_latest = 1 WHERE ps.latest = 1 AND lower(e.sw_version) = lower(ps.version) AND lower(e.hw_version) = lower(ps.hw_version) AND e.sw_version_latest = 0'; $stmt = $pdo->prepare($sql); $stmt->execute(); //------------------------------------------ diff --git a/api/v1/get/products_software.php b/api/v1/get/products_software.php index 0ff424b..182188e 100644 --- a/api/v1/get/products_software.php +++ b/api/v1/get/products_software.php @@ -138,118 +138,100 @@ else { // IF PRODUCTCODE AND VERSION IS SEND ASSUME SOFTWARE REQUEST if (!isset($criterias['productrowid']) && isset($criterias['sn']) && $criterias['sn'] != '' ){ - //check if current version is send and update the equipment record - if(isset($criterias['version']) && $criterias['version'] !=''){ - $sql = 'UPDATE equipment SET sw_version = ? WHERE serialnumber = ? '; - $stmt = $pdo->prepare($sql); - $stmt->execute([$criterias['version'],$criterias['sn']]); - } - //default output $output = array( "productcode" => "", "version"=> "", + "hw_version"=> "", "mandatory"=> "", "latest"=> "", "software"=> "", "source" => "", "source_type" => "" ); - - //CHECK IF VERSION IS LATEST - $latest_check = 0; - $sw_upgrade_version = 0; - foreach ($messages as $message){ - if ($message['latest'] == 1 && ($message['sw_version_upgrade']== 0 || $message['sw_version_upgrade']== '')){ - - $file_contents = 'https://'.$_SERVER['SERVER_NAME'].'/firmware'.'/'.$message['software']; - - $output = array( - "productcode" => $message['productcode'], - "version"=> $message['version'], - "mandatory"=> $message['mandatory'], - "latest"=> $message['latest'], - "software"=> $message['software'], - "source" => $file_contents, - "source_type" => "url" - ); - - } - //Check if sw_version_upgrade is set - if ($message['sw_version_upgrade'] > 0){ - $sw_upgrade_version = $message['sw_version_upgrade']; - } + //check if current version is send and update the equipment record + if(isset($criterias['version']) && $criterias['version'] !=''){ + $sql = 'UPDATE equipment SET sw_version = ? WHERE serialnumber = ? '; + $stmt = $pdo->prepare($sql); + $stmt->execute([$criterias['version'],$criterias['sn']]); } - - //GET PRODUCTCODE BASED ON SN WHEN NO RECORDS FOUND - if (isset($criterias['sn']) && !isset($criterias['productcode'])){ - $sql = 'SELECT p.productcode, e.sw_version_upgrade FROM equipment e JOIN products p ON e.productrowid = p.rowID WHERE e.serialnumber = ?'; + + //GET PRODUCTCODE, SW_VERSION_UPGRADE, HW_VERSION from equipment SN + $sql = 'SELECT p.productcode, e.sw_version_upgrade, e.hw_version FROM equipment e JOIN products p ON e.productrowid = p.rowID WHERE e.serialnumber = ?'; $stmt = $pdo->prepare($sql); //Excute Query $stmt->execute([$criterias['sn']]); //Get results $productcodes = $stmt->fetchAll(PDO::FETCH_ASSOC); //assign serialnumber to productcode - $criterias['productcode'] = $productcodes[0]['productcode']; - $sw_upgrade_version = $productcodes[0]['sw_version_upgrade']; -} - - if ($latest_check == 0){ - //GET LATEST BASED ON PRODUCTCODE - if ($sw_upgrade_version > 0){ - //sw_version_upgrade set => change query - $sql = 'SELECT * FROM products_software ps JOIN products p ON ps.productrowid = p.rowID WHERE ps.rowID = ? AND ps.status = "1"'; - $stmt = $pdo->prepare($sql); - //Excute Query - $stmt->execute([$sw_upgrade_version]); - } - else { - //GET THE LATEST - $sql = 'SELECT * FROM products_software ps JOIN products p ON ps.productrowid = p.rowID WHERE p.productcode = ? AND ps.status = "1" AND ps.latest = "1"'; - $stmt = $pdo->prepare($sql); - //Excute Query - $stmt->execute([$criterias['productcode']]); + $criterias['productcode'] = $productcodes[0]['productcode']?? ''; + $sw_upgrade_version = $productcodes[0]['sw_version_upgrade'] ?? ''; + $hw_eq_version = $productcodes[0]['hw_version'] ?? ''; + + //GET LATEST BASED ON PRODUCTCODE + if ($sw_upgrade_version > 0){ + //sw_version_upgrade set => change query + $sql = 'SELECT * FROM products_software ps JOIN products p ON ps.productrowid = p.rowID WHERE ps.rowID = ? AND ps.status = "1"'; + $stmt = $pdo->prepare($sql); + //Excute Query + $stmt->execute([$sw_upgrade_version]); + } + else { + //GET THE LATEST + if (!empty($hw_eq_version) || $hw_eq_version != ''){ + $sql = 'SELECT * FROM products_software ps JOIN products p ON ps.productrowid = p.rowID WHERE p.productcode = ? AND ps.hw_version = ? AND ps.status = "1" AND ps.latest = "1"'; + $stmt = $pdo->prepare($sql); + //Excute Query + $stmt->execute([$criterias['productcode'],$hw_eq_version]); + } else { + $sql = 'SELECT * FROM products_software ps JOIN products p ON ps.productrowid = p.rowID WHERE p.productcode = ? AND ps.status = "1" AND ps.latest = "1"'; + $stmt = $pdo->prepare($sql); + //Excute Query + $stmt->execute([$criterias['productcode']]); } + } - //Get results - $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); - - foreach ($messages as $message){ + //Get results + $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); + + foreach ($messages as $message){ - //CHECK IF FIRMWARE FILE IS AVAILABLE - $software_file = dirname(__FILE__,4)."/firmware/".$message['software']; - $file = glob($software_file, GLOB_BRACE); - - if (!empty($file)){ - //GET FILE EXTENTION - $ext = strtolower(pathinfo($file[0], PATHINFO_EXTENSION)); - if ($ext == 'hex'){ - //GET SOURCE CODE - $file_contents = file_get_contents($software_file); - //REMOVE RETURN \R - $file_contents = str_replace("\r", '',$file_contents); - $source_type = 'HEX'; - } - else { - //PROVIDE URL TO FILE - $file_contents = 'https://'.$_SERVER['SERVER_NAME'].'/firmware'.'/'.$message['software']; - $source_type = 'url'; - } - // Default input product values - $output = array( - "productcode" => $message['productcode'], - "version"=> $message['version'], - "mandatory"=> $message['mandatory'], - "latest"=> $message['latest'], - "software"=> $message['software'], - "source" => $file_contents, - "source_type" => $source_type - ); + //CHECK IF FIRMWARE FILE IS AVAILABLE + $software_file = dirname(__FILE__,4)."/firmware/".$message['software']; + $file = glob($software_file, GLOB_BRACE); + + if (!empty($file)){ + //GET FILE EXTENTION + $ext = strtolower(pathinfo($file[0], PATHINFO_EXTENSION)); + if ($ext == 'hex'){ + //GET SOURCE CODE + $file_contents = file_get_contents($software_file); + //REMOVE RETURN \R + $file_contents = str_replace("\r", '',$file_contents); + $source_type = 'HEX'; + } + else { + //PROVIDE URL TO FILE + $file_contents = 'https://'.$_SERVER['SERVER_NAME'].'/firmware'.'/'.$message['software']; + $source_type = 'url'; } } - } - + + // Default input product values + $output = array( + "productcode" => $message['productcode'], + "version"=> $message['version'], + "hw_version"=> $message['hw_version'] ?? '', + "mandatory"=> $message['mandatory'], + "latest"=> $message['latest'], + "software"=> $message['software'], + "source" => $file_contents ?? '', + "source_type" => $source_type ?? '' + ); + + } + $messages = $output; } diff --git a/api/v1/post/products_software.php b/api/v1/post/products_software.php index 456e357..eb55093 100644 --- a/api/v1/post/products_software.php +++ b/api/v1/post/products_software.php @@ -87,14 +87,17 @@ if (isset($post_content['productrowid']) && $post_content['productrowid'] != '') $clause_insert = substr($clause_insert, 2); //Clean clause - remove first comma $input_insert = substr($input_insert, 1); //Clean clause - remove first comma + //SET HW VERSION + $hw_eq_version = (isset($criterias['hw_version']))? $criterias['hw_version']:''; + //QUERY AND VERIFY ALLOWED if ($command == 'update' && isAllowed('products_software',$profile,$permission,'U') === 1){ //REMOVE LATEST FLAG FROM OTHER WHEN SEND if ($criterias['latest'] == 1){ - $sql = 'UPDATE products_software SET latest = 0 WHERE productrowid = ?'; + $sql = 'UPDATE products_software SET latest = 0 WHERE productrowid = ? AND hw_version = ?'; $stmt = $pdo->prepare($sql); - $stmt->execute([$post_content['productrowid']]); + $stmt->execute([$post_content['productrowid'], $hw_eq_version ]); } $sql = 'UPDATE products_software SET '.$clause.' WHERE rowID = ? '.$whereclause.''; @@ -104,10 +107,10 @@ if (isset($post_content['productrowid']) && $post_content['productrowid'] != '') } elseif ($command == 'insert' && isAllowed('products_software',$profile,$permission,'C') === 1){ - //REMOVE LATEST FLAG FROM OTHER - $sql = 'UPDATE products_software SET latest = 0 WHERE productrowid = ?'; - $stmt = $pdo->prepare($sql); - $stmt->execute([$post_content['productrowid']]); + //REMOVE LATEST FLAG FROM OTHER + $sql = 'UPDATE products_software SET latest = 0 WHERE productrowid = ? AND hw_version = ?'; + $stmt = $pdo->prepare($sql); + $stmt->execute([$post_content['productrowid'], $hw_eq_version]); //INSERT NEW ITEM $sql = 'INSERT INTO products_software ('.$clause_insert.') VALUES ('.$input_insert.')'; diff --git a/api/v2/get/equipments.php b/api/v2/get/equipments.php index ca0e474..5846d37 100644 --- a/api/v2/get/equipments.php +++ b/api/v2/get/equipments.php @@ -11,7 +11,13 @@ $pdo = dbConnect($dbname); //------------------------------------------ //UPDATE SW_STATUS //------------------------------------------ -$sql = 'UPDATE equipment e JOIN products_software ps ON e.productrowid = ps.productrowid SET e.sw_version_latest = 1 WHERE ps.latest = 1 AND lower(e.sw_version) = lower(ps.version) AND e.sw_version_latest = 0'; +//UPDATE LATEST TO NO IN CASE HW_VERSION ARE EQUAL AND SW_VERSIONS NOT AND NOT LATEST +$sql = 'UPDATE equipment e JOIN products_software ps ON e.productrowid = ps.productrowid SET e.sw_version_latest = 0 WHERE ps.latest = 1 AND lower(e.sw_version) <> lower(ps.version) AND lower(e.hw_version) = lower(ps.hw_version) AND e.sw_version_latest = 1'; +$stmt = $pdo->prepare($sql); +$stmt->execute(); + +//UPDATE LATEST TO YES IN CASE HW_VERSION ARE EQUAL AND SW_VERSIONS ARE EQUAL +$sql = 'UPDATE equipment e JOIN products_software ps ON e.productrowid = ps.productrowid SET e.sw_version_latest = 1 WHERE ps.latest = 1 AND lower(e.sw_version) = lower(ps.version) AND lower(e.hw_version) = lower(ps.hw_version) AND e.sw_version_latest = 0'; $stmt = $pdo->prepare($sql); $stmt->execute(); //------------------------------------------ diff --git a/api/v2/get/products_software.php b/api/v2/get/products_software.php index a642e38..3a878b5 100644 --- a/api/v2/get/products_software.php +++ b/api/v2/get/products_software.php @@ -137,122 +137,103 @@ else { // IF PRODUCTCODE AND VERSION IS SEND ASSUME SOFTWARE REQUEST if (!isset($criterias['productrowid']) && isset($criterias['sn']) && $criterias['sn'] != '' ){ - //check if current version is send and update the equipment record - if(isset($criterias['version']) && $criterias['version'] !=''){ - $sql = 'UPDATE equipment SET sw_version = ? WHERE serialnumber = ? '; - $stmt = $pdo->prepare($sql); - $stmt->execute([$criterias['version'],$criterias['sn']]); - } - //default output $output = array( "productcode" => "", "version"=> "", + "hw_version"=> "", "mandatory"=> "", "latest"=> "", "software"=> "", "source" => "", "source_type" => "" ); - - //CHECK IF VERSION IS LATEST - $latest_check = 0; - $sw_upgrade_version = 0; - foreach ($messages as $message){ - if ($message['latest'] == 1 && ($message['sw_version_upgrade']== 0 || $message['sw_version_upgrade']== '')){ - - $file_contents = 'https://'.$_SERVER['SERVER_NAME'].'/firmware'.'/'.$message['software']; - - $output = array( - "productcode" => $message['productcode'], - "version"=> $message['version'], - "mandatory"=> $message['mandatory'], - "latest"=> $message['latest'], - "software"=> $message['software'], - "source" => $file_contents, - "source_type" => "url" - ); - - } - //Check if sw_version_upgrade is set - if ($message['sw_version_upgrade'] > 0){ - $sw_upgrade_version = $message['sw_version_upgrade']; - } + //check if current version is send and update the equipment record + if(isset($criterias['version']) && $criterias['version'] !=''){ + $sql = 'UPDATE equipment SET sw_version = ? WHERE serialnumber = ? '; + $stmt = $pdo->prepare($sql); + $stmt->execute([$criterias['version'],$criterias['sn']]); } - //GET PRODUCTCODE BASED ON SN WHEN NO RECORDS FOUND - if (isset($criterias['sn']) && !isset($criterias['productcode'])){ - $sql = 'SELECT p.productcode, e.sw_version_upgrade FROM equipment e JOIN products p ON e.productrowid = p.rowID WHERE e.serialnumber = ?'; + //GET PRODUCTCODE, SW_VERSION_UPGRADE, HW_VERSION from equipment SN + $sql = 'SELECT p.productcode, e.sw_version_upgrade, e.hw_version FROM equipment e JOIN products p ON e.productrowid = p.rowID WHERE e.serialnumber = ?'; + $stmt = $pdo->prepare($sql); + //Excute Query + $stmt->execute([$criterias['sn']]); + //Get results + $productcodes = $stmt->fetchAll(PDO::FETCH_ASSOC); + //assign serialnumber to productcode + $criterias['productcode'] = $productcodes[0]['productcode']?? ''; + $sw_upgrade_version = $productcodes[0]['sw_version_upgrade'] ?? ''; + $hw_eq_version = $productcodes[0]['hw_version'] ?? ''; + + //GET LATEST BASED ON PRODUCTCODE + if ($sw_upgrade_version > 0){ + //sw_version_upgrade set => change query + $sql = 'SELECT * FROM products_software ps JOIN products p ON ps.productrowid = p.rowID WHERE ps.rowID = ? AND ps.status = "1"'; $stmt = $pdo->prepare($sql); //Excute Query - $stmt->execute([$criterias['sn']]); - //Get results - $productcodes = $stmt->fetchAll(PDO::FETCH_ASSOC); - //assign serialnumber to productcode - $criterias['productcode'] = $productcodes[0]['productcode']; - $sw_upgrade_version = $productcodes[0]['sw_version_upgrade']; + $stmt->execute([$sw_upgrade_version]); + } + else { + //GET THE LATEST + if (!empty($hw_eq_version) || $hw_eq_version != ''){ + $sql = 'SELECT * FROM products_software ps JOIN products p ON ps.productrowid = p.rowID WHERE p.productcode = ? AND ps.hw_version = ? AND ps.status = "1" AND ps.latest = "1"'; + $stmt = $pdo->prepare($sql); + //Excute Query + $stmt->execute([$criterias['productcode'],$hw_eq_version]); + } else { + $sql = 'SELECT * FROM products_software ps JOIN products p ON ps.productrowid = p.rowID WHERE p.productcode = ? AND ps.status = "1" AND ps.latest = "1"'; + $stmt = $pdo->prepare($sql); + //Excute Query + $stmt->execute([$criterias['productcode']]); + } } - if ($latest_check == 0){ - //GET LATEST BASED ON PRODUCTCODE - if ($sw_upgrade_version > 0){ - //sw_version_upgrade set => change query - $sql = 'SELECT * FROM products_software ps JOIN products p ON ps.productrowid = p.rowID WHERE ps.rowID = ? AND ps.status = "1"'; - $stmt = $pdo->prepare($sql); - //Excute Query - $stmt->execute([$sw_upgrade_version]); - } - else { - //GET THE LATEST - $sql = 'SELECT * FROM products_software ps JOIN products p ON ps.productrowid = p.rowID WHERE p.productcode = ? AND ps.status = "1" AND ps.latest = "1"'; - $stmt = $pdo->prepare($sql); - //Excute Query - $stmt->execute([$criterias['productcode']]); - } + //Get results + $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); + + foreach ($messages as $message){ - //Get results - $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); - - foreach ($messages as $message){ - - //CHECK IF FIRMWARE FILE IS AVAILABLE - $software_file = dirname(__FILE__,4)."/firmware/".$message['software']; - $file = glob($software_file, GLOB_BRACE); - - if (!empty($file)){ - //GET FILE EXTENTION - $ext = strtolower(pathinfo($file[0], PATHINFO_EXTENSION)); - if ($ext == 'hex'){ - //GET SOURCE CODE - $file_contents = file_get_contents($software_file); - //REMOVE RETURN \R - $file_contents = str_replace("\r", '',$file_contents); - $source_type = 'HEX'; - } - else { - //PROVIDE URL TO FILE - $file_contents = 'https://'.$_SERVER['SERVER_NAME'].'/firmware'.'/'.$message['software']; - $source_type = 'url'; - } - // Default input product values - $output = array( - "productcode" => $message['productcode'], - "version"=> $message['version'], - "mandatory"=> $message['mandatory'], - "latest"=> $message['latest'], - "software"=> $message['software'], - "source" => $file_contents, - "source_type" => $source_type - ); + //CHECK IF FIRMWARE FILE IS AVAILABLE + $software_file = dirname(__FILE__,4)."/firmware/".$message['software']; + $file = glob($software_file, GLOB_BRACE); + + if (!empty($file)){ + //GET FILE EXTENTION + $ext = strtolower(pathinfo($file[0], PATHINFO_EXTENSION)); + if ($ext == 'hex'){ + //GET SOURCE CODE + $file_contents = file_get_contents($software_file); + //REMOVE RETURN \R + $file_contents = str_replace("\r", '',$file_contents); + $source_type = 'HEX'; + } + else { + //PROVIDE URL TO FILE + $file_contents = 'https://'.$_SERVER['SERVER_NAME'].'/firmware'.'/'.$message['software']; + $source_type = 'url'; } } - } - + + // Default input product values + $output = array( + "productcode" => $message['productcode'], + "version"=> $message['version'], + "hw_version"=> $message['hw_version'] ?? '', + "mandatory"=> $message['mandatory'], + "latest"=> $message['latest'], + "software"=> $message['software'], + "source" => $file_contents ?? '', + "source_type" => $source_type ?? '' + ); + + } + $messages = $output; } - //Encrypt results $messages = json_encode($messages, JSON_UNESCAPED_UNICODE); diff --git a/api/v2/post/products_software.php b/api/v2/post/products_software.php index d0ae31b..5559fc2 100644 --- a/api/v2/post/products_software.php +++ b/api/v2/post/products_software.php @@ -86,14 +86,17 @@ if (isset($post_content['productrowid']) && $post_content['productrowid'] != '') $clause_insert = substr($clause_insert, 2); //Clean clause - remove first comma $input_insert = substr($input_insert, 1); //Clean clause - remove first comma + //SET HW VERSION + $hw_eq_version = (isset($criterias['hw_version']))? $criterias['hw_version']:''; + //QUERY AND VERIFY ALLOWED if ($command == 'update' && isAllowed('products_software',$profile,$permission,'U') === 1){ //REMOVE LATEST FLAG FROM OTHER WHEN SEND if ($criterias['latest'] == 1){ - $sql = 'UPDATE products_software SET latest = 0 WHERE productrowid = ?'; + $sql = 'UPDATE products_software SET latest = 0 WHERE productrowid = ? AND hw_version = ?'; $stmt = $pdo->prepare($sql); - $stmt->execute([$post_content['productrowid']]); + $stmt->execute([$post_content['productrowid'], $hw_eq_version ]); } $sql = 'UPDATE products_software SET '.$clause.' WHERE rowID = ? '.$whereclause.''; @@ -104,9 +107,9 @@ if (isset($post_content['productrowid']) && $post_content['productrowid'] != '') elseif ($command == 'insert' && isAllowed('products_software',$profile,$permission,'C') === 1){ //REMOVE LATEST FLAG FROM OTHER - $sql = 'UPDATE products_software SET latest = 0 WHERE productrowid = ?'; + $sql = 'UPDATE products_software SET latest = 0 WHERE productrowid = ? AND hw_version = ?'; $stmt = $pdo->prepare($sql); - $stmt->execute([$post_content['productrowid']]); + $stmt->execute([$post_content['productrowid'], $hw_eq_version]); //INSERT NEW ITEM $sql = 'INSERT INTO products_software ('.$clause_insert.') VALUES ('.$input_insert.')'; diff --git a/assets/scripts.js b/assets/scripts.js index 3dc1758..bccccb5 100644 --- a/assets/scripts.js +++ b/assets/scripts.js @@ -168,7 +168,7 @@ function checkAvailableFirmware(){ hex_fw = firmwarelocation.split("/firmware/").pop(); console.log(hex_fw) - if (hex_fw == 'null.HEX' || hex_fw == '.HEX'){ + if (hex_fw == 'null' || hex_fw == ''){ //document.getElementById("updateAvailabe").style.display = "none"; progressBar("100", "No firmware found for this device", "#ff6666"); } diff --git a/product.php b/product.php index 065cc86..f18ddaf 100644 --- a/product.php +++ b/product.php @@ -211,6 +211,7 @@ $view .= '