From 5ba0315a42bacf59bb65b3c58596207d8ab5968a Mon Sep 17 00:00:00 2001 From: johnnyq Date: Fri, 14 Jun 2024 17:22:16 -0400 Subject: [PATCH] Feature: You can add and remove linked devices and customer devices to the rack units --- client_racks.php | 70 ++++++++++++++++++++++++++++++++++++++++-------- post/rack.php | 30 +++++++++++++++------ 2 files changed, 81 insertions(+), 19 deletions(-) diff --git a/client_racks.php b/client_racks.php index c73e8dec..ddc91e7e 100644 --- a/client_racks.php +++ b/client_racks.php @@ -6,8 +6,7 @@ $order = "ASC"; require_once "inc_all_client.php"; - -//Rebuild URL +// Rebuild URL $url_query_strings_sort = http_build_query($get_copy); $sql = mysqli_query( @@ -17,7 +16,8 @@ $sql = mysqli_query( WHERE rack_client_id = $client_id AND rack_$archive_query AND (rack_name LIKE '%$q%' OR rack_type LIKE '%$q%' OR rack_units LIKE '%$q%') - ORDER BY $sort $order LIMIT $record_from, $record_to"); + ORDER BY $sort $order LIMIT $record_from, $record_to" +); $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); @@ -78,6 +78,13 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); $rack_location_name = nullable_htmlentities($row['location_name']); $rack_created_at = nullable_htmlentities($row['rack_created_at']); + // Fetch rack units + $unit_sql = mysqli_query($mysqli, "SELECT * FROM rack_units LEFT JOIN assets ON unit_asset_id = asset_id WHERE unit_rack_id = $rack_id ORDER BY unit_start_number ASC"); + $rack_units_data = []; + while ($unit_row = mysqli_fetch_assoc($unit_sql)) { + $rack_units_data[] = $unit_row; + } + ?>
@@ -100,11 +107,11 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); - + Archive - + Delete @@ -114,7 +121,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
-
+
rack_photo"> @@ -133,12 +140,52 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
Notes:
-
+
- = 1; $i--) { ?> - - - + = 1; $i--) { + $unit_devices = []; + foreach ($rack_units_data as $unit_data) { + if ($i >= $unit_data['unit_start_number'] && $i <= $unit_data['unit_end_number']) { + $unit_devices[] = [ + 'unit_id' => intval($unit_data['unit_id']), + 'device' => nullable_htmlentities($unit_data['unit_device']), + 'asset_id' => intval($unit_data['asset_id']), + 'asset_name' => nullable_htmlentities($unit_data['asset_name']), + 'asset_type' => nullable_htmlentities($unit_data['asset_type']), + 'icon' => getAssetIcon($unit_data['asset_type']) + ]; + } + } + ?> + + + + + + +
+ + + + + + + + + +
@@ -161,3 +208,4 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); require_once "client_rack_add_modal.php"; require_once "footer.php"; +?> diff --git a/post/rack.php b/post/rack.php index ddc09777..aa927551 100644 --- a/post/rack.php +++ b/post/rack.php @@ -180,17 +180,31 @@ if (isset($_POST['add_rack_unit'])) { $unit_end = intval($_POST['unit_end']); $asset = intval($_POST['asset']); - mysqli_query($mysqli,"INSERT INTO rack_units SET unit_device = '$name', unit_asset_id = $asset, unit_start_number = $unit_start, unit_end_number = $unit_end, unit_rack_id = $rack_id"); + // Check if the unit range is already occupied + $check_sql = mysqli_query($mysqli, "SELECT * FROM rack_units WHERE unit_rack_id = $rack_id AND + ((unit_start_number <= $unit_start AND unit_end_number >= $unit_start) OR + (unit_start_number <= $unit_end AND unit_end_number >= $unit_end) OR + ($unit_start <= unit_start_number AND $unit_end >= unit_start_number))"); + + if (mysqli_num_rows($check_sql) > 0) { + // If there is an overlap, return an error message + $_SESSION['alert_type'] = "error"; + $_SESSION['alert_message'] = "Units $unit_start to $unit_end are already in use by another device."; + header("Location: " . $_SERVER["HTTP_REFERER"]); + exit(); + } + + // If no overlap, proceed with the insertion + mysqli_query($mysqli, "INSERT INTO rack_units SET unit_device = '$name', unit_asset_id = $asset, unit_start_number = $unit_start, unit_end_number = $unit_end, unit_rack_id = $rack_id"); $unit_id = mysqli_insert_id($mysqli); - //Logging - mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'Rack Unit', log_action = 'Create', log_description = '$session_name added a unit the rack', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $rack_id"); + // Logging + mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Rack Unit', log_action = 'Create', log_description = '$session_name added a unit the rack', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $rack_id"); $_SESSION['alert_message'] = "Device Added to Unit $unit_start - $unit_end to rack"; header("Location: " . $_SERVER["HTTP_REFERER"]); - } if (isset($_POST['edit_rack_unit'])) { @@ -216,20 +230,20 @@ if (isset($_POST['edit_rack_unit'])) { } -if (isset($_GET['delete_rack_unit'])) { +if (isset($_GET['remove_rack_unit'])) { validateAdminRole(); - $unit_id = intval($_GET['delete_rack_unit']); + $unit_id = intval($_GET['remove_rack_unit']); // Get Name and Client ID for logging and alert message - $sql = mysqli_query($mysqli,"SELECT rack_name, rack_id, rack_client_id FROM racks LEFT JOIN rack_units ON unit_rack_id = rack_id WHERE rack_id = $rack_id"); + $sql = mysqli_query($mysqli,"SELECT rack_name, rack_id, rack_client_id FROM racks LEFT JOIN rack_units ON unit_rack_id = rack_id WHERE unit_id = $unit_id"); $row = mysqli_fetch_array($sql); $rack_name = sanitizeInput($row['rack_name']); $client_id = intval($row['rack_client_id']); $rack_id = intval($row['rack_id']); - mysqli_query($mysqli,"DELETE FROM rack_unit WHERE unit_id = $unit_id"); + mysqli_query($mysqli,"DELETE FROM rack_units WHERE unit_id = $unit_id"); //Logging mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'Rack Unit', log_action = 'Delete', log_description = '$session_name removed device from rack', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $rack_id");