From 073f816dbde37280944a0f0dfabbfdc34555d260 Mon Sep 17 00:00:00 2001 From: johnnyq Date: Fri, 14 Mar 2025 15:33:00 -0400 Subject: [PATCH] Do not allow cascade deletion for rack devices as this table is optional to reference an asset and will cause issues when adding a devoce without a selected asset --- ajax/ajax_contact_details.php | 2 +- database_updates.php | 12 -------- db.sql | 6 ++-- functions.php | 58 +++++++++++++---------------------- 4 files changed, 25 insertions(+), 53 deletions(-) diff --git a/ajax/ajax_contact_details.php b/ajax/ajax_contact_details.php index 0e422a40..98075a45 100644 --- a/ajax/ajax_contact_details.php +++ b/ajax/ajax_contact_details.php @@ -399,7 +399,7 @@ ob_start();
- +
diff --git a/database_updates.php b/database_updates.php index 5e3a70f2..0af309bb 100644 --- a/database_updates.php +++ b/database_updates.php @@ -2915,18 +2915,6 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { ADD FOREIGN KEY (`asset_id`) REFERENCES `assets`(`asset_id`) ON DELETE CASCADE "); - // Clean up orphaned unit_asset_id rows in rack_units - mysqli_query($mysqli, " - DELETE FROM `rack_units` - WHERE `unit_asset_id` NOT IN (SELECT `asset_id` FROM `assets`); - "); - - // Add foreign key to rack_units - mysqli_query($mysqli, " - ALTER TABLE `rack_units` - ADD FOREIGN KEY (`unit_asset_id`) REFERENCES `assets`(`asset_id`) ON DELETE CASCADE - "); - // Clean up orphaned service_id rows in service_assets mysqli_query($mysqli, " DELETE FROM `service_assets` diff --git a/db.sql b/db.sql index 707f46c0..8cb8951a 100644 --- a/db.sql +++ b/db.sql @@ -1351,9 +1351,7 @@ CREATE TABLE `rack_units` ( `unit_rack_id` int(11) NOT NULL, PRIMARY KEY (`unit_id`), KEY `unit_rack_id` (`unit_rack_id`), - KEY `unit_asset_id` (`unit_asset_id`), - CONSTRAINT `rack_units_ibfk_1` FOREIGN KEY (`unit_rack_id`) REFERENCES `racks` (`rack_id`) ON DELETE CASCADE, - CONSTRAINT `rack_units_ibfk_2` FOREIGN KEY (`unit_asset_id`) REFERENCES `assets` (`asset_id`) ON DELETE CASCADE + KEY `unit_asset_id` (`unit_asset_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -2428,4 +2426,4 @@ CREATE TABLE `vendors` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2025-03-13 21:33:12 +-- Dump completed on 2025-03-14 15:31:19 diff --git a/functions.php b/functions.php index dce9bb1f..c3566060 100644 --- a/functions.php +++ b/functions.php @@ -13,8 +13,7 @@ use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; // Function to generate both crypto & URL safe random strings -function randomString($length = 16) -{ +function randomString($length = 16) { // Generate some cryptographically safe random bytes // Generate a little more than requested as we'll lose some later converting $random_bytes = random_bytes($length + 5); @@ -31,8 +30,7 @@ function randomString($length = 16) } // Older keygen function - only used for TOTP currently -function key32gen() -{ +function key32gen() { $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $chars .= "234567"; while (1) { @@ -46,25 +44,23 @@ function key32gen() return $key; } -function nullable_htmlentities($unsanitizedInput) -{ +function nullable_htmlentities($unsanitizedInput) { //return htmlentities($unsanitizedInput ?? ''); return htmlspecialchars($unsanitizedInput ?? '', ENT_QUOTES, 'UTF-8'); } -function initials($str) -{ - if (!empty($str)) { - $ret = ''; - foreach (explode(' ', $str) as $word) - $ret .= strtoupper($word[0]); - $ret = substr($ret, 0, 2); - return $ret; +function initials($string) { + if (!empty($string)) { + $return = ''; + foreach (explode(' ', $string) as $word) { + $return .= mb_strtoupper($word[0], 'UTF-8'); // Use mb_strtoupper for UTF-8 support + } + $return = substr($return, 0, 2); + return $return; } } -function removeDirectory($path) -{ +function removeDirectory($path) { if (!file_exists($path)) { return; } @@ -76,13 +72,11 @@ function removeDirectory($path) rmdir($path); } -function getUserAgent() -{ +function getUserAgent() { return $_SERVER['HTTP_USER_AGENT']; } -function getIP() -{ +function getIP() { if (defined("CONST_GET_IP_METHOD")) { if (CONST_GET_IP_METHOD == "HTTP_X_FORWARDED_FOR") { $ip = getenv('HTTP_X_FORWARDED_FOR'); @@ -100,8 +94,7 @@ function getIP() return $ip; } -function getWebBrowser($user_browser) -{ +function getWebBrowser($user_browser) { $browser = "-"; $browser_array = array( '/msie/i' => " Internet Explorer", @@ -120,8 +113,7 @@ function getWebBrowser($user_browser) return $browser; } -function getOS($user_os) -{ +function getOS($user_os) { $os_platform = "-"; $os_array = array( '/windows/i' => " Windows", @@ -141,8 +133,7 @@ function getOS($user_os) return $os_platform; } -function getDevice() -{ +function getDevice() { $tablet_browser = 0; $mobile_browser = 0; if (preg_match('/(tablet|ipad|playbook)|(android(?!.*(mobi|opera mini)))/i', strtolower($_SERVER['HTTP_USER_AGENT']))) { @@ -189,8 +180,7 @@ function getDevice() } } -function truncate($text, $chars) -{ +function truncate($text, $chars) { if (strlen($text) <= $chars) { return $text; } @@ -203,8 +193,7 @@ function truncate($text, $chars) return $text . "..."; } -function formatPhoneNumber($phoneNumber) -{ +function formatPhoneNumber($phoneNumber) { global $mysqli; // Get Phone Mask Option @@ -240,8 +229,7 @@ function formatPhoneNumber($phoneNumber) return $phoneNumber; } -function mkdirMissing($dir) -{ +function mkdirMissing($dir) { if (!is_dir($dir)) { mkdir($dir); } @@ -249,8 +237,7 @@ function mkdirMissing($dir) // Called during initial setup // Encrypts the master key with the user's password -function setupFirstUserSpecificKey($user_password, $site_encryption_master_key) -{ +function setupFirstUserSpecificKey($user_password, $site_encryption_master_key) { $iv = randomString(); $salt = randomString(); @@ -268,8 +255,7 @@ function setupFirstUserSpecificKey($user_password, $site_encryption_master_key) * New Users: Requires the admin setting up their account have a Specific/Session key configured * Password Changes: Will use the current info in the session. */ -function encryptUserSpecificKey($user_password) -{ +function encryptUserSpecificKey($user_password) { $iv = randomString(); $salt = randomString();
Name