diff --git a/api/v1/get/products_software.php b/api/v1/get/products_software.php index bce6ba1..6ee5b43 100644 --- a/api/v1/get/products_software.php +++ b/api/v1/get/products_software.php @@ -44,12 +44,16 @@ if(isset($get_content) && $get_content!=''){ 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] == 'rowid') { + //build up search + $clause .= ' AND ps.rowID = :'.$v[0]; + } elseif ($v[0] == 'search') { - //build up search - $clause .= ' AND productcode like :'.$v[0]; + //build up search + $clause .= ' AND p.productcode like :'.$v[0]; } else {//create clause - $clause .= ' AND '.$v[0].' = :'.$v[0]; + $clause .= ' AND '.$v[0].' = :'.$v[0]; } } if ($whereclause == '' && $clause !=''){ @@ -59,82 +63,138 @@ if(isset($get_content) && $get_content!=''){ } } -//ENSURE PRODUCTROWID IS SEND -if (isset($criterias['productrowid']) && $criterias['productrowid'] != ''){ - //CHECK IF ALLOWED TO CRUD VERSIONS - $sql = "SELECT * FROM products WHERE rowID = ? '.$whereclause.'"; - $stmt = $pdo->prepare($sql); - $stmt->execute([$criterias['productrowid']]); - $product_data = $stmt->fetch(); - $product_owner = ($product_data['rowID'])? 1 : 0; - - //IF PRODUCT IS OWNED THEN CRUD is ALLOWED - if ($product_owner === 1 ){ +//Define Query +if(isset($criterias['totals']) && $criterias['totals'] ==''){ +//Request for total rows +$sql = 'SELECT count(*) as count FROM products_software '.$whereclause.''; +} +elseif (isset($criterias['list']) && $criterias['list'] =='') { +//SQL for Paging +$sql = 'SELECT p.productcode, ps.* FROM products p JOIN products_software ps ON p.rowID = ps.productrowid '.$whereclause.''; +} +else { +//SQL for Paging +$sql = 'SELECT p.productcode, ps.* FROM products p JOIN products_software ps ON p.rowID = ps.productrowid '.$whereclause.''; +} - //Define Query - if(isset($criterias['totals']) && $criterias['totals'] ==''){ - //Request for total rows - $sql = 'SELECT count(*) as count FROM products_software '.$whereclause.''; - } - elseif (isset($criterias['list']) && $criterias['list'] =='') { - //SQL for Paging - $sql = 'SELECT * FROM products_software '.$whereclause.''; - } - else { - //SQL for Paging - $sql = 'SELECT * FROM products_software '.$whereclause.''; - } +$stmt = $pdo->prepare($sql); - $stmt = $pdo->prepare($sql); +//Bind to query +if (str_contains($whereclause, ':condition')){ + $stmt->bindValue('condition', $condition, PDO::PARAM_STR); +} - //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); - } - } +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); - } - //Encrypt results - $messages = generate_payload($messages); - - //Send results - echo $messages; } } + +//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); +} + +// IF PRODUCTCODE AND VERSION IS SEND ASSUME SOFTWARE REQUEST +if (!isset($criterias['productrowid']) && isset($criterias['productcode']) && $criterias['productcode'] != '' && isset($criterias['version'])){ + + //CHECK IF VERSION IS LATEST + $latest_check = 0; + foreach ($messages as $message){ + if ($message['latest'] == 1){ + $output = array( + "productcode" => $message['productcode'], + "version"=> $message['version'], + "mandatory"=> $message['mandatory'], + "latest"=> $message['latest'], + "software"=> $message['software'], + "source" => "", + "source_type" => "" + ); + $latest_check = 1; + } + } + + if ($latest_check == 0){ + //GET LATEST BASED ON PRODUCTCODE + $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){ + + //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 + ); + } + } + } + + $messages = $output; +} + +//Encrypt results +$messages = generate_payload($messages); + +//Send results +echo $messages; + ?> \ No newline at end of file diff --git a/api/v1/post/products_software.php b/api/v1/post/products_software.php index d5d1e1f..a1721d3 100644 --- a/api/v1/post/products_software.php +++ b/api/v1/post/products_software.php @@ -53,6 +53,7 @@ if (isset($post_content['productrowid']) && $post_content['productrowid'] != '') $input_insert = ''; if ($command == 'insert'){ + $post_content['latest'] = 1; //New software is always latest $post_content['created'] = $date; $post_content['createdby'] = $username; } @@ -86,9 +87,17 @@ if (isset($post_content['productrowid']) && $post_content['productrowid'] != '') $stmt->execute($execute_input); } 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']]); + + //INSERT NEW ITEM $sql = 'INSERT INTO products_software ('.$clause_insert.') VALUES ('.$input_insert.')'; $stmt = $pdo->prepare($sql); $stmt->execute($execute_input); + } elseif ($command == 'delete' && isAllowed('products_software',$profile,$permission,'D') === 1){ $stmt = $pdo->prepare('DELETE FROM products_software WHERE rowID = ? '.$whereclause.''); diff --git a/api/v2/get/products_software.php b/api/v2/get/products_software.php index 391c389..9cf3a5c 100644 --- a/api/v2/get/products_software.php +++ b/api/v2/get/products_software.php @@ -1,10 +1,36 @@ 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 p.accounthierarchy like "'.$condition.'"'; + break; +} + //NEW ARRAY $criterias = []; $clause = ''; @@ -18,57 +44,161 @@ if(isset($get_content) && $get_content!=''){ $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] == 'rowid') { + //build up search + $clause .= ' AND ps.rowID = :'.$v[0]; + } + elseif ($v[0] == 'search') { + //build up search + $clause .= ' AND p.productcode like :'.$v[0]; + } + else {//create clause + $clause .= ' AND '.$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_software '.$whereclause.''; +} +elseif (isset($criterias['list']) && $criterias['list'] =='') { + //SQL for Paging + $sql = 'SELECT p.productcode, ps.* FROM products p JOIN products_software ps ON p.rowID = ps.productrowid '.$whereclause.''; +} +else { + //SQL for Paging + $sql = 'SELECT p.productcode, ps.* FROM products p JOIN products_software ps ON p.rowID = ps.productrowid '.$whereclause.''; } -//check if productcode and product_version are send -if (isset($criterias['productcode']) && $criterias['productcode'] != '' && isset($criterias['version'])){ +$stmt = $pdo->prepare($sql); - //Connect to DB - $pdo = dbConnect($dbname); +//Bind to query +if (str_contains($whereclause, ':condition')){ + $stmt->bindValue('condition', $condition, PDO::PARAM_STR); +} - //SQL for Paging - $sql = 'SELECT * FROM products_software pv JOIN products p ON pv.productrowid = p.rowID WHERE p.productcode = ? AND pv.version = ? AND pv.status = "1"'; - $stmt = $pdo->prepare($sql); - //Excute Query - $stmt->execute([$criterias['productcode'],$criterias['version']]); - //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); - } - else { - //PROVIDE URL TO FILE - $file_contents = 'https://'.$_SERVER['SERVER_NAME'].'/firmware'.'/'.$message['software']; +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); } - - $output = array("hw_version"=> $message['version'], "HEX_FW"=> $message['software'], "Firmware" => $file_contents); - - //------------------------------------------ - //JSON_ENCODE - //------------------------------------------ - $output = json_encode($output, JSON_UNESCAPED_UNICODE); - - //Send results - echo $output; } } } + +//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 { - http_response_code(404); + //$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); } +// IF PRODUCTCODE AND VERSION IS SEND ASSUME SOFTWARE REQUEST +if (!isset($criterias['productrowid']) && isset($criterias['productcode']) && $criterias['productcode'] != '' && isset($criterias['version'])){ + + //CHECK IF VERSION IS LATEST + $latest_check = 0; + foreach ($messages as $message){ + if ($message['latest'] == 1){ + $output = array( + "productcode" => $message['productcode'], + "version"=> $message['version'], + "mandatory"=> $message['mandatory'], + "latest"=> $message['latest'], + "software"=> $message['software'], + "source" => "", + "source_type" => "" + ); + $latest_check = 1; + } + } + + if ($latest_check == 0){ + //GET LATEST BASED ON PRODUCTCODE + $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){ + + //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 + ); + } + } + } + + $messages = $output; +} + + +//Encrypt results +$messages = json_encode($messages, JSON_UNESCAPED_UNICODE); + +//Send results +echo $messages; + ?> \ No newline at end of file diff --git a/api/v2/post/products_software.php b/api/v2/post/products_software.php index 3617012..08262af 100644 --- a/api/v2/post/products_software.php +++ b/api/v2/post/products_software.php @@ -53,6 +53,7 @@ if (isset($post_content['productrowid']) && $post_content['productrowid'] != '') $input_insert = ''; if ($command == 'insert'){ + $post_content['latest'] = 1; //New software is always latest $post_content['created'] = $date; $post_content['createdby'] = $username; } @@ -86,6 +87,13 @@ if (isset($post_content['productrowid']) && $post_content['productrowid'] != '') $stmt->execute($execute_input); } 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']]); + + //INSERT NEW ITEM $sql = 'INSERT INTO products_software ('.$clause_insert.') VALUES ('.$input_insert.')'; $stmt = $pdo->prepare($sql); $stmt->execute($execute_input); diff --git a/product.php b/product.php index af5770b..065cc86 100644 --- a/product.php +++ b/product.php @@ -48,7 +48,7 @@ $product_versions = ioServer($api_url,''); //Decode Payload if (!empty($product_versions)){$product_versions = decode_payload($product_versions);}else{$product_versions = null;} -//CALL TO API FOR Product_versions +//CALL TO API FOR Product_software $api_url = '/v1/products_software/productrowid='.$_GET['rowID']; $product_software = ioServer($api_url,''); //Decode Payload @@ -199,7 +199,7 @@ $view .= ' $view .= '