From 9fc342071635d9fa2b07fefc1d963ceb9a7e6ac0 Mon Sep 17 00:00:00 2001 From: cproudlock Date: Wed, 10 Dec 2025 20:45:23 -0500 Subject: [PATCH] Remove unused and backup ASP files Cleanup: - 41 backup/broken files (.backup*, .broken, .bak) - 3 duplicate PC listing files (listpcs.asp, pclist.asp, pcs.asp) - 6 unused utility files: - aspJSON.asp (test stub) - printerlookup.asp (unused, had SQL injection) - bulkupdatenotificationtypes.asp - cleanupduplicateprintersexecute.asp - checkprintermachinescount.asp - checkduplicateprinters.asp - backup/ directory with old v2 design assets - Include backup files (.production, .produciton typo) Total: 69 files removed --- addlink_direct.asp.backup-20251027 | 215 --- addmachine.asp.backup | 1050 ----------- addmachine.asp.backup-refactor-20251027 | 815 -------- addsubnetbackend_direct.asp.backup-20251027 | 128 -- aspJSON.asp | 25 - backup/images/Thumbs.db | Bin 43520 -> 0 bytes backup/images/applications/Thumbs.db | Bin 12800 -> 0 bytes backup/images/machines/Thumbs.db | Bin 18944 -> 0 bytes backup/leaflet/images/Thumbs.db | Bin 3584 -> 0 bytes backup/v2-backup/assets/images/Thumbs.db | Bin 4608 -> 0 bytes backup/v2-backup/images/Thumbs.db | Bin 132608 -> 0 bytes .../v2-backup/images/applications/Thumbs.db | Bin 8704 -> 0 bytes backup/v2-backup/images/computers/Thumbs.db | Bin 31232 -> 0 bytes backup/v2-backup/images/machines/Thumbs.db | Bin 29696 -> 0 bytes backup/v2-backup/images/printers/Thumbs.db | Bin 110080 -> 0 bytes backup/v2-backup/leaflet/images/Thumbs.db | Bin 3584 -> 0 bytes .../assets/images/bg-themes/Thumbs.db | Bin 20992 -> 0 bytes backup/v2-bakcup-10-13-25/v2/images/Thumbs.db | Bin 191488 -> 0 bytes .../v2/images/applications/Thumbs.db | Bin 13312 -> 0 bytes bulkupdatenotificationtypes.asp | 261 --- check_all_warranties.asp.broken | 222 --- checkduplicateprinters.asp | 58 - checkprintermachinescount.asp | 42 - cleanupduplicateprintersexecute.asp | 98 - deviceswitch.asp.backup | 473 ----- displaymachine.asp.backup-20251027 | 1192 ------------ displaymachine.asp.backup2 | 1674 ----------------- displaymachine.asp.bak | 793 -------- displaypc.asp.backup-20251027 | 837 --------- displaypc.asp.broken | 1372 -------------- displayprinter.asp.backup-20251027 | 1127 ----------- displayprofile.asp.broken | 195 -- editapplication.asp.backup-20251027 | 187 -- editapplication_direct.asp.backup-20251027 | 221 --- editapplication_v2.asp.backup-20251027 | 96 - editdevice.asp.backup-20251114 | 335 ---- editmachine.asp.broken | 1136 ----------- editmacine.asp.backup-20251027 | 346 ---- editmacine.asp.backup-refactor-20251027 | 410 ---- editprinter.asp.backup-20251027 | 211 --- .../data_cache.asp.backup-20251113-064544 | 417 ---- includes/sql.asp.production | 8 - includes/wjf_employees-sql.asp.produciton | 8 - .../zabbix_cached.asp.backup-20251113-064547 | 130 -- listpcs.asp | 297 --- network_map.asp.backup-20251113-064542 | 443 ----- pc_edit.asp.broken | 1136 ----------- pclist.asp | 297 --- pcs.asp | 297 --- printerlookup.asp | 32 - save_network_device.asp.backup-20251027 | 448 ----- saveapplication_direct.asp.backup-20251027 | 248 --- savedevice_direct.asp.backup-20251027 | 55 - savemachine.asp.backup-refactor-20251027 | 180 -- savemachine_direct.asp.backup-20251027 | 409 ---- ...achine_direct.asp.backup-refactor-20251027 | 459 ----- savemodel.asp.backup-20251027 | 181 -- savemodel_direct.asp.backup-20251027 | 203 -- savenotification_direct.asp.backup-20251027 | 74 - saveprinter_direct.asp.backup-20251027 | 241 --- savevendor_direct.asp.backup-20251027 | 94 - tonerreport.asp.backup | 951 ---------- tonerreport.asp.broken | 951 ---------- updatedevice_direct.asp.backup-20251027 | 223 --- updatedevice_direct.asp.backup-20251114 | 230 --- updatelink_direct.asp.backup-20251027 | 227 --- updatenotification_direct.asp.backup-20251027 | 117 -- updatepc_direct.asp.backup-20251027 | 193 -- updatesubnet_direct.asp.backup-20251027 | 167 -- 69 files changed, 22235 deletions(-) delete mode 100644 addlink_direct.asp.backup-20251027 delete mode 100644 addmachine.asp.backup delete mode 100644 addmachine.asp.backup-refactor-20251027 delete mode 100644 addsubnetbackend_direct.asp.backup-20251027 delete mode 100644 aspJSON.asp delete mode 100644 backup/images/Thumbs.db delete mode 100644 backup/images/applications/Thumbs.db delete mode 100644 backup/images/machines/Thumbs.db delete mode 100644 backup/leaflet/images/Thumbs.db delete mode 100644 backup/v2-backup/assets/images/Thumbs.db delete mode 100644 backup/v2-backup/images/Thumbs.db delete mode 100644 backup/v2-backup/images/applications/Thumbs.db delete mode 100644 backup/v2-backup/images/computers/Thumbs.db delete mode 100644 backup/v2-backup/images/machines/Thumbs.db delete mode 100644 backup/v2-backup/images/printers/Thumbs.db delete mode 100644 backup/v2-backup/leaflet/images/Thumbs.db delete mode 100644 backup/v2-backup/template/assets/images/bg-themes/Thumbs.db delete mode 100644 backup/v2-bakcup-10-13-25/v2/images/Thumbs.db delete mode 100644 backup/v2-bakcup-10-13-25/v2/images/applications/Thumbs.db delete mode 100644 bulkupdatenotificationtypes.asp delete mode 100644 check_all_warranties.asp.broken delete mode 100644 checkduplicateprinters.asp delete mode 100644 checkprintermachinescount.asp delete mode 100644 cleanupduplicateprintersexecute.asp delete mode 100644 deviceswitch.asp.backup delete mode 100644 displaymachine.asp.backup-20251027 delete mode 100644 displaymachine.asp.backup2 delete mode 100644 displaymachine.asp.bak delete mode 100644 displaypc.asp.backup-20251027 delete mode 100644 displaypc.asp.broken delete mode 100644 displayprinter.asp.backup-20251027 delete mode 100644 displayprofile.asp.broken delete mode 100644 editapplication.asp.backup-20251027 delete mode 100644 editapplication_direct.asp.backup-20251027 delete mode 100644 editapplication_v2.asp.backup-20251027 delete mode 100644 editdevice.asp.backup-20251114 delete mode 100644 editmachine.asp.broken delete mode 100644 editmacine.asp.backup-20251027 delete mode 100644 editmacine.asp.backup-refactor-20251027 delete mode 100644 editprinter.asp.backup-20251027 delete mode 100644 includes/data_cache.asp.backup-20251113-064544 delete mode 100644 includes/sql.asp.production delete mode 100644 includes/wjf_employees-sql.asp.produciton delete mode 100644 includes/zabbix_cached.asp.backup-20251113-064547 delete mode 100644 listpcs.asp delete mode 100644 network_map.asp.backup-20251113-064542 delete mode 100644 pc_edit.asp.broken delete mode 100644 pclist.asp delete mode 100644 pcs.asp delete mode 100644 printerlookup.asp delete mode 100644 save_network_device.asp.backup-20251027 delete mode 100644 saveapplication_direct.asp.backup-20251027 delete mode 100644 savedevice_direct.asp.backup-20251027 delete mode 100644 savemachine.asp.backup-refactor-20251027 delete mode 100644 savemachine_direct.asp.backup-20251027 delete mode 100644 savemachine_direct.asp.backup-refactor-20251027 delete mode 100644 savemodel.asp.backup-20251027 delete mode 100644 savemodel_direct.asp.backup-20251027 delete mode 100644 savenotification_direct.asp.backup-20251027 delete mode 100644 saveprinter_direct.asp.backup-20251027 delete mode 100644 savevendor_direct.asp.backup-20251027 delete mode 100644 tonerreport.asp.backup delete mode 100644 tonerreport.asp.broken delete mode 100644 updatedevice_direct.asp.backup-20251027 delete mode 100644 updatedevice_direct.asp.backup-20251114 delete mode 100644 updatelink_direct.asp.backup-20251027 delete mode 100644 updatenotification_direct.asp.backup-20251027 delete mode 100644 updatepc_direct.asp.backup-20251027 delete mode 100644 updatesubnet_direct.asp.backup-20251027 diff --git a/addlink_direct.asp.backup-20251027 b/addlink_direct.asp.backup-20251027 deleted file mode 100644 index b510869..0000000 --- a/addlink_direct.asp.backup-20251027 +++ /dev/null @@ -1,215 +0,0 @@ - -<% -' Get form inputs for KB article -Dim linkurl, shortdescription, keywords, appid -linkurl = Trim(Request.Form("linkurl")) -shortdescription = Trim(Request.Form("shortdescription")) -keywords = Trim(Request.Form("keywords")) -appid = Trim(Request.Form("appid")) - -' Get form inputs for new topic -Dim newappname, newappdescription, newsupportteamid -Dim newapplicationnotes, newinstallpath, newdocumentationpath, newisactive -newappname = Trim(Request.Form("newappname")) -newappdescription = Trim(Request.Form("newappdescription")) -newsupportteamid = Trim(Request.Form("newsupportteamid")) -newapplicationnotes = Trim(Request.Form("newapplicationnotes")) -newinstallpath = Trim(Request.Form("newinstallpath")) -newdocumentationpath = Trim(Request.Form("newdocumentationpath")) -newisactive = Request.Form("newisactive") - -' Get form inputs for new support team -Dim newsupportteamname, newsupportteamurl, newappownerid -newsupportteamname = Trim(Request.Form("newsupportteamname")) -newsupportteamurl = Trim(Request.Form("newsupportteamurl")) -newappownerid = Trim(Request.Form("newappownerid")) - -' Get form inputs for new app owner -Dim newappownername, newappownersso -newappownername = Trim(Request.Form("newappownername")) -newappownersso = Trim(Request.Form("newappownersso")) - -' Basic validation for KB article -If Len(linkurl) = 0 Or Len(shortdescription) = 0 Or Len(appid) = 0 Then - Response.Write("Required fields missing") - objConn.Close - Response.End -End If - -If Len(linkurl) > 2000 Or Len(shortdescription) > 500 Or Len(keywords) > 500 Then - Response.Write("Field length exceeded") - objConn.Close - Response.End -End If - -' Handle new topic creation -If appid = "new" Then - If Len(newappname) = 0 Then - Response.Write("New topic name is required") - objConn.Close - Response.End - End If - - If Len(newsupportteamid) = 0 Then - Response.Write("Support team is required for new topic") - objConn.Close - Response.End - End If - - ' Validate field lengths for new topic - If Len(newappname) > 50 Or Len(newappdescription) > 255 Or Len(newapplicationnotes) > 512 Or Len(newinstallpath) > 255 Or Len(newdocumentationpath) > 512 Then - Response.Write("New topic field length exceeded") - objConn.Close - Response.End - End If - - ' Handle new support team creation (nested) - If newsupportteamid = "new" Then - If Len(newsupportteamname) = 0 Then - Response.Write("New support team name is required") - objConn.Close - Response.End - End If - - If Len(newappownerid) = 0 Then - Response.Write("App owner is required for new support team") - objConn.Close - Response.End - End If - - If Len(newsupportteamname) > 50 Or Len(newsupportteamurl) > 512 Then - Response.Write("New support team field length exceeded") - objConn.Close - Response.End - End If - - ' Handle new app owner creation (doubly nested) - If newappownerid = "new" Then - If Len(newappownername) = 0 Or Len(newappownersso) = 0 Then - Response.Write("App owner name and SSO are required") - objConn.Close - Response.End - End If - - If Len(newappownername) > 50 Or Len(newappownersso) > 255 Then - Response.Write("App owner field length exceeded") - objConn.Close - Response.End - End If - - ' Escape single quotes for new app owner - Dim escapedOwnerName, escapedOwnerSSO - escapedOwnerName = Replace(newappownername, "'", "''") - escapedOwnerSSO = Replace(newappownersso, "'", "''") - - ' Insert new app owner - Dim sqlNewOwner - sqlNewOwner = "INSERT INTO appowners (appowner, sso, isactive) " & _ - "VALUES ('" & escapedOwnerName & "', '" & escapedOwnerSSO & "', 1)" - - On Error Resume Next - objConn.Execute sqlNewOwner - - If Err.Number <> 0 Then - Response.Write("Error creating new app owner: " & Err.Description) - objConn.Close - Response.End - End If - - ' Get the newly created app owner ID - Dim rsNewOwner - Set rsNewOwner = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newappownerid = rsNewOwner("newid") - rsNewOwner.Close - Set rsNewOwner = Nothing - On Error Goto 0 - End If - - ' Escape single quotes for new support team - Dim escapedTeamName, escapedTeamURL - escapedTeamName = Replace(newsupportteamname, "'", "''") - escapedTeamURL = Replace(newsupportteamurl, "'", "''") - - ' Insert new support team with selected or newly created app owner - Dim sqlNewTeam - sqlNewTeam = "INSERT INTO supportteams (teamname, teamurl, appownerid, isactive) " & _ - "VALUES ('" & escapedTeamName & "', '" & escapedTeamURL & "', " & newappownerid & ", 1)" - - On Error Resume Next - objConn.Execute sqlNewTeam - - If Err.Number <> 0 Then - Response.Write("Error creating new support team: " & Err.Description) - objConn.Close - Response.End - End If - - ' Get the newly created support team ID - Dim rsNewTeam - Set rsNewTeam = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newsupportteamid = rsNewTeam("newid") - rsNewTeam.Close - Set rsNewTeam = Nothing - On Error Goto 0 - End If - - ' Escape single quotes for new topic - Dim escapedAppName, escapedAppDesc, escapedAppNotes, escapedInstallPath, escapedDocPath - escapedAppName = Replace(newappname, "'", "''") - escapedAppDesc = Replace(newappdescription, "'", "''") - escapedAppNotes = Replace(newapplicationnotes, "'", "''") - escapedInstallPath = Replace(newinstallpath, "'", "''") - escapedDocPath = Replace(newdocumentationpath, "'", "''") - - ' Convert isactive checkbox - Dim isActiveValue - If newisactive = "1" Then - isActiveValue = 1 - Else - isActiveValue = 0 - End If - - ' Insert new application/topic - Dim sqlNewApp - sqlNewApp = "INSERT INTO applications (appname, appdescription, supportteamid, applicationnotes, installpath, documentationpath, isactive, isinstallable, ishidden, isprinter, islicenced) " & _ - "VALUES ('" & escapedAppName & "', '" & escapedAppDesc & "', " & newsupportteamid & ", '" & escapedAppNotes & "', '" & escapedInstallPath & "', '" & escapedDocPath & "', " & isActiveValue & ", 0, 0, 0, 0)" - - On Error Resume Next - objConn.Execute sqlNewApp - - If Err.Number <> 0 Then - Response.Write("Error creating new topic: " & Err.Description) - objConn.Close - Response.End - End If - - ' Get the newly created topic ID - Dim rsNewApp - Set rsNewApp = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - appid = rsNewApp("newid") - rsNewApp.Close - Set rsNewApp = Nothing - On Error Goto 0 -End If - -' Escape single quotes for KB article -linkurl = Replace(linkurl, "'", "''") -shortdescription = Replace(shortdescription, "'", "''") -keywords = Replace(keywords, "'", "''") - -' Build INSERT statement for KB article -Dim strSQL -strSQL = "INSERT INTO knowledgebase (linkurl, shortdescription, keywords, appid, isactive, clicks) " & _ - "VALUES ('" & linkurl & "', '" & shortdescription & "', '" & keywords & "', " & appid & ", 1, 0)" - -On Error Resume Next -objConn.Execute strSQL - -If Err.Number = 0 Then - objConn.Close - Response.Redirect("displayknowledgebase.asp?status=added") -Else - objConn.Close - Response.Redirect("displayknowledgebase.asp?status=error&msg=" & Server.URLEncode("Error: " & Err.Description)) -End If -%> diff --git a/addmachine.asp.backup b/addmachine.asp.backup deleted file mode 100644 index 9bf35c4..0000000 --- a/addmachine.asp.backup +++ /dev/null @@ -1,1050 +0,0 @@ - - - - - - - - - -<% - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF -%> - - - -
- - -
- - - - -
- -
-
- -
-
-
-
-
-
- Add New Equipment -
- - Back to Machines - -
- -
- - - - - -
- - -
-
- - - Unique identifier for this machine -
- -
- -
- -
- -
-
-
- - - - -
- - - -
- -
- -
- -
- -
-
-
- - - - -
- - -
- -
- - -
- -
- - -
-
Network Communications
-

Configure network interfaces for this equipment. You can add up to 3 interfaces.

- - -
-
- Interface 1 (Primary) -
-
-
-
-
- - -
-
-
-
- - -
-
-
-
-
- - -
-
- Interface 2 (Optional) -
-
-
-
-
- - -
-
-
-
- - -
-
-
-
-
- - -
-
- Interface 3 (Optional) -
-
-
-
-
- - -
-
-
-
- - -
-
-
-
-
- -
- - -
-
Machine Relationships
-

Define relationships between this equipment and other machines or PCs.

- -
- - - PC that controls this equipment -
- -
- - - Redundant/backup machine for this equipment -
- -
- - -
-
Compliance & Security
-

Manage compliance requirements and third-party vendor information.

- -
- - -
- -
- - - Select the vendor managing this equipment -
- -
- - - Operational Technology system classification -
- -
- - - Department of Defense asset classification -
- -
- - -
-
Physical Location
-

Set the physical location of this equipment on the shop floor map.

- -
- -
- -
-
-
- -
- -
-
-
- -
- -
-
- -
- -
- - -
-
- - - Cancel - -
- - - -
-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- Select Machine Location - -
-
-
-
-
- Click on the map to select a location -
- - -
-
-
-
- - - - - -<% - objConn.Close -%> diff --git a/addmachine.asp.backup-refactor-20251027 b/addmachine.asp.backup-refactor-20251027 deleted file mode 100644 index f658be5..0000000 --- a/addmachine.asp.backup-refactor-20251027 +++ /dev/null @@ -1,815 +0,0 @@ - - - - - - - - - -<% - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF -%> - - - -
- - -
- - - - -
- -
-
- -
-
-
-
-
-
- Add Machine -
- - Back - -
- -
-
- - - Unique identifier for this machine -
- -
- -
- -
- -
-
-
- - - - -
- -
- -
- -
-
- What this machine does (e.g., CNC, Mill, Lathe) -
- - - - -
- -
- -
- -
-
-
- - - - -
- - -
- -
- - -
- -
- - - Scan the PC serial number to auto-select from dropdown below -
- -
- - - Or manually select a PC to link to this machine -
- -
- -
Location (Optional)
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
- -
- -
- - - Cancel - -
-
- -
-
-
-
- - - -
- - - - - -
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - -
-
-
- Select Machine Location - -
-
-
-
-
- Click on the map to select a location -
- - -
-
-
-
- - - - - -<% - objConn.Close -%> diff --git a/addsubnetbackend_direct.asp.backup-20251027 b/addsubnetbackend_direct.asp.backup-20251027 deleted file mode 100644 index 5d01860..0000000 --- a/addsubnetbackend_direct.asp.backup-20251027 +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -
-<% - ' Get form inputs - Dim vlan, ipstart, cidr, description, subnettypeid, cidrarray, ipend - - vlan = Trim(Request.Form("vlan")) - ipstart = Trim(Request.Form("ipstart")) - cidr = Trim(Request.Form("cidr")) - description = Trim(Request.Form("description")) - subnettypeid = Trim(Request.Form("subnettypeid")) - - ' Validate required fields - If vlan = "" Or ipstart = "" Or cidr = "" Or subnettypeid = "" Then - Response.Write("
Error: Required field missing.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Validate VLAN is numeric - If Not IsNumeric(vlan) Then - Response.Write("
Error: VLAN must be numeric.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Basic IP address validation - If Len(ipstart) < 7 Or Len(ipstart) > 15 Then - Response.Write("
Error: Invalid IP address.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Validate subnet type ID - If Not IsNumeric(subnettypeid) Or CLng(subnettypeid) < 1 Then - Response.Write("
Error: Invalid subnet type.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Parse CIDR value (expected format: "cidr,ipend") - If InStr(cidr, ",") = 0 Then - Response.Write("
Error: Invalid CIDR format.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - cidrarray = Split(cidr, ",") - If UBound(cidrarray) < 1 Then - Response.Write("
Error: Invalid CIDR format.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ipend = Trim(cidrarray(1)) - cidr = Trim(cidrarray(0)) - - ' Validate CIDR is numeric - If Not IsNumeric(cidr) Or CInt(cidr) < 0 Or CInt(cidr) > 32 Then - Response.Write("
Error: CIDR must be between 0 and 32.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Validate ipend is numeric - If Not IsNumeric(ipend) Then - Response.Write("
Error: Invalid IP end value.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Validate description length - If Len(description) > 500 Then - Response.Write("
Error: Description too long.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape quotes - description = Replace(description, "'", "''") - ipstart = Replace(ipstart, "'", "''") - - ' Verify subnet type exists - Dim checkSQL, rsCheck - checkSQL = "SELECT COUNT(*) as cnt FROM subnettypes WHERE subnettypeid = " & subnettypeid - Set rsCheck = objConn.Execute(checkSQL) - If rsCheck("cnt") = 0 Then - rsCheck.Close - Response.Write("
Error: Subnet type not found.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - rsCheck.Close - - ' Insert - ' Note: INET_ATON requires the IP address, ipend is added to the result - Dim strSQL - strSQL = "INSERT INTO subnets (vlan, description, cidr, ipstart, ipend, subnettypeid, isactive) " & _ - "VALUES (" & vlan & ", '" & description & "', " & cidr & ", INET_ATON('" & ipstart & "'), (INET_ATON('" & ipstart & "') + " & ipend & "), " & subnettypeid & ", 1)" - - On Error Resume Next - objConn.Execute strSQL - - If Err.Number = 0 Then - objConn.Close - Response.Redirect("./displaysubnets.asp") - Else - Response.Write("
Error: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - End If -%> diff --git a/aspJSON.asp b/aspJSON.asp deleted file mode 100644 index cffee69..0000000 --- a/aspJSON.asp +++ /dev/null @@ -1,25 +0,0 @@ - - - \ No newline at end of file diff --git a/backup/images/Thumbs.db b/backup/images/Thumbs.db deleted file mode 100644 index 215a96499c3945899483a0c8514b006bc818caec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43520 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 I{|m(b28mm6lK=n! diff --git a/backup/images/machines/Thumbs.db b/backup/images/machines/Thumbs.db deleted file mode 100644 index d40fb9eaa88cbf8ce040be266f199d49ff9a89b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18944 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 VfcOcbkQYXsN;Sr0E8 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 diff --git a/backup/v2-backup/images/Thumbs.db b/backup/v2-backup/images/Thumbs.db deleted file mode 100644 index b0cc2188da133ad03c4c45e2b06b8dc707ce4fdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132608 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 z 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 Xmo?JNnsa}$-hXk8fqMVY{}TTN(j1Rk diff --git a/backup/v2-backup/images/computers/Thumbs.db b/backup/v2-backup/images/computers/Thumbs.db deleted file mode 100644 index c447b468238654204ad4a54de7c7152dc7d423e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31232 zcmeFZcU%-r_AlH+8Zwe|20?PpQ6z~HRFXsi0hOHd5CkMA0a22GB1+CkmJAXE36gV; zLxy4IZJuYJefPJ&y}Qr7@BQQMeYfWG?e41XuIf5<>eQ)os%B`Ac>aAE%>wXuK@LC% zkSH7g>u=H_;Po|r3pW4&4ZOIHBT*>S?}-2aUj8Ti8&Tj2{8se8wBdC-VuIJ#Z4L#2 z4FU%QE(kmj_#g;C5P~2A0kQx<41xs2^}A%?nH&TK2ucuCAgDpmfS?6&{R};LW&ptm zf(ZmO2o?~mAlN`$KXV;8z-vwrw?J@#;0D11f)@lI2!0R(AOt}Ofe;2E0zwpo7zl9? z5+Ec&NP&vs6#IU%sc!~iqE8axVvE%+3$0Ne8k_!9-MM1M;W{;hTYc;mmGxd1fC-?rp` zz59=27+|vPH6w!IkMe~L@`aAydQ~x!U z6pV6TcOEeOQT`LK=3*d63xZ`|e}OPa5fL!unhMv{_#cJq^8b*-f3|!&Ftf(Ll>fK1 z`_J|N|0wVW|4D)zCk*o7@4ROL@}U^mBP>8J6atUelJy@4kpKSL|Nkui-2}55xfbgG zo5J6=+W)33|EIF~cP{^WjJ}rJ+MqndK+~YQD!oO39LvQ-O`zt18+TRIRR9PC@;f^a{4{;_s8o@AQ)I!_}KUq`1llL zgoK1-*9Stf-(MsCQ<<~?#MnRu1VD$d0BFPzbYcjq{aUAhV1i%!*AE8cXy_Q2SWs*n zTs-iBsvDrRL`O%%K*z+y03|lWAG{A>5Mz=s3o2rf>O6t6IFktlCA`OGy>B_tEX>Z_}J3wskM#mv*)gE z?jD|A-aa8OL&L&fMMNehy-rR^eUtV!CpYiI$NWzPpUW#MtEy{i>%M+#Ywzgn>h9?s z9{D*sHa_uda$#|4d1ZBNePigw(d+>!)YHj6{^$R=bA*UrWng2xMwcn3tgj%OZ-sG>YuNZr zk01xB?OKHEU+GQ`ZC&n-opKG9YYWvfMKd-?*nglBe2^w2hv1+zNsY~N(^L9k#dx+~ zEEb5%ne)#vwSOAUC)y*_ppcK>HC`;QgY>3K-Y_FnMQALefZ{F`p!gWrl@WYzxL$_6 zle)UwReIfL)qDOQ zWk1y!jcxMjC5xjv=xj$oGI1bvDTDls_D}B(byVlm#N3|A_x;5{yNd1?eNgIa^vZIT zC9t@ETG+4MB2d)w$1xyL7kFjvjshl&9uNo{YSoU#%6^YPq}&|~Z_mPW80M6l=y7*y zEh@Weq{@`J(bX6G3|Gt}nQQnKa1kuk&)7a!QU9z!^rXy}uKSK_chd8Zm6ey7YPt+da^g zR;AL|@C#z5-rToa<{Ktl6bvSGdhTn)AC$y(ZYq^Ubc)yaT-@W_bCO^}hK_WQ-nNv% z$H5)X`j_Y@fD^UI!efzKeT zMMcwuU;Wn>mKm?GEDhggmaTF=baZ(cFJ~KzrR7rp+TS(u#N$l(nTyAy*T`K9AFLWZ z`LmTt7+2)!iT6*AXr2JJ5gQj3w8s*AJD$u}1VDhB*N+g@XL0KCN6f|<9t^ToFK{d> zt?`E%4iY6Wa(B9+@q|K>qFqA}Wisu53e&XxHKgJ&Y}^$EWEXj7_&Bx&p#YK%`K@}` zI=2GDyZn>loUSUD3)u6GZC`E3Vr~ot>;mM#-Ucas7YF)~bLWOo!&k()_84z0x-ajv zyIjIQXE9T8sn&RvE-BZ7tg40h@{Mq`Hls90&j#C*RM>OMq2ZO2w@_)HJg#${ExHGJ z`t z)LkvVs}*<57>QpF)9#X*mC*g^?XgHTLCN4s#bQ5A8!R;L8mz7m`nt@CEQgF_s)N~} zx{H63(Pp}qWn&4xOob2gw6~^Qp)H+N7ozWr$)EMdnesW-s064^$*I8(^eR3-D~iiSt#fXvT1qjOPhrm(^be5JbE__3bU11 zxgZ$N{c;k^YGN8*c2~y4Zl&#G9Wry?z?7UVc`Vo^_*Jlnyob+IGtoG@iH_tV`kX<1 zMZG4@0d8^oPC^*d4ZK>-3{vm-q8!a|qUZg#iQW$w^l6Lt$^*>jJ66f#-aN8@>lrf% zm)wV|6|Cizk!31hO@@5BpZ-`mom1_N!;{7XxVnxa??mv}Q}J)N*Avv<0J6HSflozTgKMUa_pL$t@f@@x@LdPHHX+Oy!@T-upX+ znUlyx9kNoEme!OBWo%_qn{E}_x5OdUs%YwJHqNz)o>dwqlDSnL<)H!Nwy6naVRGad zsZS&pesa|@#L5zwpAp)`xKs0EESFDJ(B^zpG1ln2)6B!AziV{3(p6~{OyHJ!xI3~? z6UQ5xF8R6i4B@%RP@GSs-y4as+zGIuhL0&W*u{BzlPEnAP~ z!WrR&Nyz#dWN_80?nV|NY?+?p%2WOVcL@4%!lU?Y_ffHF`#$%Fa#>DD6Q7-J4dZbS z3P|=6bU$=h!W6o!$tmdL2fX2l7&sy>=Vo=$(5B)7n@ujqMgMyeZTI?(t}rlGgCYR6AuI*D(c&1d^K%7)WFB zzM6XX1cxHjufv;_Jz2P1Y1P;mjnG;)Gj<#<{Cd5%bpgcH*b$A?q2&7l{~N{T%~N8Z|wu_DXN|6);m0DTKQ5 zvD8^7V@a*bA-ITArBj}tbc_<8tnJ@>%_dtjmgglLSe4yg;_$X*wnsqesu1TKmWYEe zAtwu+>cR^3uRGKqg+vU~*tBMo;jhts#c7!b@#w7R62B`dTUyU-vCT0e*#+_f9;BH)al6zpoRz<+`1M&_AHm0I2sYQ^4Rn{@ zV=v zqOZ+SFec7z@q^6T?}21f8;DrF(PUevosaJHfPEUW6?}V*j)YPc)0qs=QU2%9|L7-) z0^;4Wj%S*W$V-GvG|t?d^Fi)3i9-fgLN>%Wf=t+xoVeeVi4Og$0#uhMQ9y*q+;RUk z{~GNcvb)fR`9~YQpU+|ujDdSv%<=C#sc}sCS)qUfj#Ok_GrR=P{)@;olP3>UGNJ4j z5z7stgM`Exp*jHl0q0!5V5N(B{P36itxrl~Tg6x=q~SBf%EARbVU6s~`7djDrbMxh3u#u_IUJqdG+ zC}bGJ)?8EU980Tc9;c6tkU__XwYk!ZA-nGc!z0Mk?F(&M$8D>0F}GITkeR^ z#)e?^780(`MRG1$%b1jtvp$Xb5En0@m2%wR!4y@4U7feu5v9H5KzBM5)~+t~S2imi zTe(NmORLi#3pH+bx2XG#O-N*sRt6YFTOr~f@5~F*HZ(NdEuCDXw&aPt&8$Nld;3Sh zHxiyD4!2<^Jdu~5sNxFrnCLyj=fD0etm1Y%H1%EzWUjqMZ0^^e$KM-&NA;q%2SN&! zU?u+L<)}ZxR+hQ*u(zhh>uLKz^B$fg21~s#zW7DQgJv;t_uSU!{{tN_r}#ic`C~)V}uG0`_zOKC+R!Ad1iQ*I>q@mNs4!))#}1{$o1O% z%9K$6FZ+P-t(HT&=9YOZk4nVRVIX)za>@ynvdh#o!Bj66IkMiG1CuhoQeGtr{$+183bc{IAuliadymMBTe&|^|gcj1XF8y|%wbs>@ z6o;-Z#)CYZq};*6FS&D~=-_8U?I!?Vm@~VAsC;V24Z9AfoJGeB7dw#QX_ky|Gi?Ox zOTBE|CT8YJx2Mb01M+Zo7xJ+ehRC)k57#x<`r?3qCS=ob&!5n6qvp{;-Z_`wDnkK7 zdJUV6L@j1;qCdECi1%^zPG;Su^@b6};BX+*!ON@zZrG{OxqhsKoMknk%k46mwPI$) z(TYC7C3${mNs$*g0a<+9c9nwEUFNS;=R8-EQ#Gz9Qt-KxdpV=w+Pw~WF0ns#*DpJG zbC@J>cff(lWq^p8v_N7rk5Z+aTm_H+&6EQ30XN?mmEx&oIGrO?qRrqGZZF_i2wn!5={sw*`|dxe;A%k#KkE@P0QG&>9l5aubJLe~<4z+ClXR zgCS3?9y(@|BD_6=g?fvbnu7|-{NR14q1Q_uo1f*(gU(}%rnNGkq?=#j0|wFk)i=%L zzq9Ka2#}CZEZIF9mI!AZU`jevlP+R)Fqj7V=)9)F2x#ayF3QrUo1~U^aNuxkmd`m< zqqr&t@!vn*6QreGP1Kr?qGx$P*aA6!WpTo(B=xFK3{8jx&wu00#ODnL+0AR)t+TSCo;TtEo8Rt@up}<1|fRu)y6VD(c-$azqCHT0w$TxKZg%d z5TVHFA9M4=%{>IZvpEX*T?i`B_gAdRdLa%k;j}*gsI4N& z14wk;>z(m9(KS1*mGxKZaLkaoqG_n>xp~`@{DBse-NRV0k}1)u4t-s+fj49I4lSR$ z)+tP^+;EpYoYO%*qOZncClJ)|!;>J$0FifCJo@ldL}n^Cwre{1?j zt{5%eH@Kl<@kI4!q7ys)lzx|DC8k$G-eD@#!lVobrG!|EP#x1UU*G+2Qx8*!C?__x zN}j4@?+ZiN7IMW4JJuwGdO4oD!{3YT23e5UCn(5Nv@rzKzjXg-SBy^-$m67*_bV$wRM5NL z+B(c^xPi6B-dturlYU;5G2?pZetLXbZ2HyS45{GJmcK{a1Z$jY9&dCN`PXWs?|cX{ z5M;rh*W<7;xn}^bL@DfI6Lv(NP1uXI@mQeI>dt5YH78ngB%>I|`snHa;fWm`oGfW@ znEiOy;2;x=$V~A-*t+|Qzt|w$3^JV ztICIrY#>qV!g#<{rUS1&={i_cG0AgZPq2*j=00@mqzOgmwiciSZU|9kzG}2`JQ)O* z*WQ0D9^~O;?NsDa?@~HcyYg?htf3mz#-Y}KCSg+hExyZETJ=W3a`P8)I!JoFmO-XS zqL*dWSmhS)J%uPbmzlJe2{}#?B4fi-m6up(s{HS&6k>2cW735PWpr^Frc!rOhy7?V zP2j&YCham;aI(UG>1}?ig~{sH;2r4I3y*0RNY9{>0xiwyD@TL|+XEA>oX#8x^ANjR zbY2z@M2y+A6E%eCdYF0HqPIJ~upRMaTLy+2%+v9M-&Et$zb%~fUCFv7Pc=GNk%OM- z``*vYMZu|P8%gTddp!>f2q&zm7+-4ab!rkRwqOQkOJJ(}h-vA*8#e77f9x#_%#&ye zV1EimM8&)4uTG-?K`Od#SeP8vDBV0{nud5tEgIhsAPZ$9db1yeFx~YZa8VSzrAR|G z6WFkX5$GhzfqX1~Nf)TLjSY})b`XX*UM+E3((%dJ?R(Rg?WB(jnmBwx0W8yo0|7%) z`>>UKor#Oc`cguueCn2>pC{wy6MxaCIs0&AjjmqeA@oZcqo82!Y7HFt>tBYaz z1(3Mtp3Ml3D}k20SfuPPmaA&7lXOk0Qs2ZHmDp58RN8rLH)o>{-?q94%FH_q%3OYQ=SHEx?N1x=kLYvLQ9z%{$vT$*vk8lq8*4J9JXqeFYiCfc*Y32c zjev;!?$6zCVN~Zr+4D#AkF_3nL1W+KON+5#)F>DToY3{obmheQWH#z}J~43YVL}tE zr;_11F*_NQ>^UZT`9u?fD;N#RXGTw?k9e^cdMpCCTimI;(!*qli%y($>dO`|qt>$S z6+<8GykmW2@}<*BBHF`IUl#5Yl*%QnUh{%(KHjLHM>0Ov(}!tqSJJHF`zPvz3-iPl z5&@%I0133!Fk26LAgPK>!#;v5{FAq^bf&-l;1I!_-YeZ&gM6~x$ zXj2jMQ_}BdxW5Nck4aJ+QA@~(7cAjRVNwtFrB`^*n2a39D5>+<@v(;lh^-GFwx zxm*3{yi~Z$!n=@C!?mu4VDRT!x(|9t&Hi#`gR{a79&-U&1t3__?~~*fGm_&-ch@-< z`y&@gw!L($d=#My(Ze6CU375$%nTl(R$3^n$}|RjYWh(t#$~nE!=rGq&+lUwCu zrdzTtag^L!qO&YkpiyWwr=pBC z=ERDLziO99X)j9=FouG_ukuLqu3#p`n8~BK3F8pc{np%EqZ-HngF0xNOtxVNa zG5IMDk(p7gQ^!~#HHl)&^S9_oM_!Ge$xa;0zskqq2@ajDf3!v)(e<#4BXc=+q65oU z44+0PRbFtnZ75S>DZ2}v4OOsIPk3jp+tO_r=;B2`1DfiW-A{_}zC?L5yX)UpfUZi? z*Aq4?Ci+->D(d*Sv#3o=tBAfEr@R(4D6uw|l*&_mtCHuF7#f*nAgn?1a@u|C93Rm5 z0_(1UO5SvxVw~HV+L-#_qC2#uzmEcJTJygx-V=k^&r>&-`N*8o+NWoSpGZse@p-4|NV!wcnbZNsI zN~5t(ZA<-GZU)Nr<&+`>m+0|2Jv2VqiaVQ3Wfsv|6&$%sSUKvNQ~Bu40KETd7WVh| zU9w0}z_QjTY-`x;3S(T~IKO@FoV3dE;wTk#p^8AxkzWgE84g6GN)@(95J3^R>iC5? zpdv@qOowQ2nq@IIoK5alqD{z@U&+L2?G$P`S=;k0o_c(qw-q;X4(irlVh%7YFIhHC z=85S-99`iIu)+67*+eYOFri@yhYyE_76jx~rL?TH-YM3`Avfi$(OnaeW$^@68w^Bi z_fbF)&7p4vd+}TJ(DL9r7+i=E<7x@d0o-p|tkMq|-L34Ze9S^Xr?2ekTVVYt#`V#D z`#Kc2LVzcL0k{CFiJKbk(xYpfsvl=TNj}KQ&-sf%|LkxKlep$ z7-4(GG=7)_dY0W0zE`&lx`9+K?GDKzT=25_=DlEVr~}cm8bi2@4Mt2e-E$iIXvHcf z8lg5|>C+JhRj2o|gzZm>100K2}9r!$bqpRdPsM*)kO(~_T#L1ys#GO{SZd<%93=&y9l`CO@< zf%+KRNZZ^AVGU@P!UTNC|DJXKS=>dQ47RK>3a+Uba0J=f#5k@)I1Xcr@pwfX8ElJw z_^y4@{o}_b-DM3H^mtm(@+AxF!f=%u-*u~h#k$B$_QurtR1H)@Ph~Rm67N4h8-JLp zX)w#|_-?bfGzl50J%n?}_si!I{`z+)7<%heo~ zaqH2QUpPi5)yTOmTUo`u3Hf@@`PB&dMkc=FSqchhiSf=`m>+>hRy%d4*ZYkai%Cum zy^3;fd4#?v5@VV$zZ4^k#Ii+qvFxxmu6};>UC=No^FClTQx%Zshl>IdpDpZNLXE)b zD_S$p?%?CAduOB|*#`et$>xj#$YINBWAa{yOFgXFy1>1dIJ~LrYm+jA zUwDJ3hIIdv$Gq|lN!l`afn>nur-t!dFXe-eAmRGG`=_I1xDwUIAF`RTIUkVW#Tu3c z8oNuh%$&|lMeZSPPK=;{d6hit<#Ij0ow35+<1FbREc+4n5^%O31V!>@g*R{0JA!U~ zT*T+E0aX_T`?OhMrt~PF)V>)R$cg^rU+GwXd!IYztlW9t#1;jNM5BNUNO5m%b5uA3 z##r-KC&<%7&{eI-BU{lQG{$NNh4%H!KvFA};!)y=(eG=)x-0ucG!?DSFTC$Zm1rL264fyhhqG$*U^s zD4sD4GIv{kYTwR(BEeZVt+=$}LQCi3#BCCI{`L5+v}oi)3idB0Hewezoik5i8cB;FgvnInVTUD-N*c;a0jd%55k{vl3U`K9_`p=F;V!dp}J3p{q?tYnNR z5W8T%xvgFS*ce+2ioJ`b^)pfZm;;>b{8<5b{Tz7*!ept%XZ*@*5Nt4-9qx#;W^mqq zEgDQghF`}Dl&71IrBk!Fd=VAYnBLrn&y>`&?C5yA{pL1M?0oMRWh!%3%v!Pq=B!dR zXOL+dlkf!v6UBngJFG03C^iz3h+k(FWnxqE{>PDD$tVjblCK>%c;w5 zrVslLVZJC3HY<_`V9TjzuE^HvxeK7Adn$taxa$N4_Iaa)=1VLi*g9IEEX#jWVE&O( z^Ov+*ShOl5(Qz9J(EN>N^^prrLg{|8$QZ2Wk z`RRc$MH*Fx?fHK0!e{9!*_9vYEq#U@DK|V4%KP3w+utb9)}i)Ise1zm-0Ks%;qx@I zP;%wTlhC5Ukjb_Un0=g9jb{@t{q&ut&P)wUCNCyt8_NVvsDM`02odirJe%%Q~A3)gTKHjLVzKDIh zDod-aVw(_VbNCPqTxk(%Np0n{^jt=$jVXq@myPDpo0_h=;+n9NC%xRB7OXmU; z)6Mc$XQt#uqpDCHo!~qA0|L@HcC)N8MI< z_MV?|u*6*rCM$n9XLNeL>V~f+a0@t1Fu$1}r)3LzPprZ0oN~*Nl5QC>OguNWYG;{D zm9wev1A8^Tb`n?l#$L@{w~tMeq@AaZ0?{bn$|xUuLtUcLR99aQ&v(sfIB40c&s>Sc zbHn#8*v@M=IQ{H7nEZ?9U2U)Ojd|ycT~*rp%%aUl7FiCL+E=z{Tk5)2iEoETpRr|Q z^|J@GBL|`KxPHRmxLyyACi+Wuac{2@uQFO0ab<)P22V^%kWplijX$pp-Io*rHs=Gx z#pLL`LXfTF@)tbgZaVcetp}dr76)?SzPYnym%J+t@#-~u_6c_r^DkTIid}@T6tjss z#5`h2Yl|A})00=#y*D-~YxYYjbfhbtZ`^H(PTyHsmH^Xa%PARWWdn*Eu0jxMiFIXT zywU6t_Yc$x6=fVCZ_u}*qmK&Lu0s7>gdRRBlh@%y0l)48eywhgMW3EO(K}jMmVb|v zIn5_cs>7B}cQHN;N4A;WXgznVT$S4skiXy@cb|`&(791K%iZ)MW&VwQdBPQ5>1^9H zMmACO6GKOKijz;n-@9-Vg1>8J>m+IoH@dc(RWP;_Q70$*I)9w3IhbCSlg%-1^3Spv zYrc&j-sf-2#C@rp_e;q^x}0-%ZcnmL9D)7zsGgso)d7plB2Z4{%=?nU%Tn2Px2otO z<6FG57zIx(Y?L2gHqQoHTT*)Tj@0rQ86LdQ_S5Iw=Yd!Nt^j}@_}hjnh<;8*EOSdi z3tAuzdHq`_vdTYisJQPw`@#RΠ*3GX4)76Qsk%KNQFUS~6dsZ6`~j75z{kc%-|b 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ãu6Hux`=H-| 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

^kBD)D zlDwagB0XY${N-H}^r4Ism@E%3k`L*<2RDOL1IC8B!o^QPdBETMu}?geJDqsLq>1W8 zUy0+DJJ1m%F=;Xz(GgyE>i__*L4c{cD)c}<;|zhITlRnhegHuVFEhI}v}%Uh#Y_b- z3&Aa6gwShWApScxg8?57z^b3$9Ver)w*Ps$#jW8-gk7}1m=%`pQwL|s(tm!m^zBnm zF<^&GmHfxWF5uNapmvHNl=JNqPciua@E0dcvJW$Cb6@8#s6BXj-FWDtD(ApPlKB|` z8aJ+zwAxO#9={X3`VF^O#z$O#`nRL$U%nNOZr`gxBA~N&9pYtf&VND91g$**z^A{4 z4;+@l4_O7TrmHajeimR5pL)t+;VT@qjTo zu+fK1fMr7Y&up>*zyI<0lj_`9Of^!H8L$FG^{f1Vb!%wF5&3%2$CeO_~9qtI(ATamU>Pf+z+tN2~(~mX2?J7lH>Tv zD5{Vsg!fePLCYNGd-bPJs-ZW?Z?X(3O?&X&I56`y8}s?~2#|cN)nu z{(?wTHa#HPp`zb1k<-hmH>*z^)CdTpGV9SX)Ytp#q-1-PGxLUzZXeDg_}N27zE#?D zNYWa${9)jpq3;6Vg`@5|obwXEA>jfw1^O+Kx%%_GgHXPh)rP_vkL6dbR~w->y1l7< z^oPy4HfrRQU8n+^u-7P1OC?l707Gn|xauU8fYP;8d$P>5q8a z6gcf{;!etL4cc*&X#4NGVFDKQApjxBf9Kf^7|4oLJ9Ru>W`2xkCGXWM*w0kWJ1;Hl zv1Y54FX^4}=Y2**IPqc`R z*d^Rip=E6JJ+&xRzG!7X|53mx#Ug%>z%z{j7mC#q^|hh(F8Fwg=cx8Rhr|HMj;cop$*{ev&y`TtaR0}n6buNfkWq*=|Do zGsY>^(kctyv4EO(q_9O?Q2=AVv|qIF0wK?pk4zza1;Aub+CWL?oz1+$(lwB|M*td& zX&_zF<6R=j!0ld*K_gAbA?QJR;N}5qLna2Z z)r;DIw}oD52!=j^ZU5WlKD5%d02u8Wu`1%m(*dRrM?X~!lg3&Ss{*PiwO7+XY=Xa- zhdzg00uM$AjHRowLoD&PVSyb>2s#?+frY`&_-#!tF|9qxSQ==T#1iWS&=GqJ+$dXT zlA)z6Ah`xy5#aiYngKaG1NIh(MVNMgZv#KmN2VYEXhu&%+gi5>cpk?fy7a%n&SzVD zn$E5~R0$R0>VR2ez?+1vGLI|SpV9(mRGj9Y_d+TkvrZFDi(X=%2*uPmqKY7EK-d_# zah0rr<^Z$+`GDOFS24M^27dnYUMDnnQoXY+Y!sN9x`FRr2J|uW=~dcVE7|Vp%#vMl zvQ7yDL?I)LyGJ+uSVd?UroZ*%h0we30oCePQ19!_axb2``Dj@Z@0%&vJV)wy>RKyM zxn?}RsrLm0n*4m9w%=C$G?v{2gReFZf6~-^FHp&$@%kq7+QZ7RSkB7oBUVdbsqoj4 z)*NAa#)$XzAh#F2PqvP@rCn}IeYU_n5_ToQjfkW^f1tHn7JcJRo) z1b>0OQ5y*n*5Dsux}A0`MVq1!pARU;#AOfgJfrZUswJfYs(#6m+y(W(xuoM3eDtsA za?wwIm%LyQ-b%H3Iz_o<-$U4VvCU>peOeYqI#*f-F)wd~eI+$wTJ9#LyjpouS_^+N zK`s=hzCn~-uEmG548e4;(69?zGD^Fc0m%6(Q_CsTqB+7@da zHiuVmXA(LdZx~4Pn^Mh7=2EmpvY5)^Yi7)Jf}?XX?QGX9>Ns3ag082TRy$vum(-L{ zy*chCauSMkBt*sVZX*}_vl57-=_Grvi++eCHXOTNt)p$I4C;^PWq#0YL_Z8)?PPB( zUw3y2vgrd`4bnLg;JNkw5LV?Et6Tpfc`xk5MT-5`efD_Qm@MYRd$#Uj;(*|aL^as1 z#taC8)qyhqkmoIDuLMAx`r)EB|DwB#u-U)~^UO#v((zsEiBHn7pcSe|#InNvfJlZ@ zK(5+#7&Q?|LPD_p+t=p1fe4)BN?HxY&!(*UJnPP9IUqEFg(@z=2z+F{=M%2NyT*J} z-Aq-JJ@fHF{xiD(DWN28UFjF#dONXL`1x*1RN5*eOylL(&T8F+c&?`9d)3ytTJ~9S znR*|^VQ~dzV(;K$QW6Wff%t=&8KM`(XH#Y7mIB7IN+8lBi7Fg>EVGe*%ra1&D-aAQ zt=N(|eY79co6mfxv+n`iOU>6?gI)XO2U}vytxeE%NwU0PM|NE~yj*$uU0!y0tK4zjZD z*&Q!yraJ%@KS~=8wk2<5BT+M-=+tQldoP-g98*_OcG$Sj>&mPMSSvjdS4pDkW8(9< zFIw;U2PnL?H?DlemU*l=_qe{M77r12)vAXainXiDhc$>%PW*wG%o?nuTeOPzq1ZUIt{`$-Aj*dc($5Jj+n<+_NJkHA5-Y0GO zV)NRG*d!gE&cpP}i=q2Zd9!y$Z7qA}MxuH|{jZ+X3TZCaPW@<|KCD)VtktP;rA+s# zbZBD(XJn;2M_z(!sqdy);l%O2P}|SdKTJK8zqqS6>4pE$I&RbDl{B66mSP_*OL?h{ z1dpe$_f9IG~URkA5V$CTdVxi>7Gx(e#iK_q0a`Jw{?+Kpe@Y z%ZVag<7p9%$AAATuv7V$O;i&<@fh?)0I#z!&UW&Ed=5L0+S(J8LD!g~A@#7M0*a(8 z>l!hun|wdh8dvp!Zj2`r_yczxQM#2-A5y<+=^2XcWG->_WJ<@%F<+(j zI6Ebu_O=NeWHgu~BHE3~t~6I}eO-{!znU82FBmLo99=Z+I(dpE13eks zcfR84MN*z@1WKe$taP`owGQeA`OVz>wc3qnDY6HI8K$Z5PY$fw8X{?zR|=lAab}#F zuJ6Is_opg0j++PdkRj#_6}2fdx9gDXOUS;7hv(94sl*_)$HNOeMzgqf;r$@PHzK}& zDiobEtyvscy(uF}gwUdDkUnQmeFYETi^6a2i)mRFy?1u40%M#Am937%U81SOI~Eu> zjrlp6aEQ-5dH$!t&>j1lJJFJGkc}NzRRcaUR+)P%Z)0UjD=T5t#^@Rl8QtM8p`D;q zK{)U8LL{z@o4R>kVKZq;l3T|1OY;oezwk0rbZt@7w2h=2h1e-+Wor;(RI`Ya&;gU<9xd~ zvp?>@AETamT~@I6tEsNq=!B1`>s)Nbc`CPh(JNmWZ<$ZaM-cTCg2&t%u;wqJA;J8r zJ*{(^Fa-=AI+!jzXZs79)LhuP;J1Wc$(5>C^sGKS%uogI|JEI!YTbRQk#Gqa%Cy#N+Q zM9)~-0V8?iLHhM>GTYhKcM;`;gA=r{6SW^|FjRPV(zC39_ru)O^SY4Wz=wqLdyo&e zZghEi%Sa37n%9eX3uknlzP`jDpX`VJxJgF1>qIJJufGAbX)pAiHCmwE&yjecf=!s& z5&DJ~yq{TpzTlYGdtk@5Dcr^-#Fo9g+g^CGFe7#+JK{2Kok+qE+#`gP25u~YrcL3eq8WuA0YJ|-#iaEU{%iVt?(A$|4$ z@u31dFI-k|XjcE(zG4pj4FX{|$0$I5ye$vNn#$6OmQVIR1QFMd_(7mRtcG|VL$v$S zSa3{?U=4O}#=vM#-N;bB$L;L6#RMysdcgd)v zc4qKil|l=r>8zo1@-mW>jd8;R_m_`%D=NX5mbpP}`R2~~Cw7HRTXMiriN&1i0}{m- z`NzX)D~`AZde-l*t|A`EjGW zJ)sBTbytq>0d~0UJbd>>_ot~`_~^(a{EXF@^41IpZwaS*|AHp;fqX*20jN2e(8@gj z;!u9v{moYZB6M_svGWh>p&tJjz$PqF?CrWE5ftNUG#z$?owl=g&XZ5*YHLuwSJc(p zPuLs(bkoh$gY7YE03HRup;m10mtW0n`|Kr|zMyM3YdYo;?!@Ptd(Pg`hAprB<@zB^ zNW+hSeS4VgOlu%MQeQskXSi|3BtrO$dLp6cxw)ite+OYu7r^66`b)>4+Y z;d~-a1lRRofagT$GD6%vdP+Kgzo!Kbxzt>^3DVYClV`Dvmg`La$PN+~Z}!~PkFavS z&l=6bk#MJu(JEHL5~kTL_hP=dqc0klh%sxskum664ezdvv2{tji*sb4bG(Mt{hDKLff3Y(noeXp1~28BJbjzF)6=eH;T-peza3lk_^o|PI#ARvbs~YVyBT6- z{kcP4>R8mj2Htm=PaYV17sjK7dce>dtcMr8v*{YQ<3uds&ToU7uj`-~q(a?fAO^?H z!-X7K-5FQ$p{xEY*pE1*1Eg~gVnz6vNbql$Lmf+?d;t%m%KN)rNN^4X;F+>s+u+m& z)cT�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%0D`)sSJaMVLkWA8`}@uUIVqPXb`XAd(O%h&4n4 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 b(Jpu}!l|g|+yBK%$-h~b`SWZ4`5gEkuxTm! diff --git a/backup/v2-bakcup-10-13-25/v2/images/Thumbs.db b/backup/v2-bakcup-10-13-25/v2/images/Thumbs.db deleted file mode 100644 index 5ec0090c327aee03ac61d5edb1299f986ed6d64c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191488 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

(J7o@pQ|4{bz9~qF+PWK;* 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 Ph1Gw7_WggmJ^eob6ZZ*X diff --git a/backup/v2-bakcup-10-13-25/v2/images/applications/Thumbs.db b/backup/v2-bakcup-10-13-25/v2/images/applications/Thumbs.db deleted file mode 100644 index 09cf9fb2e50549f095c5d7322ba7ba2aef6b8d06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13312 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 Ao&W#< diff --git a/bulkupdatenotificationtypes.asp b/bulkupdatenotificationtypes.asp deleted file mode 100644 index 1f4b0a1..0000000 --- a/bulkupdatenotificationtypes.asp +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - - - - -<% - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF -%> - - - -

- - -
- - - - -
- -
-
- -
-
-
-
- - -<% -' Check for success/error messages -Dim updated, errors -updated = Request.QueryString("updated") -errors = Request.QueryString("errors") - -If updated <> "" Then -%> - -<% End If %> - -
- - Instructions: Select the appropriate notification type for each notification below, then click "Save All Changes" at the bottom. -
- -
-
Notification Type Legend:
- TBD - Type to be determined (gray on calendar)
- Awareness - General awareness notification (green on calendar)
- Change - Scheduled change or maintenance (yellow on calendar)
- Incident - Active incident or outage (red on calendar) -
- -
-
- - - -
- -<% -' Fetch all active notifications -Dim strSQL, rs -strSQL = "SELECT n.notificationid, n.notification, n.starttime, n.endtime, n.ticketnumber, " & _ - "n.notificationtypeid, nt.typename " & _ - "FROM notifications n " & _ - "LEFT JOIN notificationtypes nt ON n.notificationtypeid = nt.notificationtypeid " & _ - "WHERE n.isactive = 1 " & _ - "ORDER BY n.starttime DESC" -Set rs = objconn.Execute(strSQL) - -Dim count -count = 0 - -If Not rs.EOF Then - Do While Not rs.EOF - count = count + 1 - - Dim currentType, currentTypeName - If IsNull(rs("notificationtypeid")) Then - currentType = 1 - currentTypeName = "TBD" - Else - currentType = rs("notificationtypeid") - currentTypeName = rs("typename") - End If -%> -
-
- <%=rs("notification")%> -
-
- Date: <%=FormatDateTime(rs("starttime"), 2)%> - <% If Not IsNull(rs("endtime")) And rs("endtime") <> "" Then %> - to <%=FormatDateTime(rs("endtime"), 2)%> - <% Else %> - ONGOING - <% End If %> - <% If Not IsNull(rs("ticketnumber")) And rs("ticketnumber") <> "" Then %> - | Ticket: <%=rs("ticketnumber")%> - <% End If %> -
-
- - <%=currentTypeName%> -
-
- - -
-
-<% - rs.MoveNext - Loop -End If - -rs.Close -Set rs = Nothing -objConn.Close -%> - - <% If count > 0 Then %> -
- -
- <% Else %> -
- No active notifications found. -
- <% End If %> - -
- -
-
-
-
- - - -
- - - - - -
-
-
-
-
-
- - -
- - - - - - - - - - - - - - - - - - diff --git a/check_all_warranties.asp.broken b/check_all_warranties.asp.broken deleted file mode 100644 index f7a16b4..0000000 --- a/check_all_warranties.asp.broken +++ /dev/null @@ -1,222 +0,0 @@ -<%@ Language=VBScript %> -<% -' ======================================================================== -' Check All Warranties - Batch Process -' This page checks all PCs without warranty information against Dell API -' ======================================================================== - -On Error Resume Next -Response.Buffer = True -Response.ContentType = "application/json" -%> - -<% -If Err.Number <> 0 Then - Response.Write "{""success"": false, ""error"": ""Database include error: " & Replace(Err.Description, """", "'") & """}" - Response.End -End If - -' Configuration -Const VENDOR_API_URL = "http://10.48.130.113/vendor-api-proxy.php" -Const BATCH_SIZE = 10 ' Process 10 at a time - -Dim strSQL -Dim serviceTags, serialNumber -Dim warrantyData, warrantyResults -Dim updated, errors, total -Dim response -Dim rsWarranties ' Create our own recordset object -' Note: objConn is declared in sql.asp include - -' Initialize counters -updated = 0 -errors = 0 - -' Find all PCs without warranty information -strSQL = "SELECT pcid, hostname, serialnumber " & _ - "FROM pc " & _ - "WHERE (warrantyenddate IS NULL OR warrantyenddate = '' OR warrantyenddate = '0000-00-00') " & _ - "AND serialnumber IS NOT NULL " & _ - "AND serialnumber <> 'N/A' " & _ - "AND serialnumber <> '' " & _ - "AND LENGTH(serialnumber) >= 5 " & _ - "AND isactive = 1" - -' Create and open recordset with cursor to support MoveFirst -Set rsWarranties = Server.CreateObject("ADODB.Recordset") -If Err.Number <> 0 Then - Response.Write "{""success"": false, ""error"": ""Failed to create recordset: " & Replace(Err.Description, """", "'") & """}" - Response.End -End If - -rsWarranties.CursorLocation = 3 ' adUseClient -rsWarranties.Open strSQL, objConn - -If Err.Number <> 0 Then - Response.Write "{""success"": false, ""error"": ""Failed to open recordset: " & Replace(Err.Description, """", "'") & """}" - Response.End -End If - -' Check if we have any records -If rsWarranties.EOF Then - ' No devices need warranty checks - Response.Write "{""success"": true, ""message"": ""No devices require warranty checks"", ""total"": 0, ""updated"": 0, ""errors"": 0}" - rsWarranties.Close - objConn.Close - Response.End -End If - -' Count total records -Dim serviceTagList() -Dim deviceInfo() -Dim count -count = 0 - -Do While Not rsWarranties.EOF - count = count + 1 - rsWarranties.MoveNext -Loop -total = count - -' Reset to beginning -rsWarranties.MoveFirst - -' Build arrays -ReDim serviceTagList(total - 1) -ReDim deviceInfo(total - 1) -count = 0 - -Do While Not rsWarranties.EOF - serialNumber = Trim(rsWarranties("serialnumber")) - serviceTagList(count) = serialNumber - Set deviceInfo(count) = CreateObject("Scripting.Dictionary") - deviceInfo(count)("pcid") = rsWarranties("pcid") - deviceInfo(count)("hostname") = rsWarranties("hostname") - deviceInfo(count)("serialnumber") = serialNumber - count = count + 1 - rsWarranties.MoveNext -Loop - -rsWarranties.Close -Set rsWarranties = Nothing - -' Process in batches -Dim i, batchStart, batchEnd, batchTags -Dim batchTagsStr, apiUrl, xmlhttp -Dim responseText, json - -For i = 0 To total - 1 Step BATCH_SIZE - batchStart = i - batchEnd = i + BATCH_SIZE - 1 - If batchEnd >= total Then - batchEnd = total - 1 - End If - - ' Build batch of service tags - batchTagsStr = "" - Dim j - For j = batchStart To batchEnd - If batchTagsStr <> "" Then - batchTagsStr = batchTagsStr & "," - End If - batchTagsStr = batchTagsStr & serviceTagList(j) - Next - - ' Call vendor API - apiUrl = VENDOR_API_URL & "?vendor=dell&action=warranty-batch&servicetags=" & Server.URLEncode(batchTagsStr) - - Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0") - xmlhttp.setTimeouts 30000, 30000, 30000, 30000 ' 30 second timeout - - On Error Resume Next - xmlhttp.Open "GET", apiUrl, False - xmlhttp.setRequestHeader "Accept", "application/json" - xmlhttp.Send - - If Err.Number <> 0 Then - errors = errors + (batchEnd - batchStart + 1) - Err.Clear - Else - responseText = xmlhttp.responseText - - ' Parse JSON response (simplified - for production use proper JSON parser) - ' For now, we'll extract warranty data using string parsing - If InStr(responseText, """success"":true") > 0 Then - ' Process each warranty in batch - For j = batchStart To batchEnd - serialNumber = serviceTagList(j) - - ' Extract warranty data for this serial (simplified extraction) - Dim warrantyEndDate, serviceLevel, warrantyStatus - warrantyEndDate = ExtractWarrantyData(responseText, serialNumber, "warrantyEndDate") - serviceLevel = ExtractWarrantyData(responseText, serialNumber, "serviceLevel") - warrantyStatus = ExtractWarrantyData(responseText, serialNumber, "warrantyStatus") - - If warrantyEndDate <> "" Then - ' Update database - strSQL = "UPDATE pc SET " & _ - "warrantyenddate = '" & Replace(warrantyEndDate, "'", "''") & "', " & _ - "warrantystatus = '" & Replace(warrantyStatus, "'", "''") & "', " & _ - "warrantylevel = '" & Replace(Left(serviceLevel, 100), "'", "''") & "' " & _ - "WHERE pcid = " & deviceInfo(j)("pcid") - - On Error Resume Next - objConn.Execute strSQL - - If Err.Number = 0 Then - updated = updated + 1 - Else - errors = errors + 1 - Err.Clear - End If - On Error Goto 0 - Else - errors = errors + 1 - End If - Next - Else - errors = errors + (batchEnd - batchStart + 1) - End If - End If - On Error Goto 0 - - Set xmlhttp = Nothing - - ' Small delay between batches - ASP doesn't support WScript.Sleep - ' Instead, we'll just continue without delay since batches are small - ' If batchEnd < total - 1 Then - ' ' No sleep available in ASP - ' End If -Next - -' Return response -Response.Write "{""success"": true, ""total"": " & total & ", ""updated"": " & updated & ", ""errors"": " & errors & ", ""message"": ""Updated " & updated & " of " & total & " warranty records""}" - -objConn.Close - -' Helper function to extract warranty data from JSON -Function ExtractWarrantyData(jsonText, serviceTag, fieldName) - Dim pattern, startPos, endPos, value - pattern = """serviceTag"":""" & serviceTag & """" - startPos = InStr(jsonText, pattern) - - If startPos > 0 Then - ' Find the field within this warranty object - Dim fieldPattern - fieldPattern = """" & fieldName & """:""" - startPos = InStr(startPos, jsonText, fieldPattern) - - If startPos > 0 Then - startPos = startPos + Len(fieldPattern) - endPos = InStr(startPos, jsonText, """") - If endPos > startPos Then - value = Mid(jsonText, startPos, endPos - startPos) - ExtractWarrantyData = value - Exit Function - End If - End If - End If - - ExtractWarrantyData = "" -End Function -%> diff --git a/checkduplicateprinters.asp b/checkduplicateprinters.asp deleted file mode 100644 index 3b205e9..0000000 --- a/checkduplicateprinters.asp +++ /dev/null @@ -1,58 +0,0 @@ - -<% -Response.Write("

Check for Duplicate Printer Machines

") - -Dim strSQL, rs - -' Find duplicates by machinenumber -strSQL = "SELECT machinenumber, COUNT(*) as cnt " &_ - "FROM machines " &_ - "WHERE machinenumber LIKE '%-PRINTER' " &_ - "GROUP BY machinenumber " &_ - "HAVING COUNT(*) > 1 " &_ - "ORDER BY cnt DESC, machinenumber" -set rs = objConn.Execute(strSQL) - -Response.Write("

Duplicate Machine Numbers:

") -Response.Write("") -Response.Write("") -Dim hasDuplicates -hasDuplicates = False -While Not rs.EOF - hasDuplicates = True - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - rs.MoveNext -Wend -Response.Write("
Machine NumberCount
" & Server.HTMLEncode(rs("machinenumber") & "") & "" & rs("cnt") & "
") - -If Not hasDuplicates Then - Response.Write("

No duplicates found!

") -End If -rs.Close - -' Show all printer machines grouped -Response.Write("

All Printer Machines (grouped by name):

") -strSQL = "SELECT machinenumber, COUNT(*) as cnt, GROUP_CONCAT(machineid) as ids " &_ - "FROM machines " &_ - "WHERE machinetypeid = 15 " &_ - "GROUP BY machinenumber " &_ - "ORDER BY machinenumber" -set rs = objConn.Execute(strSQL) -Response.Write("") -Response.Write("") -While Not rs.EOF - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - rs.MoveNext -Wend -Response.Write("
Machine NumberCountMachine IDs
" & Server.HTMLEncode(rs("machinenumber") & "") & "" & rs("cnt") & "" & Server.HTMLEncode(rs("ids") & "") & "
") -rs.Close - -objConn.Close -%> diff --git a/checkprintermachinescount.asp b/checkprintermachinescount.asp deleted file mode 100644 index e9cb875..0000000 --- a/checkprintermachinescount.asp +++ /dev/null @@ -1,42 +0,0 @@ - -<% -Response.Write("

Production Printer Machines Count

") - -Dim strSQL, rs - -' Count printer machines -strSQL = "SELECT COUNT(*) as cnt FROM machines WHERE machinetypeid = 15" -set rs = objConn.Execute(strSQL) -Response.Write("

Machines with Printer type (machinetypeid=15): " & rs("cnt") & "

") -rs.Close - -' Count machines with -PRINTER suffix -strSQL = "SELECT COUNT(*) as cnt FROM machines WHERE machinenumber LIKE '%-PRINTER'" -set rs = objConn.Execute(strSQL) -Response.Write("

Machines with '-PRINTER' suffix: " & rs("cnt") & "

") -rs.Close - -' Show sample -Response.Write("

Sample Printer Machines:

") -strSQL = "SELECT m.machineid, m.machinenumber, m.alias, c.address as ipaddress " &_ - "FROM machines m " &_ - "LEFT JOIN communications c ON m.machineid = c.machineid AND c.comstypeid = 1 " &_ - "WHERE m.machinetypeid = 15 " &_ - "ORDER BY m.machineid DESC LIMIT 10" -set rs = objConn.Execute(strSQL) -Response.Write("") -Response.Write("") -While Not rs.EOF - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - rs.MoveNext -Wend -Response.Write("
IDMachine NumberAliasIP
" & rs("machineid") & "" & Server.HTMLEncode(rs("machinenumber") & "") & "" & Server.HTMLEncode(rs("alias") & "") & "" & Server.HTMLEncode(rs("ipaddress") & "") & "
") -rs.Close - -objConn.Close -%> diff --git a/cleanupduplicateprintersexecute.asp b/cleanupduplicateprintersexecute.asp deleted file mode 100644 index 21ea354..0000000 --- a/cleanupduplicateprintersexecute.asp +++ /dev/null @@ -1,98 +0,0 @@ - -<% -Response.Write("

Cleanup Duplicate Printer Machines

") - -' First, show what will be deleted -Response.Write("

Records that will be DELETED:

") -Dim strSQL, rs -strSQL = "SELECT m1.machineid, m1.machinenumber, m1.alias, c.address as ipaddress " &_ - "FROM machines m1 " &_ - "LEFT JOIN communications c ON m1.machineid = c.machineid AND c.comstypeid = 1 " &_ - "WHERE m1.machinetypeid = 15 " &_ - "AND m1.machineid NOT IN ( " &_ - " SELECT MIN(m2.machineid) " &_ - " FROM machines m2 " &_ - " WHERE m2.machinetypeid = 15 " &_ - " GROUP BY m2.machinenumber " &_ - ") " &_ - "ORDER BY m1.machinenumber, m1.machineid" -set rs = objConn.Execute(strSQL) - -Response.Write("") -Response.Write("") -Dim deleteCount -deleteCount = 0 -While Not rs.EOF - deleteCount = deleteCount + 1 - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - rs.MoveNext -Wend -Response.Write("
Machine IDMachine NumberAliasIP
" & rs("machineid") & "" & Server.HTMLEncode(rs("machinenumber") & "") & "" & Server.HTMLEncode(rs("alias") & "") & "" & Server.HTMLEncode(rs("ipaddress") & "") & "
") -rs.Close - -Response.Write("

Total records to delete: " & deleteCount & "

") - -' Now execute the DELETE -Response.Write("

Executing DELETE...

") -On Error Resume Next -strSQL = "DELETE m1 " &_ - "FROM machines m1 " &_ - "WHERE m1.machinetypeid = 15 " &_ - "AND m1.machineid NOT IN ( " &_ - " SELECT * FROM ( " &_ - " SELECT MIN(m2.machineid) " &_ - " FROM machines m2 " &_ - " WHERE m2.machinetypeid = 15 " &_ - " GROUP BY m2.machinenumber " &_ - " ) AS keep_ids " &_ - ")" -objConn.Execute(strSQL) - -If Err.Number <> 0 Then - Response.Write("

ERROR:

") - Response.Write("

Error Number: " & Err.Number & "

") - Response.Write("

Error Description: " & Server.HTMLEncode(Err.Description) & "

") - Err.Clear -Else - Response.Write("

DELETE completed successfully!

") -End If -On Error Goto 0 - -' Verify no duplicates remain -Response.Write("

Verification - Remaining Duplicates:

") -strSQL = "SELECT machinenumber, COUNT(*) as cnt " &_ - "FROM machines " &_ - "WHERE machinetypeid = 15 " &_ - "GROUP BY machinenumber " &_ - "HAVING COUNT(*) > 1" -set rs = objConn.Execute(strSQL) -If rs.EOF Then - Response.Write("

No duplicates remaining! ✓

") -Else - Response.Write("

WARNING: Duplicates still exist!

") - Response.Write("") - Response.Write("") - While Not rs.EOF - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - rs.MoveNext - Wend - Response.Write("
Machine NumberCount
" & Server.HTMLEncode(rs("machinenumber") & "") & "" & rs("cnt") & "
") -End If -rs.Close - -' Show final count -strSQL = "SELECT COUNT(*) as cnt FROM machines WHERE machinetypeid = 15" -set rs = objConn.Execute(strSQL) -Response.Write("

Final printer machine count: " & rs("cnt") & "

") -rs.Close - -objConn.Close -%> diff --git a/deviceswitch.asp.backup b/deviceswitch.asp.backup deleted file mode 100644 index c1b650d..0000000 --- a/deviceswitch.asp.backup +++ /dev/null @@ -1,473 +0,0 @@ - - - - - - - - -<% - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF - - Dim serverid, isNewRecord - serverid = Request.QueryString("id") - If serverid = "" Or serverid = "0" Then - isNewRecord = True - serverid = 0 - Else - isNewRecord = False - End If - - ' If editing, fetch existing data - Dim rs, servername, modelid, serialnumber, ipaddress, description, maptop, mapleft, isactive - Dim vendorname, modelnumber - If Not isNewRecord Then - Dim strSQL - strSQL = "SELECT mac.machineid, mac.alias AS servername, mac.modelnumberid AS modelid, " & _ - "mac.serialnumber, mac.machinenotes AS description, mac.maptop, mac.mapleft, mac.isactive, " & _ - "m.modelnumber, v.vendor, c.address AS ipaddress " & _ - "FROM machines mac " & _ - "LEFT JOIN models m ON mac.modelnumberid = m.modelnumberid " & _ - "LEFT JOIN vendors v ON m.vendorid = v.vendorid " & _ - "LEFT JOIN communications c ON mac.machineid = c.machineid AND c.isprimary = 1 AND c.comstypeid = 1 " & _ - "WHERE mac.machineid = " & serverid & " AND mac.machinetypeid = 30" - Set rs = objConn.Execute(strSQL) - - If rs.EOF Then - Response.Write("Server not found") - Response.End - End If - - If Not IsNull(rs("servername")) Then servername = rs("servername") Else servername = "" - If Not IsNull(rs("modelid")) Then modelid = rs("modelid") Else modelid = "" - If Not IsNull(rs("serialnumber")) Then serialnumber = rs("serialnumber") Else serialnumber = "" - If Not IsNull(rs("ipaddress")) Then ipaddress = rs("ipaddress") Else ipaddress = "" - If Not IsNull(rs("description")) Then description = rs("description") Else description = "" - If Not IsNull(rs("maptop")) Then maptop = rs("maptop") Else maptop = "" - If Not IsNull(rs("mapleft")) Then mapleft = rs("mapleft") Else mapleft = "" - If Not IsNull(rs("isactive")) Then isactive = rs("isactive") Else isactive = 1 - If Not IsNull(rs("vendor")) Then vendorname = rs("vendor") Else vendorname = "" - If Not IsNull(rs("modelnumber")) Then modelnumber = rs("modelnumber") Else modelnumber = "" - - rs.Close - Set rs = Nothing - Else - ' New record defaults - servername = "" - modelid = "" - serialnumber = "" - ipaddress = "" - description = "" - maptop = "" - mapleft = "" - isactive = 1 ' Active by default for new records - vendorname = "" - modelnumber = "" - End If -%> - - - - -
- - -
- - - - -
- -
-
- - -
-
- -
-
- -
-
-
-
-
- - <%If isNewRecord Then Response.Write("Add Server") Else Response.Write("Edit Server: " & Server.HTMLEncode(servername))%> -
-
- -
- - - -
- -
- - - Short name to identify this server - -
-
- -
- -
-
- -
- -
-
- - Select a model or click "New" to add one - -
-
- - - - -
- -
- -
-
- -
- -
- - - IPv4 or IPv6 address - -
-
- -
- -
- - - Optional: Purpose, rack location, or other notes - -
-
- -
- -
-
- > - -
- - Inactive devices are hidden from most lists and the network map - -
-
- - - - - -
- -
- -
- <%If maptop <> "" And mapleft <> "" Then - Response.Write("Current position: X=" & mapleft & ", Y=" & maptop) - Else - Response.Write("No position set - click button to select") - End If%> -
- - Click to select this server's position on the network map - -
-
- -
- -
-
- - - Cancel - - <%If Not isNewRecord Then%> - - <%End If%> -
-
- -
- -
-
-
-
- -
- -
- - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - -<% - objConn.Close -%> diff --git a/displaymachine.asp.backup-20251027 b/displaymachine.asp.backup-20251027 deleted file mode 100644 index 315b77a..0000000 --- a/displaymachine.asp.backup-20251027 +++ /dev/null @@ -1,1192 +0,0 @@ - - - - - - - - - -<% - theme = Request.Cookies("theme") - If theme = "" Then - theme = "bg-theme1" - End If - - ' Get and validate machineid parameter - Dim machineid - machineid = Trim(Request.Querystring("machineid")) - - ' Validate machine ID - If Not IsNumeric(machineid) Or CLng(machineid) < 1 Then - Response.Redirect("default.asp") - Response.End - End If - - ' Use LEFT JOINs so query returns data even if printer/PC not associated - strSQL = "SELECT machines.*, machinetypes.*, models.*, businessunits.*, vendors.*, functionalaccounts.*, " & _ - "printers.ipaddress AS printerip, printers.printerid, printers.printercsfname, printers.printerwindowsname, " & _ - "pc.pcid, pc.hostname, pc.loggedinuser AS LoggedInUser, pc_network_interfaces.IPAddress AS pcip " & _ - "FROM machines " & _ - "INNER JOIN machinetypes ON machines.machinetypeid = machinetypes.machinetypeid " & _ - "INNER JOIN models ON machines.modelnumberid = models.modelnumberid " & _ - "INNER JOIN businessunits ON machines.businessunitid = businessunits.businessunitid " & _ - "INNER JOIN functionalaccounts ON machinetypes.functionalaccountid = functionalaccounts.functionalaccountid " & _ - "INNER JOIN vendors ON models.vendorid = vendors.vendorid " & _ - "LEFT JOIN printers ON machines.printerid = printers.printerid " & _ - "LEFT JOIN pc ON pc.machinenumber = machines.machinenumber " & _ - "LEFT JOIN pc_network_interfaces ON pc_network_interfaces.pcid = pc.pcid AND pc_network_interfaces.DefaultGateway IS NOT NULL " & _ - "WHERE machines.machineid = " & CLng(machineid) - - Set rs = objConn.Execute(strSQL) - - ' Check if machine exists - If rs.EOF Then - rs.Close - Set rs = Nothing - Response.Redirect("default.asp") - Response.End - End If -%> - - - - -
- - -
- - - - -
- -
-
- -
-
-
-
- " alt="Card image cap"> -
-
- " alt="profile-image" class="profile"> -
<%If Not IsNull(rs("machinenumber")) Then Response.Write(Server.HTMLEncode(rs("machinenumber"))) End If%>
-
<%If Not IsNull(rs("vendor")) Then Response.Write(Server.HTMLEncode(rs("vendor"))) End If%>
-
<%If Not IsNull(rs("machinetype")) Then Response.Write(Server.HTMLEncode(rs("machinetype"))) End If%>
-

<%If Not IsNull(rs("machinedescription")) Then Response.Write(Server.HTMLEncode(rs("machinedescription"))) End If%>

-
- -
-
- -
-
-
- -
-
-
Configuration
-
-
-

Location:

-

Vendor:

-

Model:

-

Function:

-

BU:

-

PC:

-

IP:

-

User:

-

Printer:

-

- -

-
-
-

- - <%Response.Write(rs("machinenumber"))%> - -

-

<%Response.Write(rs("vendor"))%>

-

<%Response.Write(rs("modelnumber"))%>

-

<%Response.Write(rs("machinetype"))%>

-

<%Response.Write(rs("businessunit"))%>

-<% -' PC data - check if exists (LEFT JOIN may return NULL) -If Not IsNull(rs("pcip")) And rs("pcip") <> "" Then - Response.Write("

" & rs("hostname") & "

") - Response.Write("

" & rs("pcip") & "

") - If Not IsNull(rs("LoggedInUser")) Then - Response.Write("

" & rs("LoggedInUser") & "

") - Else - Response.Write("

 

") - End If -Else - Response.Write("

No PC assigned

") - Response.Write("

 

") - Response.Write("

 

") -End If - -' Printer data - check if exists (LEFT JOIN may return NULL) -If Not IsNull(rs("printerid")) And rs("printerid") <> "" Then - Response.Write("

" & rs("printerwindowsname") & "

") -Else - Response.Write("

No printer assigned

") -End If -%> -
-
-
-
-
-
- -
-
-
- - -<% - strSQL2 = "SELECT * FROM installedapps, applications WHERE installedapps.appid = applications.appid AND installedapps.isactive = 1 AND installedapps.machineid = " & CLng(machineid) & " ORDER BY appname ASC" - Set rs2 = objConn.Execute(strSQL2) - Do While Not rs2.EOF - Response.Write("") - rs2.MoveNext - Loop - rs2.Close - Set rs2 = Nothing -%> - -
" & Server.HTMLEncode(rs2("appname")) & "
-
-
-
-
-
- -
- -
-
-
- -
-
- -
- -
-
- - - -
-
-
- -
-
- -
- -
-
- - - -
-
-
- -
-
- -
- -
-
- - - -
-
-
- -
- -
-
- - "> - "> - -
- -
- -
- Current position: X=<%Response.Write(rs("mapleft"))%>, Y=<%Response.Write(rs("maptop"))%> -
-
-
-
- -
-
- -
-
-
- -
-
-
-
-
- -
- - -
- - -
- -
- - - - - -
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - - - - - -
-
-
- Select Machine Location - -
-
-
-
-
- Click on the map to select a location -
- - -
-
-
-
- - - - - -<% - objConn.Close -%> \ No newline at end of file diff --git a/displaymachine.asp.backup2 b/displaymachine.asp.backup2 deleted file mode 100644 index 8e6e917..0000000 --- a/displaymachine.asp.backup2 +++ /dev/null @@ -1,1674 +0,0 @@ -<% -'============================================================================= -' FILE: displaymachine.asp -' PURPOSE: Display detailed machine information with edit capability -' SECURITY: Parameterized queries, HTML encoding, input validation -' UPDATED: 2025-10-27 - Migrated to secure patterns -'============================================================================= -%> - - - - - - - - - - -<% - theme = Request.Cookies("theme") - If theme = "" Then - theme = "bg-theme1" - End If - - '============================================================================= - ' SECURITY: Validate machineid or machinenumber parameter - ' NOTE: This handles both database ID and machine number for flexibility - '============================================================================= - Dim machineid, machinenumber, paramValue - machineid = GetSafeInteger("QS", "machineid", 0, 1, 999999) - - ' If machineid not provided, try machinenumber parameter - IF machineid = 0 THEN - machinenumber = Request.QueryString("machinenumber") - IF machinenumber <> "" THEN - ' Look up machineid by machinenumber - Dim rsLookup, strLookupSQL - strLookupSQL = "SELECT machineid FROM machines WHERE machinenumber = ? AND isactive = 1" - Set rsLookup = ExecuteParameterizedQuery(objConn, strLookupSQL, Array(machinenumber)) - IF NOT rsLookup.EOF THEN - machineid = rsLookup("machineid") - END IF - rsLookup.Close - Set rsLookup = Nothing - END IF - ELSE - ' We have a machineid, but it might actually be a machine number - ' Try to look it up as a machineid first - Dim rsCheck - strLookupSQL = "SELECT machineid FROM machines WHERE machineid = ? AND isactive = 1" - Set rsCheck = ExecuteParameterizedQuery(objConn, strLookupSQL, Array(machineid)) - - ' If no machine found with that machineid, try treating it as a machine number - IF rsCheck.EOF THEN - rsCheck.Close - strLookupSQL = "SELECT machineid FROM machines WHERE machinenumber = ? AND isactive = 1" - Set rsCheck = ExecuteParameterizedQuery(objConn, strLookupSQL, Array(CStr(machineid))) - IF NOT rsCheck.EOF THEN - machineid = rsCheck("machineid") - ELSE - machineid = 0 ' Not found - END IF - END IF - rsCheck.Close - Set rsCheck = Nothing - END IF - - IF machineid = 0 THEN - objConn.Close - Response.Redirect("default.asp") - Response.End - END IF - - '============================================================================= - ' SECURITY: Use parameterized query to prevent SQL injection - '============================================================================= - strSQL = "SELECT machines.*, machinetypes.*, models.*, businessunits.*, vendors.*, functionalaccounts.*, " & _ - "printers.ipaddress AS printerip, printers.printerid, printers.printercsfname, printers.printerwindowsname, " & _ - "pc.pcid, pc.hostname, pc.loggedinuser AS LoggedInUser, pc_network_interfaces.IPAddress AS pcip " & _ - "FROM machines " & _ - "INNER JOIN models ON machines.modelnumberid = models.modelnumberid " & _ - "LEFT JOIN machinetypes ON models.machinetypeid = machinetypes.machinetypeid " & _ - "INNER JOIN businessunits ON machines.businessunitid = businessunits.businessunitid " & _ - "LEFT JOIN functionalaccounts ON machinetypes.functionalaccountid = functionalaccounts.functionalaccountid " & _ - "INNER JOIN vendors ON models.vendorid = vendors.vendorid " & _ - "LEFT JOIN printers ON machines.printerid = printers.printerid " & _ - "LEFT JOIN pc ON pc.machinenumber = machines.machinenumber " & _ - "LEFT JOIN pc_network_interfaces ON pc_network_interfaces.pcid = pc.pcid AND pc_network_interfaces.DefaultGateway IS NOT NULL " & _ - "WHERE machines.machineid = ?" - - Set rs = ExecuteParameterizedQuery(objConn, strSQL, Array(machineid)) - - ' Check if machine exists - If rs.EOF Then - rs.Close - Set rs = Nothing - objConn.Close - Response.Redirect("default.asp") - Response.End - End If -%> - - - - -
- - -
- - - - -
- -
-
- -
-
-
-
- " alt="Card image cap"> -
-
- " alt="profile-image" class="profile"> -
<%=Server.HTMLEncode(rs("machinenumber") & "")%>
-
<%=Server.HTMLEncode(rs("vendor") & "")%>
-
<%=Server.HTMLEncode(rs("machinetype") & "")%>
-

<%=Server.HTMLEncode(rs("machinedescription") & "")%>

-
- -
-
- -
-
-
- -
-
-
Configuration
-
-
-

Location:

-

Vendor:

-

Model:

-

Function:

-

BU:

-

IP Address:

-

MAC Address:

-

Controlling PC:

-

Printer:

-

- -

-
-
-<% -Dim machineNumVal, vendorValM, modelValM, machineTypeVal, buVal - -' Get values and default to N/A if empty -machineNumVal = rs("machinenumber") & "" -If machineNumVal = "" Then machineNumVal = "N/A" - -vendorValM = rs("vendor") & "" -If vendorValM = "" Then vendorValM = "N/A" - -modelValM = rs("modelnumber") & "" -If modelValM = "" Then modelValM = "N/A" - -machineTypeVal = rs("machinetype") & "" -If machineTypeVal = "" Then machineTypeVal = "N/A" - -buVal = rs("businessunit") & "" -If buVal = "" Then buVal = "N/A" -%> -

-<% -If machineNumVal <> "N/A" Then -%> - - <%=Server.HTMLEncode(machineNumVal)%> - -<% -Else - Response.Write("N/A") -End If -%> -

-

<%=Server.HTMLEncode(vendorValM)%>

-

<%=Server.HTMLEncode(modelValM)%>

-

<%=Server.HTMLEncode(machineTypeVal)%>

-

<%=Server.HTMLEncode(buVal)%>

-<% -' Get primary communication (IP and MAC) from communications table -Dim rsPrimaryCom, strPrimaryComSQL, primaryIP, primaryMAC -strPrimaryComSQL = "SELECT address, macaddress FROM communications WHERE machineid = ? AND isprimary = 1 AND isactive = 1 LIMIT 1" -Set rsPrimaryCom = ExecuteParameterizedQuery(objConn, strPrimaryComSQL, Array(machineid)) - -If Not rsPrimaryCom.EOF Then - primaryIP = rsPrimaryCom("address") & "" - primaryMAC = rsPrimaryCom("macaddress") & "" -Else - ' Try to get first active communication if no primary set - rsPrimaryCom.Close - strPrimaryComSQL = "SELECT address, macaddress FROM communications WHERE machineid = ? AND isactive = 1 ORDER BY comid LIMIT 1" - Set rsPrimaryCom = ExecuteParameterizedQuery(objConn, strPrimaryComSQL, Array(machineid)) - If Not rsPrimaryCom.EOF Then - primaryIP = rsPrimaryCom("address") & "" - primaryMAC = rsPrimaryCom("macaddress") & "" - Else - primaryIP = "" - primaryMAC = "" - End If -End If -rsPrimaryCom.Close -Set rsPrimaryCom = Nothing - -' Display IP Address -If primaryIP <> "" Then - Response.Write("

" & Server.HTMLEncode(primaryIP) & "

") -Else - Response.Write("

N/A

") -End If - -' Display MAC Address -If primaryMAC <> "" Then - Response.Write("

" & Server.HTMLEncode(primaryMAC) & "

") -Else - Response.Write("

N/A

") -End If - -' Get controlling PC from relationships -Dim rsControlPC, strControlPCSQL, controlPCHostname, controlPCID -strControlPCSQL = "SELECT m.machineid, m.hostname, m.machinenumber FROM machinerelationships mr " & _ - "JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid " & _ - "JOIN machines m ON mr.machineid = m.machineid " & _ - "WHERE mr.related_machineid = ? AND rt.relationshiptype = 'Controls' AND mr.isactive = 1 LIMIT 1" -Set rsControlPC = ExecuteParameterizedQuery(objConn, strControlPCSQL, Array(machineid)) - -If Not rsControlPC.EOF Then - controlPCHostname = rsControlPC("hostname") & "" - controlPCID = rsControlPC("machineid") - If controlPCHostname = "" Then controlPCHostname = rsControlPC("machinenumber") & "" - Response.Write("

" & Server.HTMLEncode(controlPCHostname) & "

") -Else - Response.Write("

N/A

") -End If -rsControlPC.Close -Set rsControlPC = Nothing - -' SECURITY: HTML encode printer data to prevent XSS -' Printer data - check if exists (LEFT JOIN may return NULL) -If Not IsNull(rs("printerid")) And rs("printerid") <> "" Then - Dim printerNameVal - printerNameVal = rs("printerwindowsname") & "" - If printerNameVal = "" Then printerNameVal = "Printer #" & rs("printerid") - - Response.Write("

" & Server.HTMLEncode(printerNameVal) & "

") -Else - Response.Write("

N/A

") -End If -%> -
-
-
-
-
-
- -
-
-
Network Communications
-
- - - - - - - - - - - - -<% - ' Query communications for this machine - strSQL2 = "SELECT c.*, ct.typename FROM communications c " & _ - "JOIN comstypes ct ON c.comstypeid = ct.comstypeid " & _ - "WHERE c.machineid = ? AND c.isactive = 1 ORDER BY c.isprimary DESC, c.comid ASC" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(machineid)) - - If rs2.EOF Then - Response.Write("") - Else - Do While Not rs2.EOF - Dim ipAddr, macAddr, ifaceName, isPrimary, statusBadge - ipAddr = rs2("address") & "" - macAddr = rs2("macaddress") & "" - ifaceName = rs2("interfacename") & "" - isPrimary = rs2("isprimary") - - If ipAddr = "" Then ipAddr = "N/A" - If macAddr = "" Then macAddr = "N/A" - If ifaceName = "" Then ifaceName = "N/A" - - If isPrimary Then - statusBadge = "Primary" - Else - statusBadge = "" - End If - - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - rs2.MoveNext - Loop - End If - rs2.Close - Set rs2 = Nothing -%> - -
TypeIP AddressMAC AddressInterfacePrimaryStatus
No network communications configured
" & Server.HTMLEncode(rs2("typename") & "") & "" & ipAddr & "" & macAddr & "" & ifaceName & "" & statusBadge & "Active
-
-
-
-
Machine Relationships
- - -
Controlled By PC
-
- - - - - - - - - -<% - ' Query PCs that control this machine - strSQL2 = "SELECT m.machineid, m.machinenumber, m.hostname, c.address, rt.relationshiptype " & _ - "FROM machinerelationships mr " & _ - "JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid " & _ - "JOIN machines m ON mr.machineid = m.machineid " & _ - "LEFT JOIN communications c ON m.machineid = c.machineid AND c.isprimary = 1 " & _ - "WHERE mr.related_machineid = ? AND rt.relationshiptype = 'Controls' AND mr.isactive = 1" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(machineid)) - - If rs2.EOF Then - Response.Write("") - Else - Do While Not rs2.EOF - Dim pcHostname, pcIP, pcMachineID - pcHostname = rs2("hostname") & "" - pcIP = rs2("address") & "" - pcMachineID = rs2("machineid") - - If pcHostname = "" Then pcHostname = rs2("machinenumber") & "" - If pcIP = "" Then pcIP = "N/A" - - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - rs2.MoveNext - Loop - End If - rs2.Close - Set rs2 = Nothing -%> - -
PC HostnameIP AddressRelationship
No controlling PC assigned
" & Server.HTMLEncode(pcHostname) & "" & pcIP & "" & Server.HTMLEncode(rs2("relationshiptype") & "") & "
-
- - -
Dualpath / Redundant Machines
-
- - - - - - - - - - -<% - ' Query dualpath relationships - strSQL2 = "SELECT m.machineid, m.machinenumber, mt.machinetype, mo.modelnumber, rt.relationshiptype " & _ - "FROM machinerelationships mr " & _ - "JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid " & _ - "JOIN machines m ON mr.related_machineid = m.machineid " & _ - "LEFT JOIN models mo ON m.modelnumberid = mo.modelnumberid " & _ - "LEFT JOIN machinetypes mt ON mo.machinetypeid = mt.machinetypeid " & _ - "WHERE mr.machineid = ? AND rt.relationshiptype = 'Dualpath' AND mr.isactive = 1" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(machineid)) - - If rs2.EOF Then - Response.Write("") - Else - Do While Not rs2.EOF - Dim dualMachineNum, dualType, dualModel, dualMachineID - dualMachineNum = rs2("machinenumber") & "" - dualType = rs2("machinetype") & "" - dualModel = rs2("modelnumber") & "" - dualMachineID = rs2("machineid") - - If dualType = "" Then dualType = "N/A" - If dualModel = "" Then dualModel = "N/A" - - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - rs2.MoveNext - Loop - End If - rs2.Close - Set rs2 = Nothing -%> - -
Machine NumberTypeModelRelationship
No dualpath relationships
" & Server.HTMLEncode(dualMachineNum) & "" & dualType & "" & dualModel & "" & Server.HTMLEncode(rs2("relationshiptype") & "") & "
-
-
-
-
Compliance & Security
-<% - ' Query compliance data - strSQL2 = "SELECT * FROM compliance WHERE machineid = ?" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(machineid)) - - If Not rs2.EOF Then -%> -
-
-

Third Party Managed:

-

Third Party Manager:

-

OT Asset System:

-

DoD Asset Device Type:

-

Compliant:

-
-
-<% - Dim thirdPartyManaged, thirdPartyManager, otAssetSystem, dodAssetDeviceType, isCompliant - thirdPartyManaged = rs2("is_third_party_managed") & "" - thirdPartyManager = rs2("third_party_manager") & "" - otAssetSystem = rs2("ot_asset_system") & "" - dodAssetDeviceType = rs2("ot_asset_device_type") & "" - isCompliant = rs2("is_compliant") - - ' Third party managed badge - Dim tpmBadge - If thirdPartyManaged = "Yes" Then - tpmBadge = "Yes" - ElseIf thirdPartyManaged = "No" Then - tpmBadge = "No" - Else - tpmBadge = "N/A" - End If -%> -

<%=tpmBadge%>

-

<%=Server.HTMLEncode(thirdPartyManager)%>

-

<%=Server.HTMLEncode(otAssetSystem)%>

-

<%=Server.HTMLEncode(dodAssetDeviceType)%>

-

-<% - If Not IsNull(isCompliant) Then - If isCompliant Then - Response.Write("Yes") - Else - Response.Write("No") - End If - Else - Response.Write("Not Assessed") - End If -%> -

-
-
- -
- -
Security Scans
-
- - - - - - - - - - -<% - rs2.Close - Set rs2 = Nothing - - ' Query security scans - strSQL2 = "SELECT * FROM compliancescans WHERE machineid = ? ORDER BY scan_date DESC LIMIT 10" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(machineid)) - - If rs2.EOF Then - Response.Write("") - Else - Do While Not rs2.EOF - Dim scanName, scanDate, scanResult, scanDetails, resultBadge - scanName = rs2("scan_name") & "" - scanDate = rs2("scan_date") & "" - scanResult = rs2("scan_result") & "" - scanDetails = rs2("scan_details") & "" - - If scanName = "" Then scanName = "Security Scan" - If scanDetails = "" Then scanDetails = "No details" - - ' Result badge - Select Case LCase(scanResult) - Case "pass" - resultBadge = "Pass" - Case "fail" - resultBadge = "Fail" - Case "warning" - resultBadge = "Warning" - Case Else - resultBadge = "Info" - End Select - - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - rs2.MoveNext - Loop - End If - rs2.Close - Set rs2 = Nothing -%> - -
Scan NameDateResultDetails
No security scans recorded
" & Server.HTMLEncode(scanName) & "" & Server.HTMLEncode(scanDate) & "" & resultBadge & "" & scanDetails & "
-
-<% - Else - Response.Write("

No compliance data available for this machine.

") - rs2.Close - Set rs2 = Nothing - End If -%> -
-
-
- - -<% - '============================================================================= - ' SECURITY: Use parameterized query for installed applications - '============================================================================= - strSQL2 = "SELECT * FROM installedapps, applications WHERE installedapps.appid = applications.appid AND installedapps.isactive = 1 AND installedapps.machineid = ? ORDER BY appname ASC" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(machineid)) - Do While Not rs2.EOF - Response.Write("") - rs2.MoveNext - Loop - rs2.Close - Set rs2 = Nothing -%> - -
" & Server.HTMLEncode(rs2("appname") & "") & "
-
-
- - - -
-
-
- -
-
- -
- -
-
- - - -
-
-
- -
- -
-
- - "> - "> - -
- -
- -
- Current position: X=<%=Server.HTMLEncode(rs("mapleft") & "")%>, Y=<%=Server.HTMLEncode(rs("maptop") & "")%> -
-
-
-
- -
-
- -
-
-
- -
- --> -
-
-
-
- -
- - -
- - -
- - - - - - - -
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- Select Machine Location - -
-
-
-
-
- Click on the map to select a location -
- - -
-
-
-
- - - - - -<% -'============================================================================= -' CLEANUP -'============================================================================= -objConn.Close -%> diff --git a/displaymachine.asp.bak b/displaymachine.asp.bak deleted file mode 100644 index 682cf76..0000000 --- a/displaymachine.asp.bak +++ /dev/null @@ -1,793 +0,0 @@ -<% -'============================================================================= -' FILE: displaymachine.asp -' PURPOSE: Display detailed machine information with edit capability -' SECURITY: Parameterized queries, HTML encoding, input validation -' UPDATED: 2025-11-07 - Fixed for Phase 2 schema (machines + communications) -'============================================================================= -%> - - - - - - - - - - -<% - theme = Request.Cookies("theme") - If theme = "" Then - theme = "bg-theme1" - End If - - '============================================================================= - ' SECURITY: Validate machineid parameter - '============================================================================= - Dim machineid - machineid = GetSafeInteger("QS", "machineid", 0, 1, 999999) - - IF machineid = 0 THEN - objConn.Close - Response.Redirect("default.asp") - Response.End - END IF - - '============================================================================= - ' PHASE 2 SCHEMA: Query machines table with LEFT JOINs for optional data - ' - No more pc/pc_network_interfaces/pc_dualpath_assignments tables - ' - Use communications for network interfaces - ' - Use machinerelationships for dualpath relationships - ' - Use compliance for compliance data - '============================================================================= - strSQL = "SELECT machines.*, models.modelnumber, vendors.vendor, " & _ - "businessunits.businessunit, machinetypes.machinetype " & _ - "FROM machines " & _ - "INNER JOIN models ON machines.modelnumberid = models.modelnumberid " & _ - "INNER JOIN vendors ON models.vendorid = vendors.vendorid " & _ - "INNER JOIN businessunits ON machines.businessunitid = businessunits.businessunitid " & _ - "LEFT JOIN machinetypes ON models.machinetypeid = machinetypes.machinetypeid " & _ - "WHERE machines.machineid = ?" - - Set rs = ExecuteParameterizedQuery(objConn, strSQL, Array(machineid)) - - ' Check if machine exists - If rs.EOF Then - rs.Close - Set rs = Nothing - objConn.Close - Response.Redirect("default.asp") - Response.End - End If - - '============================================================================= - ' Get primary network interface from communications table - '============================================================================= - Dim rsPrimaryNetwork, primaryIP, primaryMAC, primaryHostname, primaryInterface - primaryIP = "" - primaryMAC = "" - primaryHostname = "" - primaryInterface = "" - - ' Get hostname from machines table (for PCs) - If Not IsNull(rs("hostname")) And rs("hostname") & "" <> "" Then - primaryHostname = rs("hostname") & "" - End If - - ' Query for primary network interface - strSQL = "SELECT c.address, c.macaddress, c.interfacename " & _ - "FROM communications c " & _ - "INNER JOIN comstypes ct ON c.comstypeid = ct.comstypeid " & _ - "WHERE c.machineid = ? AND ct.typename = 'Network_Interface' " & _ - "AND c.isactive = 1 AND c.isprimary = 1 " & _ - "LIMIT 1" - Set rsPrimaryNetwork = ExecuteParameterizedQuery(objConn, strSQL, Array(machineid)) - - If Not rsPrimaryNetwork.EOF Then - primaryIP = rsPrimaryNetwork("address") & "" - If Not IsNull(rsPrimaryNetwork("macaddress")) Then - primaryMAC = rsPrimaryNetwork("macaddress") & "" - End If - If Not IsNull(rsPrimaryNetwork("interfacename")) Then - primaryInterface = rsPrimaryNetwork("interfacename") & "" - End If - End If - rsPrimaryNetwork.Close - Set rsPrimaryNetwork = Nothing - - ' If no primary, get the first network interface - If primaryIP = "" Then - strSQL = "SELECT c.address, c.macaddress, c.interfacename " & _ - "FROM communications c " & _ - "INNER JOIN comstypes ct ON c.comstypeid = ct.comstypeid " & _ - "WHERE c.machineid = ? AND ct.typename = 'Network_Interface' " & _ - "AND c.isactive = 1 " & _ - "ORDER BY c.comid ASC LIMIT 1" - Set rsPrimaryNetwork = ExecuteParameterizedQuery(objConn, strSQL, Array(machineid)) - - If Not rsPrimaryNetwork.EOF Then - primaryIP = rsPrimaryNetwork("address") & "" - If Not IsNull(rsPrimaryNetwork("macaddress")) Then - primaryMAC = rsPrimaryNetwork("macaddress") & "" - End If - If Not IsNull(rsPrimaryNetwork("interfacename")) Then - primaryInterface = rsPrimaryNetwork("interfacename") & "" - End If - End If - rsPrimaryNetwork.Close - Set rsPrimaryNetwork = Nothing - End If - - '============================================================================= - ' Query dualpath relationships from machinerelationships table - '============================================================================= - Dim rsDualpath, isDualpath, relatedMachineNumber, relatedMachineId - isDualpath = False - relatedMachineNumber = "" - relatedMachineId = 0 - - strSQL = "SELECT mr.related_machineid, m2.machinenumber " & _ - "FROM machinerelationships mr " & _ - "INNER JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid " & _ - "INNER JOIN machines m2 ON mr.related_machineid = m2.machineid " & _ - "WHERE mr.machineid = ? AND rt.relationshiptype = 'Dualpath' AND mr.isactive = 1 " & _ - "LIMIT 1" - Set rsDualpath = ExecuteParameterizedQuery(objConn, strSQL, Array(machineid)) - - If Not rsDualpath.EOF Then - isDualpath = True - relatedMachineId = rsDualpath("related_machineid") - relatedMachineNumber = rsDualpath("machinenumber") & "" - End If - rsDualpath.Close - Set rsDualpath = Nothing -%> - - - - -
- - -
- - - - -
- -
-
- -
-
-
-
- " alt="Card image cap"> -
-
- " alt="profile-image" class="profile"> -
<%=Server.HTMLEncode(rs("machinenumber") & "")%>
-
<%=Server.HTMLEncode(rs("vendor") & "")%>
-
<%=Server.HTMLEncode(rs("machinetype") & "")%>
-

<%=Server.HTMLEncode(rs("machinedescription") & "")%>

-
- -
-
- -
-
-
- -
-
-
Configuration
-
-
-

Machine #:

-

Alias:

-

Hostname:

-

Location:

-

Vendor:

-

Model:

-

Type:

-

BU:

-

Controller:

-

Serial #:

-

IP Address:

-

VLAN:

-

Criticality:

-

Printer:

-<% If isDualpath Then %> -

Dualpath:

-<% End If %> -

- -

-
-
-<% -Dim machineNumVal, aliasVal, hostnameVal, vendorValM, modelValM, machineTypeVal, buVal - -' Get values and default to N/A if empty -machineNumVal = rs("machinenumber") & "" -If machineNumVal = "" Then machineNumVal = "N/A" - -aliasVal = rs("alias") & "" -If aliasVal = "" Then aliasVal = "N/A" - -hostnameVal = primaryHostname -If hostnameVal = "" Then hostnameVal = "N/A" - -vendorValM = rs("vendor") & "" -If vendorValM = "" Then vendorValM = "N/A" - -modelValM = rs("modelnumber") & "" -If modelValM = "" Then modelValM = "N/A" - -machineTypeVal = rs("machinetype") & "" -If machineTypeVal = "" Then machineTypeVal = "N/A" - -buVal = rs("businessunit") & "" -If buVal = "" Then buVal = "N/A" -%> -

-<% -If machineNumVal <> "N/A" Then -%> - - <%=Server.HTMLEncode(machineNumVal)%> - -<% -Else - Response.Write("N/A") -End If -%> -

-

<%=Server.HTMLEncode(aliasVal)%>

-

-<% -If hostnameVal <> "N/A" And primaryIP <> "" Then -%> - <%=Server.HTMLEncode(hostnameVal)%> -<% -Else - Response.Write(Server.HTMLEncode(hostnameVal)) -End If -%> -

-

-<% -' Map location display -Dim mapLeft, mapTop -mapLeft = rs("mapleft") & "" -mapTop = rs("maptop") & "" -If mapLeft <> "" And mapTop <> "" Then - Response.Write(" Shop Floor (" & Server.HTMLEncode(mapLeft) & ", " & Server.HTMLEncode(mapTop) & ")") -Else - Response.Write("N/A") -End If -%> -

-

<%=Server.HTMLEncode(vendorValM)%>

-

<%=Server.HTMLEncode(modelValM)%>

-

<%=Server.HTMLEncode(machineTypeVal)%>

-

<%=Server.HTMLEncode(buVal)%>

-<% -' Controller information -' Controller info commented out - not in simplified query -' If Not IsNull(rs("controller_vendor")) And rs("controller_vendor") & "" <> "" Then -' Dim controllerDisplay -' controllerDisplay = rs("controller_vendor") & "" -' If Not IsNull(rs("controller_model")) And rs("controller_model") & "" <> "" Then -' controllerDisplay = controllerDisplay & " " & rs("controller_model") & "" -' End If -' Response.Write("

" & Server.HTMLEncode(controllerDisplay) & "

") -' Else - Response.Write("

N/A

") -' End If - -' Serial number -If Not IsNull(rs("serialnumber")) And rs("serialnumber") & "" <> "" Then - Response.Write("

" & Server.HTMLEncode(rs("serialnumber") & "") & "

") -Else - Response.Write("

N/A

") -End If - -' IP Address -If primaryIP <> "" Then - Response.Write("

" & Server.HTMLEncode(primaryIP) & "

") -Else - Response.Write("

N/A

") -End If - -' VLAN -If Not IsNull(rs("vlan")) And rs("vlan") & "" <> "" Then - Response.Write("

VLAN " & Server.HTMLEncode(rs("vlan") & "") & "

") -Else - Response.Write("

N/A

") -End If - -' Asset Criticality -If Not IsNull(rs("asset_criticality")) And rs("asset_criticality") & "" <> "" Then - Dim criticalityBadge, criticalityVal - criticalityVal = rs("asset_criticality") & "" - Select Case UCase(criticalityVal) - Case "HIGH" - criticalityBadge = " High" - Case "MEDIUM" - criticalityBadge = "Medium" - Case "LOW" - criticalityBadge = "Low" - Case Else - criticalityBadge = Server.HTMLEncode(criticalityVal) - End Select - Response.Write("

" & criticalityBadge & "

") -Else - Response.Write("

N/A

") -End If - -' Printer data - check if exists (LEFT JOIN may return NULL) -If Not IsNull(rs("printerid")) And rs("printerid") <> "" Then - Dim printerNameVal - printerNameVal = rs("printerwindowsname") & "" - If printerNameVal = "" Then printerNameVal = "Printer #" & rs("printerid") - - Response.Write("

" & Server.HTMLEncode(printerNameVal) & "

") -Else - Response.Write("

N/A

") -End If - -' Dualpath information -If isDualpath Then - Response.Write("

" & Server.HTMLEncode(relatedMachineNumber) & "

") -End If -%> -
-
-
Notes
- -
-
- -
- -
-
Network Interfaces
-
- - - - - - - - - - - -<% - '============================================================================= - ' Query all network interfaces from communications table - '============================================================================= - strSQL2 = "SELECT c.address, c.macaddress, c.interfacename, c.isprimary, c.isdhcp " & _ - "FROM communications c " & _ - "INNER JOIN comstypes ct ON c.comstypeid = ct.comstypeid " & _ - "WHERE c.machineid = ? AND ct.typename = 'Network_Interface' AND c.isactive = 1 " & _ - "ORDER BY c.isprimary DESC, c.comid ASC" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(machineid)) - - If rs2.EOF Then - Response.Write("") - Else - Do While Not rs2.EOF - Dim interfaceNameVal, ipAddressVal, macAddressVal, isPrimaryVal, isDHCPVal - - interfaceNameVal = rs2("interfacename") & "" - If interfaceNameVal = "" Then interfaceNameVal = "Unknown" - - ipAddressVal = rs2("address") & "" - If ipAddressVal = "" Then ipAddressVal = "N/A" - - macAddressVal = rs2("macaddress") & "" - If macAddressVal = "" Then macAddressVal = "N/A" - - isPrimaryVal = rs2("isprimary") - isDHCPVal = rs2("isdhcp") - - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - - If isDHCPVal = 1 Or isDHCPVal = True Then - Response.Write("") - Else - Response.Write("") - End If - - If isPrimaryVal = 1 Or isPrimaryVal = True Then - Response.Write("") - Else - Response.Write("") - End If - - Response.Write("") - rs2.MoveNext - Loop - End If - rs2.Close - Set rs2 = Nothing -%> - -
InterfaceIP AddressMAC AddressTypePrimary
No network interfaces found
" & Server.HTMLEncode(interfaceNameVal) & "" & Server.HTMLEncode(ipAddressVal) & "" & Server.HTMLEncode(macAddressVal) & "DHCPStatic
-
- -
Other Communications
-
- - - - - - - - - - -<% - '============================================================================= - ' Query other communication types (Serial, IP, USB, etc.) - '============================================================================= - strSQL2 = "SELECT c.address, c.port, c.portname, c.description, c.baud, c.databits, c.stopbits, c.parity, ct.typename " & _ - "FROM communications c " & _ - "INNER JOIN comstypes ct ON c.comstypeid = ct.comstypeid " & _ - "WHERE c.machineid = ? AND ct.typename != 'Network_Interface' AND c.isactive = 1 " & _ - "ORDER BY ct.typename, c.comid ASC" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(machineid)) - - If rs2.EOF Then - Response.Write("") - Else - Do While Not rs2.EOF - Dim typeNameVal, addressVal, detailsVal, descriptionVal - - typeNameVal = rs2("typename") & "" - addressVal = rs2("address") & "" - - ' Build details based on type - detailsVal = "" - If typeNameVal = "Serial" Then - If Not IsNull(rs2("baud")) Then detailsVal = rs2("baud") & " baud" - If Not IsNull(rs2("databits")) And rs2("databits") & "" <> "" Then - If detailsVal <> "" Then detailsVal = detailsVal & ", " - detailsVal = detailsVal & rs2("databits") & "N" & rs2("stopbits") & "" - End If - ElseIf typeNameVal = "IP" Then - If Not IsNull(rs2("port")) Then detailsVal = "Port " & rs2("port") - End If - - descriptionVal = rs2("description") & "" - If descriptionVal = "" Then descriptionVal = "-" - - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - - rs2.MoveNext - Loop - End If - rs2.Close - Set rs2 = Nothing -%> - -
TypeAddress/PortDetailsDescription
No other communications found
" & Server.HTMLEncode(typeNameVal) & "" & Server.HTMLEncode(addressVal) & "" & Server.HTMLEncode(detailsVal) & "" & Server.HTMLEncode(descriptionVal) & "
-
-
- -
-
Machine Relationships
-
- - - - - - - - - -<% - '============================================================================= - ' Query machine relationships from machinerelationships table - '============================================================================= - strSQL2 = "SELECT mr.related_machineid, mr.relationship_notes, rt.relationshiptype, m2.machinenumber " & _ - "FROM machinerelationships mr " & _ - "INNER JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid " & _ - "INNER JOIN machines m2 ON mr.related_machineid = m2.machineid " & _ - "WHERE mr.machineid = ? AND mr.isactive = 1 " & _ - "ORDER BY rt.relationshiptype, m2.machinenumber" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(machineid)) - - If rs2.EOF Then - Response.Write("") - Else - Do While Not rs2.EOF - Dim relationshipTypeVal, relatedMachineVal, notesVal - - relationshipTypeVal = rs2("relationshiptype") & "" - relatedMachineVal = rs2("machinenumber") & "" - notesVal = rs2("relationship_notes") & "" - If notesVal = "" Then notesVal = "-" - - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - - rs2.MoveNext - Loop - End If - rs2.Close - Set rs2 = Nothing -%> - -
Relationship TypeRelated MachineNotes
No relationships found
" & Server.HTMLEncode(relationshipTypeVal) & "" & Server.HTMLEncode(relatedMachineVal) & "" & Server.HTMLEncode(notesVal) & "
-
-
- -
-
Compliance & Security
-
-
-
Management & Access
-

Third Party Managed:

-

-<% -If Not IsNull(rs("is_third_party_managed")) And rs("is_third_party_managed") & "" <> "" Then - Dim thirdPartyVal - thirdPartyVal = rs("is_third_party_managed") & "" - If UCase(thirdPartyVal) = "YES" Or thirdPartyVal = "Yes" Then - Response.Write("Yes") - ElseIf UCase(thirdPartyVal) = "NO" Or thirdPartyVal = "No" Then - Response.Write("No") - Else - Response.Write(Server.HTMLEncode(thirdPartyVal)) - End If -Else - Response.Write("Not Specified") -End If -%> -

- -

Managed By:

-

-<% -If Not IsNull(rs("third_party_manager")) And rs("third_party_manager") & "" <> "" Then - Response.Write(" " & Server.HTMLEncode(rs("third_party_manager") & "") & "") -Else - Response.Write("Not Specified") -End If -%> -

- -

Last Scan:

-

-<% -If Not IsNull(rs("scan_date")) And rs("scan_date") & "" <> "" Then - Response.Write(Server.HTMLEncode(rs("scan_date") & "")) -Else - Response.Write("Never Scanned") -End If -%> -

- -

Scan Result:

-

-<% -If Not IsNull(rs("scan")) And rs("scan") & "" <> "" Then - Response.Write(Server.HTMLEncode(rs("scan") & "")) -Else - Response.Write("N/A") -End If -%> -

-
- -
-
OT Asset Information
- -

OT Asset System:

-

-<% -If Not IsNull(rs("ot_asset_system")) And rs("ot_asset_system") & "" <> "" Then - Response.Write(Server.HTMLEncode(rs("ot_asset_system") & "")) -Else - Response.Write("Not Specified") -End If -%> -

- -

OT Device Type:

-

-<% -If Not IsNull(rs("ot_asset_device_type")) And rs("ot_asset_device_type") & "" <> "" Then - Response.Write(Server.HTMLEncode(rs("ot_asset_device_type") & "")) -Else - Response.Write("Not Specified") -End If -%> -

- -

MFT:

-

-<% -If Not IsNull(rs("mft")) And rs("mft") & "" <> "" Then - Response.Write(Server.HTMLEncode(rs("mft") & "")) -Else - Response.Write("Not Specified") -End If -%> -

- -

Deployment Notes:

-

-<% -' TEXT fields in MySQL require special handling in classic ASP -Dim deploymentNotesValue -On Error Resume Next -deploymentNotesValue = "" -If Not IsNull(rs("deployment_notes")) Then - deploymentNotesValue = rs("deployment_notes").Value -End If -On Error Goto 0 - -If deploymentNotesValue <> "" And Not IsNull(deploymentNotesValue) Then - Response.Write("" & Server.HTMLEncode(deploymentNotesValue) & "") -Else - Response.Write("No deployment notes") -End If -%> -

-
-
-
- -
-
- - - - - - - - -<% - '============================================================================= - ' SECURITY: Use parameterized query for installed applications - '============================================================================= - strSQL2 = "SELECT app.appname, ia.version " & _ - "FROM installedapps ia " & _ - "INNER JOIN applications app ON ia.appid = app.appid " & _ - "WHERE ia.machineid = ? AND ia.isactive = 1 " & _ - "ORDER BY app.appname ASC" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(machineid)) - - If rs2.EOF Then - Response.Write("") - Else - Do While Not rs2.EOF - Dim appNameVal, versionVal - appNameVal = rs2("appname") & "" - versionVal = rs2("version") & "" - If versionVal = "" Then versionVal = "N/A" - - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - rs2.MoveNext - Loop - End If - rs2.Close - Set rs2 = Nothing -%> - -
Application NameVersion
No applications installed
" & Server.HTMLEncode(appNameVal) & "" & Server.HTMLEncode(versionVal) & "
-
-
-
-
-
-
- -
- - -
- - -
- - -
- - - - - - - - - - - - -
- -<% -' Clean up -rs.Close -Set rs = Nothing -objConn.Close -Set objConn = Nothing -%> - - - - - - - - - - - - - - - - - - diff --git a/displaypc.asp.backup-20251027 b/displaypc.asp.backup-20251027 deleted file mode 100644 index b2a1174..0000000 --- a/displaypc.asp.backup-20251027 +++ /dev/null @@ -1,837 +0,0 @@ - - - - - - - -<% - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF - - pcid = Request.Querystring("pcid") - - strSQL = "SELECT pc.*,vendors.*,models.*,pc_network_interfaces.*,machines.machineid,machines.machinenumber as machine_number,machines.alias,machines.machinetypeid,machinetypes.machinetype,machines.businessunitid,businessunits.businessunit,machines.printerid,printers.printerwindowsname,pctype.typename,functionalaccounts.functionalaccount,functionalaccounts.description as functionalaccount_description " & _ - "FROM pc " & _ - "LEFT JOIN models ON pc.modelnumberid=models.modelnumberid " & _ - "LEFT JOIN vendors ON models.vendorid=vendors.vendorid " & _ - "LEFT JOIN pc_network_interfaces ON pc_network_interfaces.pcid=pc.pcid " & _ - "LEFT JOIN machines ON pc.machinenumber = machines.machinenumber " & _ - "LEFT JOIN machinetypes ON machines.machinetypeid = machinetypes.machinetypeid " & _ - "LEFT JOIN businessunits ON machines.businessunitid = businessunits.businessunitid " & _ - "LEFT JOIN printers ON machines.printerid = printers.printerid " & _ - "LEFT JOIN pctype ON pc.pctypeid = pctype.pctypeid " & _ - "LEFT JOIN functionalaccounts ON pctype.functionalaccountid = functionalaccounts.functionalaccountid " & _ - "WHERE pc.isactive=1 AND pc.pcid="&pcid - - 'response.write (strSQL) - 'response.end - set rs = objconn.Execute(strSQL) - - ' Check if PC exists - IF rs.EOF THEN - objConn.Close - Response.Redirect("displaypcs.asp") - Response.End - END IF - - ' Get machine ID if it exists - IF NOT rs.EOF THEN - IF NOT IsNull(rs("machineid")) THEN - machineid = rs("machineid") - ELSE - machineid = 0 - END IF - END IF -%> - - - - -
- - -
- - - - -
- -
-
- -
-
-
-
- " alt="Card image cap"> -
-
- " alt="profile-image" class="profile"> -
<%Response.Write(rs("vendor"))%>
-
- -
-
- -
-
-
- -
-
-
Configuration
-
-
-

Vendor:

-

Model:

-

Serial:

-

Hostname:

-

Location:

-

IP:

-

Functional Account:

-
-
-

<%Response.Write(rs("vendor"))%>

-

<%Response.Write(rs("modelnumber"))%>

-

<%Response.Write(rs("serialnumber"))%>

-

:5900" title="VNC To Desktop"><%Response.Write(rs("hostname"))%>

-

-<% - IF machineid > 0 THEN - Dim locationDisplay - ' Use alias if available, otherwise machine_number - IF NOT IsNull(rs("alias")) AND rs("alias") <> "" THEN - locationDisplay = rs("alias") - ELSE - locationDisplay = rs("machine_number") - END IF - Response.Write("" & locationDisplay & "") - ELSE - Response.Write("Not assigned") - END IF -%> -

-

-<% - IF NOT IsNull(rs("ipaddress")) AND rs("ipaddress") <> "" THEN - Response.Write(rs("ipaddress")) - ELSE - Response.Write("N/A") - END IF -%> -

-

-<% - IF NOT IsNull(rs("functionalaccount")) AND rs("functionalaccount") <> "" THEN - Dim accountDisplay, descDisplay, extractedAccount - Dim pcTypeName - pcTypeName = "" - IF NOT IsNull(rs("typename")) THEN - pcTypeName = UCase(Trim(rs("typename") & "")) - END IF - - ' Check if loggedinuser exists and should be used - Dim useLoggedInUser - useLoggedInUser = False - IF NOT IsNull(rs("LoggedInUser")) AND rs("LoggedInUser") <> "" THEN - ' Use loggedinuser for Standard, Engineer, or TBD types - IF pcTypeName = "STANDARD" OR pcTypeName = "ENGINEER" OR rs("functionalaccount") = "TBD" OR rs("functionalaccount") = "1" THEN - useLoggedInUser = True - END IF - END IF - - IF useLoggedInUser THEN - accountDisplay = rs("LoggedInUser") - - ' Try to extract the account number from loggedinuser (format: lg[account]sd) - Dim loggedUser - loggedUser = rs("LoggedInUser") - IF Left(loggedUser, 2) = "lg" AND Right(loggedUser, 2) = "sd" AND Len(loggedUser) > 4 THEN - extractedAccount = Mid(loggedUser, 3, Len(loggedUser) - 4) - ELSE - extractedAccount = "" - END IF - ELSE - accountDisplay = "lg" & rs("functionalaccount") & "sd" - extractedAccount = "" - END IF - - ' Determine what description to show - Dim descField - descField = "" - - ' If showing plain SSO (not lg[account]sd format), label it as "SSO" - IF useLoggedInUser AND extractedAccount = "" THEN - descField = "SSO" - ' If we extracted an account from loggedinuser, look up its description - ELSEIF extractedAccount <> "" THEN - Dim rsDesc, sqlDesc - sqlDesc = "SELECT description FROM functionalaccounts WHERE functionalaccount = '" & Replace(extractedAccount, "'", "''") & "' AND isactive = 1" - Set rsDesc = objConn.Execute(sqlDesc) - IF NOT rsDesc.EOF THEN - IF NOT IsNull(rsDesc("description")) AND rsDesc("description") <> "" THEN - descField = rsDesc("description") & "" - END IF - END IF - rsDesc.Close - Set rsDesc = Nothing - ' Otherwise use functional account description from the query - ELSE - On Error Resume Next - descField = rs("functionalaccount_description") & "" - If descField = "" Then - descField = rs("description") & "" - End If - On Error Goto 0 - END IF - - IF descField <> "" AND NOT IsNull(descField) THEN - descDisplay = " - " & descField - ELSE - descDisplay = "" - END IF - - Response.Write(accountDisplay & descDisplay) - ELSE - Response.Write("N/A") - END IF -%> -

-
-
- -
- -
Warranty Information
-
-
-

Status:

-

End Date:

-

Days Remaining:

-

Service Level:

-

Last Checked:

-
-
-<% -Dim warrantyStatus, warrantyEndDate, warrantyDaysRemaining, warrantyServiceLevel, warrantyLastChecked -Dim warrantyStatusClass, warrantyBadge - -warrantyStatus = rs("warrantystatus") -warrantyEndDate = rs("warrantyenddate") -warrantyDaysRemaining = rs("warrantydaysremaining") -warrantyServiceLevel = rs("warrantyservicelevel") -warrantyLastChecked = rs("warrantylastchecked") - -' Determine warranty status badge -If IsNull(warrantyStatus) Or warrantyStatus = "" Then - warrantyBadge = "Unknown" -ElseIf LCase(warrantyStatus) = "active" Then - If Not IsNull(warrantyDaysRemaining) And IsNumeric(warrantyDaysRemaining) Then - If warrantyDaysRemaining < 30 Then - warrantyBadge = "Expiring Soon" - Else - warrantyBadge = "Active" - End If - Else - warrantyBadge = "Active" - End If -ElseIf LCase(warrantyStatus) = "expired" Then - warrantyBadge = "Expired" -Else - warrantyBadge = "" & warrantyStatus & "" -End If -%> -

<%Response.Write(warrantyBadge)%>

-

-<% -If Not IsNull(warrantyEndDate) And warrantyEndDate <> "" And warrantyEndDate <> "0000-00-00" Then - Response.Write(warrantyEndDate) -Else - Response.Write("Not available") -End If -%> -

-

-<% -If Not IsNull(warrantyDaysRemaining) And IsNumeric(warrantyDaysRemaining) Then - If warrantyDaysRemaining < 0 Then - Response.Write("" & Abs(warrantyDaysRemaining) & " days overdue") - ElseIf warrantyDaysRemaining < 30 Then - Response.Write("" & warrantyDaysRemaining & " days") - Else - Response.Write(warrantyDaysRemaining & " days") - End If -Else - Response.Write("Not available") -End If -%> -

-

-<% -If Not IsNull(warrantyServiceLevel) And warrantyServiceLevel <> "" Then - Response.Write(warrantyServiceLevel) -Else - Response.Write("Not available") -End If -%> -

-

-<% -If Not IsNull(warrantyLastChecked) And warrantyLastChecked <> "" Then - Response.Write(warrantyLastChecked) -Else - Response.Write("Never checked") -End If -%> -

-
-
-
-
-
- - -<% - - IF machineid > 0 THEN - strSQL2 = "SELECT * FROM installedapps,applications WHERE installedapps.appid=applications.appid AND installedapps.isactive=1 AND " &_ - "installedapps.machineid=" & machineid & " ORDER BY appname ASC" - set rs2 = objconn.Execute(strSQL2) - while not rs2.eof - Response.Write("") - rs2.movenext - wend - ELSE - Response.Write("") - END IF - -%> - -
"&rs2("appname")&"
No machine assigned - cannot display installed applications
-
-
-
-
- -
- -
-
- -
- -
-
-
-
- - - -
- -
-
- -
- -
-
-
-
- - - -
- -
- -
-
- - -
- -
- - -
-
-
-
-
-
-
-
- -
- - -
- - -
- -
- - - - - -
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - - - - -<% objConn.Close %> \ No newline at end of file diff --git a/displaypc.asp.broken b/displaypc.asp.broken deleted file mode 100644 index 4fe8167..0000000 --- a/displaypc.asp.broken +++ /dev/null @@ -1,1372 +0,0 @@ -<% -'============================================================================= -' FILE: displaypc.asp -' PURPOSE: Display detailed PC information with edit capability -' SECURITY: Parameterized queries, HTML encoding, input validation -' UPDATED: 2025-11-07 - Phase 2 migration (mirrors displaymachine.asp) -' NOTE: Uses machines table WHERE pctypeid IS NOT NULL to identify PCs -'============================================================================= -%> - - - - - - - - - - -<% - theme = Request.Cookies("theme") - If theme = "" Then - theme = "bg-theme1" - End If - - '============================================================================= - ' SECURITY: Validate pcid or hostname parameter - ' NOTE: This handles both database ID (pcid maps to pcid) and hostname - '============================================================================= - Dim pcid, hostname, paramValue - pcid = GetSafeInteger("QS", "pcid", 0, 1, 999999) - - ' If pcid not provided, try hostname parameter - IF pcid = 0 THEN - hostname = Request.QueryString("hostname") - IF hostname <> "" THEN - ' Look up pcid (pcid) by hostname - Dim rsLookup, strLookupSQL - strLookupSQL = "SELECT pcid FROM machines WHERE hostname = ? AND isactive = 1 AND pctypeid IS NOT NULL" - Set rsLookup = ExecuteParameterizedQuery(objConn, strLookupSQL, Array(hostname)) - IF NOT rsLookup.EOF THEN - pcid = rsLookup("pcid") - END IF - rsLookup.Close - Set rsLookup = Nothing - END IF - ELSE - ' We have a pcid, verify it exists and is a PC - Dim rsCheck - strLookupSQL = "SELECT pcid FROM machines WHERE pcid = ? AND isactive = 1 AND pctypeid IS NOT NULL" - Set rsCheck = ExecuteParameterizedQuery(objConn, strLookupSQL, Array(pcid)) - - ' If no PC found with that ID, try treating it as a hostname - IF rsCheck.EOF THEN - rsCheck.Close - strLookupSQL = "SELECT pcid FROM machines WHERE hostname = ? AND isactive = 1 AND pctypeid IS NOT NULL" - Set rsCheck = ExecuteParameterizedQuery(objConn, strLookupSQL, Array(CStr(pcid))) - IF NOT rsCheck.EOF THEN - pcid = rsCheck("pcid") - ELSE - pcid = 0 ' Not found - END IF - END IF - rsCheck.Close - Set rsCheck = Nothing - END IF - - IF pcid = 0 THEN - objConn.Close - Response.Redirect("displaypcs.asp") - Response.End - END IF - - '============================================================================= - ' SECURITY: Use parameterized query to prevent SQL injection - ' PHASE 2: Query machines table WHERE pctypeid IS NOT NULL (identifies PCs) - ' NOTE: Use explicit column names to avoid wildcard conflicts between tables - '============================================================================= - ' Phase 2: Query PCs from machines table - strSQL = "SELECT machines.pcid, machines.machinenumber, machines.alias, machines.hostname, " & _ - "machines.serialnumber, machines.machinenotes, machines.mapleft, machines.maptop, " & _ - "machines.modelnumberid, machines.businessunitid, machines.printerid, machines.pctypeid, " & _ - "machines.loggedinuser, machines.osid, machines.machinestatusid, " & _ - "machines.lastupdated, machines.dateadded, " & _ - "pctypes.pctype, pctypes.pctypeid, " & _ - "models.modelnumber, models.image, models.modelnumberid, " & _ - "businessunits.businessunit, businessunits.businessunitid, " & _ - "vendors.vendor, vendors.vendorid, " & _ - "operatingsystems.osname, operatingsystems.osversion, " & _ - "printers.ipaddress AS printerip, printers.printerid AS printer_id, " & _ - "printers.printercsfname, printers.printerwindowsname " & _ - "FROM machines " & _ - "INNER JOIN models ON machines.modelnumberid = models.modelnumberid " & _ - "LEFT JOIN pctypes ON machines.pctypeid = pctypes.pctypeid " & _ - "INNER JOIN businessunits ON machines.businessunitid = businessunits.businessunitid " & _ - "INNER JOIN vendors ON models.vendorid = vendors.vendorid " & _ - "LEFT JOIN operatingsystems ON machines.osid = operatingsystems.osid " & _ - "LEFT JOIN printers ON machines.printerid = printers.printerid " & _ - "WHERE machines.pcid = " & CLng(pcid) & " AND machines.pctypeid IS NOT NULL" - - Set rs = objConn.Execute(strSQL) - - ' Check if PC exists - If rs.EOF Then - rs.Close - Set rs = Nothing - objConn.Close - Response.Redirect("displaypcs.asp") - Response.End - End If -%> - - - - -
- - -
- - - - -
- -
-
- -
-
-
-
- " alt="Card image cap"> -
-
- " alt="profile-image" class="profile"> -
<%=Server.HTMLEncode(rs("hostname") & "")%>
-
<%=Server.HTMLEncode(rs("vendor") & "")%>
-
<%=Server.HTMLEncode(rs("pctype") & "")%>
-

<%=Server.HTMLEncode(rs("machinenotes") & "")%>

-
- -
-
- -
-
-
- -
-
-
Configuration
-
-
-

Location:

-

Vendor:

-

Model:

-

Function:

-

BU:

-

IP Address:

-

MAC Address:

-

Controlling PC:

-

Printer:

-

- -

-
-
-<% -Dim machineNumVal, vendorValM, modelValM, machineTypeVal, buVal - -' Get values and default to N/A if empty -machineNumVal = rs("machinenumber") & "" -If machineNumVal = "" Then machineNumVal = "N/A" - -vendorValM = rs("vendor") & "" -If vendorValM = "" Then vendorValM = "N/A" - -modelValM = rs("modelnumber") & "" -If modelValM = "" Then modelValM = "N/A" - -machineTypeVal = rs("machinetype") & "" -If machineTypeVal = "" Then machineTypeVal = "N/A" - -buVal = rs("businessunit") & "" -If buVal = "" Then buVal = "N/A" -%> -

-<% -If machineNumVal <> "N/A" Then -%> - - <%=Server.HTMLEncode(machineNumVal)%> - -<% -Else - Response.Write("N/A") -End If -%> -

-

<%=Server.HTMLEncode(vendorValM)%>

-

<%=Server.HTMLEncode(modelValM)%>

-

<%=Server.HTMLEncode(machineTypeVal)%>

-

<%=Server.HTMLEncode(buVal)%>

-<% -' Get primary communication (IP and MAC) from communications table -Dim rsPrimaryCom, strPrimaryComSQL, primaryIP, primaryMAC -strPrimaryComSQL = "SELECT address, macaddress FROM communications WHERE pcid = ? AND isprimary = 1 AND isactive = 1 LIMIT 1" -Set rsPrimaryCom = ExecuteParameterizedQuery(objConn, strPrimaryComSQL, Array(pcid)) - -If Not rsPrimaryCom.EOF Then - primaryIP = rsPrimaryCom("address") & "" - primaryMAC = rsPrimaryCom("macaddress") & "" -Else - ' Try to get first active communication if no primary set - rsPrimaryCom.Close - strPrimaryComSQL = "SELECT address, macaddress FROM communications WHERE pcid = ? AND isactive = 1 ORDER BY comid LIMIT 1" - Set rsPrimaryCom = ExecuteParameterizedQuery(objConn, strPrimaryComSQL, Array(pcid)) - If Not rsPrimaryCom.EOF Then - primaryIP = rsPrimaryCom("address") & "" - primaryMAC = rsPrimaryCom("macaddress") & "" - Else - primaryIP = "" - primaryMAC = "" - End If -End If -rsPrimaryCom.Close -Set rsPrimaryCom = Nothing - -' Display IP Address -If primaryIP <> "" Then - Response.Write("

" & Server.HTMLEncode(primaryIP) & "

") -Else - Response.Write("

N/A

") -End If - -' Display MAC Address -If primaryMAC <> "" Then - Response.Write("

" & Server.HTMLEncode(primaryMAC) & "

") -Else - Response.Write("

N/A

") -End If - -' Get controlling PC from relationships -Dim rsControlPC, strControlPCSQL, controlPCHostname, controlPCID -strControlPCSQL = "SELECT m.pcid, m.hostname, m.machinenumber FROM machinerelationships mr " & _ - "JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid " & _ - "JOIN machines m ON mr.pcid = m.pcid " & _ - "WHERE mr.related_pcid = ? AND rt.relationshiptype = 'Controls' AND mr.isactive = 1 LIMIT 1" -Set rsControlPC = ExecuteParameterizedQuery(objConn, strControlPCSQL, Array(pcid)) - -If Not rsControlPC.EOF Then - controlPCHostname = rsControlPC("hostname") & "" - controlPCID = rsControlPC("pcid") - If controlPCHostname = "" Then controlPCHostname = rsControlPC("machinenumber") & "" - Response.Write("

" & Server.HTMLEncode(controlPCHostname) & "

") -Else - Response.Write("

N/A

") -End If -rsControlPC.Close -Set rsControlPC = Nothing - -' SECURITY: HTML encode printer data to prevent XSS -' Printer data - check if exists (LEFT JOIN may return NULL) -If Not IsNull(rs("printerid")) And rs("printerid") <> "" Then - Dim printerNameVal - printerNameVal = rs("printerwindowsname") & "" - If printerNameVal = "" Then printerNameVal = "Printer #" & rs("printerid") - - Response.Write("

" & Server.HTMLEncode(printerNameVal) & "

") -Else - Response.Write("

N/A

") -End If -%> -
-
-
-
-
-
- -
-
-
Network Communications
-
- - - - - - - - - - - - -<% - ' Query communications for this machine - strSQL2 = "SELECT c.*, ct.typename FROM communications c " & _ - "JOIN comstypes ct ON c.comstypeid = ct.comstypeid " & _ - "WHERE c.pcid = ? AND c.isactive = 1 ORDER BY c.isprimary DESC, c.comid ASC" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(pcid)) - - If rs2.EOF Then - Response.Write("") - Else - Do While Not rs2.EOF - Dim ipAddr, macAddr, ifaceName, isPrimary, statusBadge - ipAddr = rs2("address") & "" - macAddr = rs2("macaddress") & "" - ifaceName = rs2("interfacename") & "" - isPrimary = rs2("isprimary") - - If ipAddr = "" Then ipAddr = "N/A" - If macAddr = "" Then macAddr = "N/A" - If ifaceName = "" Then ifaceName = "N/A" - - If isPrimary Then - statusBadge = "Primary" - Else - statusBadge = "" - End If - - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - rs2.MoveNext - Loop - End If - rs2.Close - Set rs2 = Nothing -%> - -
TypeIP AddressMAC AddressInterfacePrimaryStatus
No network communications configured
" & Server.HTMLEncode(rs2("typename") & "") & "" & ipAddr & "" & macAddr & "" & ifaceName & "" & statusBadge & "Active
-
-
-
-
Machine Relationships
- - -
Controlled By PC
-
- - - - - - - - - -<% - ' Query PCs that control this machine - strSQL2 = "SELECT m.pcid, m.machinenumber, m.hostname, c.address, rt.relationshiptype " & _ - "FROM machinerelationships mr " & _ - "JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid " & _ - "JOIN machines m ON mr.pcid = m.pcid " & _ - "LEFT JOIN communications c ON m.pcid = c.pcid AND c.isprimary = 1 " & _ - "WHERE mr.related_pcid = ? AND rt.relationshiptype = 'Controls' AND mr.isactive = 1" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(pcid)) - - If rs2.EOF Then - Response.Write("") - Else - Do While Not rs2.EOF - Dim pcHostname, pcIP, pcMachineID - pcHostname = rs2("hostname") & "" - pcIP = rs2("address") & "" - pcMachineID = rs2("pcid") - - If pcHostname = "" Then pcHostname = rs2("machinenumber") & "" - If pcIP = "" Then pcIP = "N/A" - - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - rs2.MoveNext - Loop - End If - rs2.Close - Set rs2 = Nothing -%> - -
PC HostnameIP AddressRelationship
No controlling PC assigned
" & Server.HTMLEncode(pcHostname) & "" & pcIP & "" & Server.HTMLEncode(rs2("relationshiptype") & "") & "
-
- - -
Dualpath / Redundant Machines
-
- - - - - - - - - - -<% - ' Query dualpath relationships - strSQL2 = "SELECT m.pcid, m.machinenumber, mt.machinetype, mo.modelnumber, rt.relationshiptype " & _ - "FROM machinerelationships mr " & _ - "JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid " & _ - "JOIN machines m ON mr.related_pcid = m.pcid " & _ - "LEFT JOIN models mo ON m.modelnumberid = mo.modelnumberid " & _ - "LEFT JOIN machinetypes mt ON mo.machinetypeid = mt.machinetypeid " & _ - "WHERE mr.pcid = ? AND rt.relationshiptype = 'Dualpath' AND mr.isactive = 1" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(pcid)) - - If rs2.EOF Then - Response.Write("") - Else - Do While Not rs2.EOF - Dim dualMachineNum, dualType, dualModel, dualMachineID - dualMachineNum = rs2("machinenumber") & "" - dualType = rs2("machinetype") & "" - dualModel = rs2("modelnumber") & "" - dualMachineID = rs2("pcid") - - If dualType = "" Then dualType = "N/A" - If dualModel = "" Then dualModel = "N/A" - - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - rs2.MoveNext - Loop - End If - rs2.Close - Set rs2 = Nothing -%> - -
Machine NumberTypeModelRelationship
No dualpath relationships
" & Server.HTMLEncode(dualMachineNum) & "" & dualType & "" & dualModel & "" & Server.HTMLEncode(rs2("relationshiptype") & "") & "
-
-
-
-
Compliance & Security
-<% - ' Query compliance data - strSQL2 = "SELECT * FROM compliance WHERE pcid = ?" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(pcid)) - - If Not rs2.EOF Then -%> -
-
-

Third Party Managed:

-

Third Party Manager:

-

OT Asset System:

-

DoD Asset Device Type:

-

Compliant:

-
-
-<% - Dim thirdPartyManaged, thirdPartyManager, otAssetSystem, dodAssetDeviceType, isCompliant - thirdPartyManaged = rs2("is_third_party_managed") & "" - thirdPartyManager = rs2("third_party_manager") & "" - otAssetSystem = rs2("ot_asset_system") & "" - dodAssetDeviceType = rs2("ot_asset_device_type") & "" - isCompliant = rs2("is_compliant") - - ' Third party managed badge - Dim tpmBadge - If thirdPartyManaged = "Yes" Then - tpmBadge = "Yes" - ElseIf thirdPartyManaged = "No" Then - tpmBadge = "No" - Else - tpmBadge = "N/A" - End If -%> -

<%=tpmBadge%>

-

<%=Server.HTMLEncode(thirdPartyManager)%>

-

<%=Server.HTMLEncode(otAssetSystem)%>

-

<%=Server.HTMLEncode(dodAssetDeviceType)%>

-

-<% - If Not IsNull(isCompliant) Then - If isCompliant Then - Response.Write("Yes") - Else - Response.Write("No") - End If - Else - Response.Write("Not Assessed") - End If -%> -

-
-
- -
- -
Security Scans
-
- - - - - - - - - - -<% - rs2.Close - Set rs2 = Nothing - - ' Query security scans - strSQL2 = "SELECT * FROM compliancescans WHERE pcid = ? ORDER BY scan_date DESC LIMIT 10" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(pcid)) - - If rs2.EOF Then - Response.Write("") - Else - Do While Not rs2.EOF - Dim scanName, scanDate, scanResult, scanDetails, resultBadge - scanName = rs2("scan_name") & "" - scanDate = rs2("scan_date") & "" - scanResult = rs2("scan_result") & "" - scanDetails = rs2("scan_details") & "" - - If scanName = "" Then scanName = "Security Scan" - If scanDetails = "" Then scanDetails = "No details" - - ' Result badge - Select Case LCase(scanResult) - Case "pass" - resultBadge = "Pass" - Case "fail" - resultBadge = "Fail" - Case "warning" - resultBadge = "Warning" - Case Else - resultBadge = "Info" - End Select - - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - rs2.MoveNext - Loop - End If - rs2.Close - Set rs2 = Nothing -%> - -
Scan NameDateResultDetails
No security scans recorded
" & Server.HTMLEncode(scanName) & "" & Server.HTMLEncode(scanDate) & "" & resultBadge & "" & scanDetails & "
-
-<% - Else - Response.Write("

No compliance data available for this machine.

") - rs2.Close - Set rs2 = Nothing - End If -%> -
-
-
- - -<% - '============================================================================= - ' SECURITY: Use parameterized query for installed applications - '============================================================================= - strSQL2 = "SELECT * FROM installedapps, applications WHERE installedapps.appid = applications.appid AND installedapps.isactive = 1 AND installedapps.pcid = ? ORDER BY appname ASC" - Set rs2 = ExecuteParameterizedQuery(objConn, strSQL2, Array(pcid)) - Do While Not rs2.EOF - Response.Write("") - rs2.MoveNext - Loop - rs2.Close - Set rs2 = Nothing -%> - -
" & Server.HTMLEncode(rs2("appname") & "") & "
-
-
-
-
- -
- - -
- - -
- -
- - - - - -
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - - - - - -
-
-
- Select Machine Location - -
-
-
-
-
- Click on the map to select a location -
- - -
-
-
-
- - - - - -<% -'============================================================================= -' CLEANUP -'============================================================================= -objConn.Close -%> diff --git a/displayprinter.asp.backup-20251027 b/displayprinter.asp.backup-20251027 deleted file mode 100644 index 896cf49..0000000 --- a/displayprinter.asp.backup-20251027 +++ /dev/null @@ -1,1127 +0,0 @@ - - - - - - - - - -<% - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF - - printerid = Request.Querystring("printerid") - - strSQL = "SELECT * FROM machines,models,vendors,printers WHERE " &_ - "printers.machineid=machines.machineid AND "&_ - "printers.modelid=models.modelnumberid AND "&_ - "models.vendorid=vendors.vendorid AND "&_ - "printers.printerid="&printerid - set rs = objconn.Execute(strSQL) - machineid = rs("machineid") -%> - - - - -
- - -
- - - - -
- -
-
- -
-
-
-
- " alt="Card image cap"> -
-
- " alt="profile-image" class="profile"> -
<%Response.Write(rs("vendor"))%>
-

" title="Click to Access Support Docs" target="_blank"><%Response.Write(rs("modelnumber"))%>

-
-
-
-
-
-
- -
-
-
Configuration
-
-
-

Vendor:

-

Model:

-

Serial:

-

Location:

-

IP:

-

FQDN:

-

PIN:

-

Driver:

-

CSF Name:

-

Windows Name:

-
-
-

<%Response.Write(rs("vendor"))%>

-

" title="Click to Access Support Docs" target="_blank"><%Response.Write(rs("modelnumber"))%>

-

<%Response.Write(rs("serialnumber"))%>

-

- - <%Response.Write(rs("machinenumber"))%> - -

-

" title="Click to Access Printer Admin Page" target="_blank"><%Response.Write(rs("ipaddress"))%>

-

<%Response.Write(rs("fqdn"))%>

-<% - IF rs("printerpin") <> "" THEN - response.write ("

"&rs("printerpin")&"

") - ELSE - response.write ("

 

") - END IF - IF rs("installpath") <> "" THEN - response.write ("

Download Specific Installer

") - ELSE - response.write ("

Download Universal Driver Installer

") - END IF - IF rs("printercsfname") <> "" THEN - Response.Write ("

"&rs("printercsfname")&"

") - ELSE - response.write ("

 

") - END IF -%> - -

<%Response.Write(rs("printerwindowsname"))%>

-
-
-<% -' Get Zabbix data for this printer (cached) - now includes all supplies -Dim printerIP, cachedData, zabbixConnected, pingStatus, suppliesJSON -Dim statusBadge, statusIcon, statusColor - -printerIP = rs("ipaddress") - -' Get all supplies data (toner, ink, drums, maintenance kits, etc.) -' Returns array: [zabbixConnected, pingStatus, suppliesJSON] -cachedData = GetAllPrinterSuppliesCached(printerIP) - -' Extract data from array -zabbixConnected = cachedData(0) -pingStatus = cachedData(1) -suppliesJSON = cachedData(2) -%> -
- Supply Status -<% -' Display printer online/offline status badge -If pingStatus = "1" Then - Response.Write(" Online") -ElseIf pingStatus = "0" Then - Response.Write(" Offline") -Else - Response.Write(" Unknown") -End If -%> -
-
-<% -If zabbixConnected <> "1" Then - ' Show error details - If zabbixConnected = "" Then - Response.Write("
Unable to connect to Zabbix monitoring server (empty response)
") - Else - Response.Write("
Zabbix Connection Error:
" & Server.HTMLEncode(zabbixConnected) & "
") - End If -ElseIf suppliesJSON = "" Or IsNull(suppliesJSON) Then - Response.Write("
No supply data available for this printer in Zabbix (IP: " & printerIP & ")
") -Else - ' Parse the JSON data for all supply items - Dim itemStart, itemEnd, itemBlock, itemName, itemValue - Dim namePos, nameStart, nameEnd, valuePos, valueStart, valueEnd - Dim currentPos, hasData - - hasData = False - - ' Find all items with "Level" in the name (toner, ink, drums, maintenance kits, etc.) - currentPos = 1 - Do While currentPos > 0 - itemStart = InStr(currentPos, suppliesJSON, "{""itemid""") - If itemStart = 0 Then Exit Do - - itemEnd = InStr(itemStart + 1, suppliesJSON, "},") - If itemEnd = 0 Then - itemEnd = InStr(itemStart + 1, suppliesJSON, "}]") - End If - If itemEnd = 0 Then Exit Do - - itemBlock = Mid(suppliesJSON, itemStart, itemEnd - itemStart + 1) - - ' Extract name - namePos = InStr(itemBlock, """name"":""") - If namePos > 0 Then - nameStart = namePos + 8 - nameEnd = InStr(nameStart, itemBlock, """") - itemName = Mid(itemBlock, nameStart, nameEnd - nameStart) - Else - itemName = "" - End If - - ' Only process items with "Level" in the name - If InStr(1, itemName, "Level", 1) > 0 Then - ' Extract value (lastvalue) - valuePos = InStr(itemBlock, """lastvalue"":""") - If valuePos > 0 Then - valueStart = valuePos + 13 - valueEnd = InStr(valueStart, itemBlock, """") - itemValue = Mid(itemBlock, valueStart, valueEnd - valueStart) - - ' Try to convert to numeric - On Error Resume Next - Dim numericValue, progressClass - numericValue = CDbl(itemValue) - If Err.Number = 0 Then - ' Determine progress bar color based on level - If numericValue < 10 Then - progressClass = "bg-danger" ' Red for critical (< 10%) - ElseIf numericValue < 25 Then - progressClass = "bg-warning" ' Yellow for low (< 25%) - Else - progressClass = "bg-success" ' Green for good (>= 25%) - End If - - ' Display supply level with progress bar - Response.Write("
") - Response.Write("
") - Response.Write("" & Server.HTMLEncode(itemName) & "") - Response.Write("" & Round(numericValue, 1) & "%") - Response.Write("
") - Response.Write("
") - Response.Write("
" & Round(numericValue, 1) & "%
") - Response.Write("
") - Response.Write("
") - - hasData = True - End If - Err.Clear - On Error Goto 0 - End If - End If - - currentPos = itemEnd + 1 - Loop - - If Not hasData Then - Response.Write("
No supply level data available for this printer in Zabbix (IP: " & printerIP & ")
") - End If -End If -%> -
-
-
- -
-
-
-
- -
- -
-
-
- -
-
- -
- -
-
- - - -
-
-
- -
- " placeholder="<%Response.Write(rs("serialnumber"))%>"> -
-
-
- -
- " placeholder="<%Response.Write(rs("serialnumber"))%>"> -
-
-
- -
- " placeholder="<%Response.Write(rs("fqdn"))%>"> -
-
-
- -
- " placeholder="<%Response.Write(rs("printercsfname"))%>"> -
-
-
- -
- " placeholder="<%Response.Write(rs("printerwindowsname"))%>"> -
-
-
- -
- -
-
-<% - Dim currentMapTop, currentMapLeft - If IsNull(rs("maptop")) Or rs("maptop") = "" Then - currentMapTop = "50" - Else - currentMapTop = rs("maptop") - End If - If IsNull(rs("mapleft")) Or rs("mapleft") = "" Then - currentMapLeft = "50" - Else - currentMapLeft = rs("mapleft") - End If -%> - - - - -
- -
- -
- Current position: X=<%Response.Write(currentMapLeft)%>, Y=<%Response.Write(currentMapTop)%> -
-
-
-
- -
-
- -
-
-
- -
-
-
-
-
- -
- - -
- - -
- -
- - - - - -
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- Select Printer Location - -
-
-
-
-
- Click on the map to select a location -
- - -
-
-
-
- - - - - -<% objConn.Close %> \ No newline at end of file diff --git a/displayprofile.asp.broken b/displayprofile.asp.broken deleted file mode 100644 index 9bd2fb9..0000000 --- a/displayprofile.asp.broken +++ /dev/null @@ -1,195 +0,0 @@ -<% -' Easter Eggs for special SSOs -Dim showEasterEgg, easterEggType -showEasterEgg = False -easterEggType = "" - -On Error Resume Next -IF IsNumeric(sso) THEN - IF CLng(sso) = 570005354 THEN - showEasterEgg = True - easterEggType = "developer" - ELSEIF CLng(sso) = 503432774 THEN - showEasterEgg = True - easterEggType = "documentation" - END IF -END IF -On Error Goto 0 - -IF showEasterEgg AND easterEggType = "developer" THEN -%> -
-
-
ACHIEVEMENT UNLOCKED
- Secret Developer Stats -
-
-
-
-
-

Caffeine Consumption147%

-
-
-
-
-
-
-
-
-
-
-
-

Bug Fixing Speed95%

-
-
-
-
-
-
-
-
-
-
-
-

Google-Fu99%

-
-
-
-
-
-
-
-
-
-
-
-

Database Tinkering88%

-
-
-
-
-
-
-
-
-
-
-
-

Debugging100%

-
-
-
-
-
-
-
-
-
-
-
-

Production Deployment Courage73%

-
-
-
-
-
-
-
-
- Legacy Code Archaeologist - Documentation Writer (Rare!) -
-
-<% -ELSEIF showEasterEgg AND easterEggType = "documentation" THEN -%> -
-
-
LEGEND STATUS UNLOCKED
- The Foundation Builder -
-
-
-
-
-

Documentation Mastery100%

-
-
-
-
-
-
-
-
-
-
-
-

Playbook Creation100%

-
-
-
-
-
-
-
-
-
-
-
-

Shopfloor Support100%

-
-
-
-
-
-
-
-
-
-
-
-

CNC Procedure Expertise100%

-
-
-
-
-
-
-
-
-
-
-
-

Reliability100%

-
-
-
-
-
-
-
-
-
-
-
-

Work Ethic100%

-
-
-
-
-
-
-
-
- Knowledge Architect - Procedure Master - Shopfloor Hero -
-
-

"The procedures you built will keep this place running long after you're gone."

- Thank you for the heavy lifting. You built the foundation we all stand on. -
-
-<% -ELSE -%> diff --git a/editapplication.asp.backup-20251027 b/editapplication.asp.backup-20251027 deleted file mode 100644 index 4105a04..0000000 --- a/editapplication.asp.backup-20251027 +++ /dev/null @@ -1,187 +0,0 @@ -<%@ Language=VBScript %> -<% -Option Explicit -%> - - - - - -<% -'============================================================================= -' FILE: editapplication.asp -' PURPOSE: Update an existing application record -' -' PARAMETERS: -' appid (Form, Required) - Integer ID of application to update -' appname (Form, Required) - Application name (1-50 chars) -' appdescription (Form, Optional) - Description (max 255 chars) -' supportteamid (Form, Required) - Support team ID -' applicationnotes (Form, Optional) - Notes (max 512 chars) -' installpath (Form, Optional) - Installation path/URL (max 255 chars) -' documentationpath (Form, Optional) - Documentation path/URL (max 512 chars) -' image (Form, Optional) - Image filename (max 255 chars) -' isinstallable, isactive, ishidden, isprinter, islicenced (Form, Optional) - Checkboxes (0/1) -' -' SECURITY: -' - Uses parameterized queries -' - Validates all inputs -' - HTML encodes outputs -' -' AUTHOR: Claude Code -' CREATED: 2025-10-12 -'============================================================================= - -'----------------------------------------------------------------------------- -' INITIALIZATION -'----------------------------------------------------------------------------- -Call InitializeErrorHandling("editapplication.asp") - -' Get and validate required inputs -Dim appid, appname, appdescription, supportteamid -Dim applicationnotes, installpath, documentationpath, image -Dim isinstallable, isactive, ishidden, isprinter, islicenced - -appid = Trim(Request.Form("appid")) -appname = Trim(Request.Form("appname")) -appdescription = Trim(Request.Form("appdescription")) -supportteamid = Trim(Request.Form("supportteamid")) -applicationnotes = Trim(Request.Form("applicationnotes")) -installpath = Trim(Request.Form("installpath")) -documentationpath = Trim(Request.Form("documentationpath")) -image = Trim(Request.Form("image")) - -' Checkboxes - convert to bit values -If Request.Form("isinstallable") = "1" Then - isinstallable = 1 -Else - isinstallable = 0 -End If - -If Request.Form("isactive") = "1" Then - isactive = 1 -Else - isactive = 0 -End If - -If Request.Form("ishidden") = "1" Then - ishidden = 1 -Else - ishidden = 0 -End If - -If Request.Form("isprinter") = "1" Then - isprinter = 1 -Else - isprinter = 0 -End If - -If Request.Form("islicenced") = "1" Then - islicenced = 1 -Else - islicenced = 0 -End If - -'----------------------------------------------------------------------------- -' VALIDATE INPUTS -'----------------------------------------------------------------------------- - -' Validate appid -If Not ValidateID(appid) Then - Call HandleValidationError("displayapplications.asp", "INVALID_ID") -End If - -' Verify the application exists - DISABLED DUE TO CACHING ISSUE -' If Not RecordExists(objConn, "applications", "appid", appid) Then -' Call HandleValidationError("displayapplications.asp", "NOT_FOUND") -' End If - -' Validate appname (required, 1-50 chars) -If Len(appname) < 1 Or Len(appname) > 50 Then - Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_INPUT") -End If - -' Validate supportteamid -If Not ValidateID(supportteamid) Then - Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_ID") -End If - -' Verify support team exists - DISABLED DUE TO CACHING ISSUE -' If Not RecordExists(objConn, "supportteams", "supporteamid", supportteamid) Then -' Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_INPUT") -' End If - -' Validate field lengths -If Len(appdescription) > 255 Then - Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_INPUT") -End If - -If Len(applicationnotes) > 512 Then - Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_INPUT") -End If - -If Len(installpath) > 255 Then - Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_INPUT") -End If - -If Len(documentationpath) > 512 Then - Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_INPUT") -End If - -If Len(image) > 255 Then - Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_INPUT") -End If - -'----------------------------------------------------------------------------- -' DATABASE UPDATE -'----------------------------------------------------------------------------- - -Dim strSQL -strSQL = "UPDATE applications SET " & _ - "appname = ?, " & _ - "appdescription = ?, " & _ - "supportteamid = ?, " & _ - "applicationnotes = ?, " & _ - "installpath = ?, " & _ - "documentationpath = ?, " & _ - "image = ?, " & _ - "isinstallable = ?, " & _ - "isactive = ?, " & _ - "ishidden = ?, " & _ - "isprinter = ?, " & _ - "islicenced = ? " & _ - "WHERE appid = ?" - -Dim recordsAffected -recordsAffected = ExecuteParameterizedUpdate(objConn, strSQL, Array( _ - appname, _ - appdescription, _ - supportteamid, _ - applicationnotes, _ - installpath, _ - documentationpath, _ - image, _ - isinstallable, _ - isactive, _ - ishidden, _ - isprinter, _ - islicenced, _ - appid _ -)) - -Call CheckForErrors() - -'----------------------------------------------------------------------------- -' CLEANUP AND REDIRECT -'----------------------------------------------------------------------------- -Call CleanupResources() - -If recordsAffected > 0 Then - Response.Redirect("displayapplication.asp?appid=" & Server.URLEncode(appid)) -Else - Response.Write("") - Response.Write("

Error: No records were updated.

") - Response.Write("

Go Back

") - Response.Write("") -End If -%> diff --git a/editapplication_direct.asp.backup-20251027 b/editapplication_direct.asp.backup-20251027 deleted file mode 100644 index 4740611..0000000 --- a/editapplication_direct.asp.backup-20251027 +++ /dev/null @@ -1,221 +0,0 @@ - -<% -' Get all form data -Dim appid, appname, appdescription, supportteamid -Dim applicationnotes, installpath, applicationlink, documentationpath, image -Dim isinstallable, isactive, ishidden, isprinter, islicenced -Dim newsupportteamname, newsupportteamurl, newappownerid - -appid = Request.Form("appid") -appname = Trim(Request.Form("appname")) -appdescription = Trim(Request.Form("appdescription")) -supportteamid = Trim(Request.Form("supportteamid")) -applicationnotes = Trim(Request.Form("applicationnotes")) -installpath = Trim(Request.Form("installpath")) -applicationlink = Trim(Request.Form("applicationlink")) -documentationpath = Trim(Request.Form("documentationpath")) -image = Trim(Request.Form("image")) - -' New support team fields -newsupportteamname = Trim(Request.Form("newsupportteamname")) -newsupportteamurl = Trim(Request.Form("newsupportteamurl")) -newappownerid = Trim(Request.Form("newappownerid")) - -' Checkboxes -If Request.Form("isinstallable") = "1" Then isinstallable = 1 Else isinstallable = 0 -If Request.Form("isactive") = "1" Then isactive = 1 Else isactive = 0 -If Request.Form("ishidden") = "1" Then ishidden = 1 Else ishidden = 0 -If Request.Form("isprinter") = "1" Then isprinter = 1 Else isprinter = 0 -If Request.Form("islicenced") = "1" Then islicenced = 1 Else islicenced = 0 - -' Check if we need to create a new support team first -If supportteamid = "new" Then - If newsupportteamname = "" Then - Response.Write("
Error: Support team name is required.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newsupportteamname) > 50 Then - Response.Write("
Error: Support team name too long.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape quotes for support team name and URL - Dim escapedTeamName, escapedTeamUrl - escapedTeamName = Replace(newsupportteamname, "'", "''") - escapedTeamUrl = Replace(newsupportteamurl, "'", "''") - - ' Check if support team already exists - Dim checkSQL, rsCheck - checkSQL = "SELECT COUNT(*) as cnt FROM supportteams WHERE LOWER(teamname) = LOWER('" & escapedTeamName & "')" - Set rsCheck = objConn.Execute(checkSQL) - If rsCheck.EOF Then - rsCheck.Close - Response.Write("
Error: Database query failed.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - If CLng(rsCheck("cnt")) > 0 Then - rsCheck.Close - Response.Write("
Error: Support team '" & Server.HTMLEncode(newsupportteamname) & "' already exists.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - rsCheck.Close - - ' Check if we need to create a new app owner first (nested creation) - If newappownerid = "new" Then - Dim newappownername, newappownersso - newappownername = Trim(Request.Form("newappownername")) - newappownersso = Trim(Request.Form("newappownersso")) - - If newappownername = "" Or newappownersso = "" Then - Response.Write("
Error: App owner name and SSO are required.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newappownername) > 50 Or Len(newappownersso) > 50 Then - Response.Write("
Error: App owner name or SSO too long.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape quotes - Dim escapedOwnerName, escapedSSO - escapedOwnerName = Replace(newappownername, "'", "''") - escapedSSO = Replace(newappownersso, "'", "''") - - ' Check if app owner already exists - checkSQL = "SELECT COUNT(*) as cnt FROM appowners WHERE LOWER(appowner) = LOWER('" & escapedOwnerName & "') OR LOWER(sso) = LOWER('" & escapedSSO & "')" - Set rsCheck = objConn.Execute(checkSQL) - If rsCheck.EOF Then - rsCheck.Close - Response.Write("
Error: Database query failed (app owner check).
") - Response.Write("Go back") - objConn.Close - Response.End - End If - If CLng(rsCheck("cnt")) > 0 Then - rsCheck.Close - Response.Write("
Error: App owner with this name or SSO already exists.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - rsCheck.Close - - ' Insert new app owner - Dim ownerSQL - ownerSQL = "INSERT INTO appowners (appowner, sso, isactive) VALUES ('" & escapedOwnerName & "', '" & escapedSSO & "', 1)" - - On Error Resume Next - objConn.Execute ownerSQL - - If Err.Number <> 0 Then - Response.Write("
Error creating app owner: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the new app owner ID - Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid") - newappownerid = rsCheck("newid") - rsCheck.Close - Else - ' Validate existing app owner ID (only if not empty and not "new") - If newappownerid <> "" And newappownerid <> "new" Then - If Not IsNumeric(newappownerid) Or CLng(newappownerid) < 1 Then - Response.Write("
Error: Invalid app owner.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - End If - End If - - ' Insert new support team - Dim teamSQL - teamSQL = "INSERT INTO supportteams (teamname, teamurl, appownerid, isactive) VALUES ('" & escapedTeamName & "', '" & escapedTeamUrl & "', " & newappownerid & ", 1)" - - On Error Resume Next - objConn.Execute teamSQL - - If Err.Number <> 0 Then - Response.Write("
Error creating support team: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the new support team ID - Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid") - supportteamid = rsCheck("newid") - rsCheck.Close -Else - ' Validate existing support team ID (only if not empty and not "new") - If supportteamid <> "" And supportteamid <> "new" Then - If Not IsNumeric(supportteamid) Or CLng(supportteamid) < 1 Then - Response.Write("
Error: Invalid support team ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - End If -End If - -' Escape backslashes and single quotes for SQL -' Must escape backslashes FIRST, then quotes -appname = Replace(appname, "\", "\\") -appname = Replace(appname, "'", "''") -appdescription = Replace(appdescription, "\", "\\") -appdescription = Replace(appdescription, "'", "''") -applicationnotes = Replace(applicationnotes, "\", "\\") -applicationnotes = Replace(applicationnotes, "'", "''") -installpath = Replace(installpath, "\", "\\") -installpath = Replace(installpath, "'", "''") -applicationlink = Replace(applicationlink, "\", "\\") -applicationlink = Replace(applicationlink, "'", "''") -documentationpath = Replace(documentationpath, "\", "\\") -documentationpath = Replace(documentationpath, "'", "''") -image = Replace(image, "\", "\\") -image = Replace(image, "'", "''") - -' Build UPDATE statement -Dim strSQL -strSQL = "UPDATE applications SET " & _ - "appname = '" & appname & "', " & _ - "appdescription = '" & appdescription & "', " & _ - "supportteamid = " & supportteamid & ", " & _ - "applicationnotes = '" & applicationnotes & "', " & _ - "installpath = '" & installpath & "', " & _ - "applicationlink = '" & applicationlink & "', " & _ - "documentationpath = '" & documentationpath & "', " & _ - "image = '" & image & "', " & _ - "isinstallable = " & isinstallable & ", " & _ - "isactive = " & isactive & ", " & _ - "ishidden = " & ishidden & ", " & _ - "isprinter = " & isprinter & ", " & _ - "islicenced = " & islicenced & " " & _ - "WHERE appid = " & appid - -On Error Resume Next -objConn.Execute strSQL - -If Err.Number = 0 Then - objConn.Close - Response.Redirect("displayapplication.asp?appid=" & appid) -Else - Response.Write("Error: " & Err.Description) - objConn.Close -End If -%> diff --git a/editapplication_v2.asp.backup-20251027 b/editapplication_v2.asp.backup-20251027 deleted file mode 100644 index d0a6920..0000000 --- a/editapplication_v2.asp.backup-20251027 +++ /dev/null @@ -1,96 +0,0 @@ -<%@ Language=VBScript %> -<% -Option Explicit -%> - - - - - -<% -'============================================================================= -' FILE: editapplication_v2.asp (TEST VERSION) -' PURPOSE: Update an existing application record -'============================================================================= - -Call InitializeErrorHandling("editapplication_v2.asp") - -' Get and validate inputs -Dim appid, appname, appdescription, supportteamid -Dim applicationnotes, installpath, documentationpath, image -Dim isinstallable, isactive, ishidden, isprinter, islicenced - -appid = Trim(Request.Form("appid")) -appname = Trim(Request.Form("appname")) -appdescription = Trim(Request.Form("appdescription")) -supportteamid = Trim(Request.Form("supportteamid")) -applicationnotes = Trim(Request.Form("applicationnotes")) -installpath = Trim(Request.Form("installpath")) -documentationpath = Trim(Request.Form("documentationpath")) -image = Trim(Request.Form("image")) - -' Checkboxes -If Request.Form("isinstallable") = "1" Then isinstallable = 1 Else isinstallable = 0 -If Request.Form("isactive") = "1" Then isactive = 1 Else isactive = 0 -If Request.Form("ishidden") = "1" Then ishidden = 1 Else ishidden = 0 -If Request.Form("isprinter") = "1" Then isprinter = 1 Else isprinter = 0 -If Request.Form("islicenced") = "1" Then islicenced = 1 Else islicenced = 0 - -' Validate appid -If Not ValidateID(appid) Then - Call HandleValidationError("displayapplications.asp", "INVALID_ID") -End If - -' Validate appname (required, 1-50 chars) -If Len(appname) < 1 Or Len(appname) > 50 Then - Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_INPUT") -End If - -' Validate supportteamid -If Not ValidateID(supportteamid) Then - Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_ID") -End If - -' Validate field lengths -If Len(appdescription) > 255 Then Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_INPUT") -If Len(applicationnotes) > 512 Then Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_INPUT") -If Len(installpath) > 255 Then Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_INPUT") -If Len(documentationpath) > 512 Then Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_INPUT") -If Len(image) > 255 Then Call HandleValidationError("displayapplication.asp?appid=" & appid, "INVALID_INPUT") - -' DATABASE UPDATE -Dim strSQL -strSQL = "UPDATE applications SET " & _ - "appname = ?, " & _ - "appdescription = ?, " & _ - "supportteamid = ?, " & _ - "applicationnotes = ?, " & _ - "installpath = ?, " & _ - "documentationpath = ?, " & _ - "image = ?, " & _ - "isinstallable = ?, " & _ - "isactive = ?, " & _ - "ishidden = ?, " & _ - "isprinter = ?, " & _ - "islicenced = ? " & _ - "WHERE appid = ?" - -Dim recordsAffected -recordsAffected = ExecuteParameterizedUpdate(objConn, strSQL, Array( _ - appname, appdescription, supportteamid, applicationnotes, _ - installpath, documentationpath, image, _ - isinstallable, isactive, ishidden, isprinter, islicenced, appid _ -)) - -Call CheckForErrors() -Call CleanupResources() - -If recordsAffected > 0 Then - Response.Redirect("displayapplication.asp?appid=" & Server.URLEncode(appid)) -Else - Response.Write("") - Response.Write("

Error: No records were updated.

") - Response.Write("

Go Back

") - Response.Write("") -End If -%> diff --git a/editdevice.asp.backup-20251114 b/editdevice.asp.backup-20251114 deleted file mode 100644 index adde201..0000000 --- a/editdevice.asp.backup-20251114 +++ /dev/null @@ -1,335 +0,0 @@ - - - - - - - - -<% - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF - - Dim machineid, isScanned - machineid = Request.QueryString("pcid") ' Parameter named pcid for backwards compatibility - If machineid = "" Then machineid = Request.QueryString("machineid") - isScanned = Request.QueryString("scanned") - - ' Validate machineid - If Not IsNumeric(machineid) Or CLng(machineid) < 1 Then - Response.Write("Invalid device ID") - Response.End - End If - - ' Get PC data using parameterized query - PHASE 2: Use machines table - Dim strSQL, rs - strSQL = "SELECT machines.*, machinestatus.machinestatus, pctype.typename " & _ - "FROM machines " & _ - "LEFT JOIN machinestatus ON machines.machinestatusid = machinestatus.machinestatusid " & _ - "LEFT JOIN pctype ON machines.pctypeid = pctype.pctypeid " & _ - "WHERE machines.machineid = ? AND machines.pctypeid IS NOT NULL" - - Set rs = ExecuteParameterizedQuery(objconn, strSQL, Array(CLng(machineid))) - - If rs.EOF Then - Response.Write("Device not found") - Response.End - End If -%> - - - -
- - -
- - - - -
-
-
-
-
-
-
-
-
- Edit Device - <%=Server.HTMLEncode(rs("serialnumber"))%> -
- - Back to Scan - -
- -<% -Dim errorType, errorMsg -errorType = Request.QueryString("error") -errorMsg = Request.QueryString("msg") - -If isScanned = "1" Then -%> -
- Device already exists! Update the details below. -
-<% -ElseIf errorType = "required" Then -%> -
- Error! Status is required. -
-<% -ElseIf errorType = "db" Then -%> -
- Database Error: <%=Server.HTMLEncode(errorMsg)%> -
-<% -End If -%> - -
- - -
- - " readonly> -
- -
- - -
- -
- - -
- -
- - " - placeholder="e.g., DESKTOP-ABC123"> -
- -
- -
- -
- -
-
-
- - - - -
- - " - placeholder="e.g., 101"> -
- -
-
- > - -
- Default: Active (checked) -
- -
- -
-
- -
-
-
-
-
- -
- - - - - - -
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - -<% -rs.Close -objConn.Close -%> diff --git a/editmachine.asp.broken b/editmachine.asp.broken deleted file mode 100644 index 6d0aaf7..0000000 --- a/editmachine.asp.broken +++ /dev/null @@ -1,1136 +0,0 @@ - - - - - - - - - -<% - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF - - ' Get and validate machineid parameter - Dim machineid, machineData, strSQL - machineid = Request.QueryString("machineid") - - ' Security validation - ensure machineid is numeric - If NOT IsNumeric(machineid) OR machineid = "" Then - Response.Redirect("./displaymachines.asp") - Response.End - End If - - ' Load machine data - strSQL = "SELECT m.*, " &_ - "mo.modelnumber, mo.vendorid AS modelvendorid, mo.machinetypeid, mo.image AS modelimage, " &_ - "v.vendor, " &_ - "bu.businessunit, " &_ - "mt.machinetype " &_ - "FROM machines m " &_ - "LEFT JOIN models mo ON m.modelnumberid = mo.modelnumberid " &_ - "LEFT JOIN vendors v ON mo.vendorid = v.vendorid " &_ - "LEFT JOIN businessunits bu ON m.businessunitid = bu.businessunitid " &_ - "LEFT JOIN machinetypes mt ON mo.machinetypeid = mt.machinetypeid " &_ - "WHERE m.machineid = ?" - - Dim cmd, rsMachine - Set cmd = Server.CreateObject("ADODB.Command") - cmd.ActiveConnection = objConn - cmd.CommandText = strSQL - cmd.CommandType = 1 - cmd.Parameters.Append cmd.CreateParameter("@machineid", 3, 1, , machineid) - Set rsMachine = cmd.Execute - - If rsMachine.EOF Then - rsMachine.Close - Set rsMachine = Nothing - Set cmd = Nothing - objConn.Close - Response.Redirect("./displaymachines.asp") - Response.End - End If - - ' Store machine data - Dim machinenumber, modelid, businessunitid, alias, machinenotes, mapleft, maptop - machinenumber = "" : If NOT IsNull(rsMachine("machinenumber")) Then machinenumber = rsMachine("machinenumber") - modelid = "" : If NOT IsNull(rsMachine("modelnumberid")) Then modelid = rsMachine("modelnumberid") - businessunitid = "" : If NOT IsNull(rsMachine("businessunitid")) Then businessunitid = rsMachine("businessunitid") - alias = "" : If NOT IsNull(rsMachine("alias")) Then alias = rsMachine("alias") - machinenotes = "" : If NOT IsNull(rsMachine("machinenotes")) Then machinenotes = rsMachine("machinenotes") - mapleft = "" : If NOT IsNull(rsMachine("mapleft")) Then mapleft = rsMachine("mapleft") - maptop = "" : If NOT IsNull(rsMachine("maptop")) Then maptop = rsMachine("maptop") - - rsMachine.Close - Set rsMachine = Nothing - Set cmd = Nothing - - ' Load network interfaces from communications table - Dim ip1, mac1, ip2, mac2, ip3, mac3 - ip1 = "" : mac1 = "" : ip2 = "" : mac2 = "" : ip3 = "" : mac3 = "" - - strSQL = "SELECT address, macaddress FROM communications WHERE machineid = ? AND isactive = 1 ORDER BY isprimary DESC" - Set cmd = Server.CreateObject("ADODB.Command") - cmd.ActiveConnection = objConn - cmd.CommandText = strSQL - cmd.CommandType = 1 - cmd.Parameters.Append cmd.CreateParameter("@machineid", 3, 1, , machineid) - Dim rsComms - Set rsComms = cmd.Execute - - Dim interfaceCount - interfaceCount = 0 - While NOT rsComms.EOF AND interfaceCount < 3 - interfaceCount = interfaceCount + 1 - If interfaceCount = 1 Then - If NOT IsNull(rsComms("address")) Then ip1 = rsComms("address") - If NOT IsNull(rsComms("macaddress")) Then mac1 = rsComms("macaddress") - ElseIf interfaceCount = 2 Then - If NOT IsNull(rsComms("address")) Then ip2 = rsComms("address") - If NOT IsNull(rsComms("macaddress")) Then mac2 = rsComms("macaddress") - ElseIf interfaceCount = 3 Then - If NOT IsNull(rsComms("address")) Then ip3 = rsComms("address") - If NOT IsNull(rsComms("macaddress")) Then mac3 = rsComms("macaddress") - End If - rsComms.MoveNext - Wend - rsComms.Close - Set rsComms = Nothing - Set cmd = Nothing - - ' Load controlling PC from machinerelationships - ' Note: Controls relationship is PC → Equipment, so we need machineid (PC) where related_machineid is this equipment - Dim controllingpcid - controllingpcid = "" - strSQL = "SELECT mr.machineid AS controlpcid FROM machinerelationships mr " &_ - "JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid " &_ - "WHERE mr.related_machineid = ? AND rt.relationshiptype = 'Controls' AND mr.isactive = 1" - Set cmd = Server.CreateObject("ADODB.Command") - cmd.ActiveConnection = objConn - cmd.CommandText = strSQL - cmd.CommandType = 1 - cmd.Parameters.Append cmd.CreateParameter("@machineid", 3, 1, , machineid) - Dim rsControlPC - Set rsControlPC = cmd.Execute - If NOT rsControlPC.EOF Then - If NOT IsNull(rsControlPC("controlpcid")) Then controllingpcid = rsControlPC("controlpcid") - End If - rsControlPC.Close - Set rsControlPC = Nothing - Set cmd = Nothing - - ' Load dualpath from machinerelationships - Dim dualpathid - dualpathid = "" - strSQL = "SELECT related_machineid FROM machinerelationships mr " &_ - "JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid " &_ - "WHERE mr.machineid = ? AND rt.relationshiptype = 'Dualpath' AND mr.isactive = 1" - Set cmd = Server.CreateObject("ADODB.Command") - cmd.ActiveConnection = objConn - cmd.CommandText = strSQL - cmd.CommandType = 1 - cmd.Parameters.Append cmd.CreateParameter("@machineid", 3, 1, , machineid) - Dim rsDualpath - Set rsDualpath = cmd.Execute - If NOT rsDualpath.EOF Then - If NOT IsNull(rsDualpath("related_machineid")) Then dualpathid = rsDualpath("related_machineid") - End If - rsDualpath.Close - Set rsDualpath = Nothing - Set cmd = Nothing - - ' Load compliance data - Dim thirdpartymanaged, thirdpartymanager, otassetsystem, dodassettype - thirdpartymanaged = "NA" : thirdpartymanager = "" : otassetsystem = "" : dodassettype = "" - - strSQL = "SELECT * FROM compliance WHERE machineid = ?" - Set cmd = Server.CreateObject("ADODB.Command") - cmd.ActiveConnection = objConn - cmd.CommandText = strSQL - cmd.CommandType = 1 - cmd.Parameters.Append cmd.CreateParameter("@machineid", 3, 1, , machineid) - Dim rsCompliance - Set rsCompliance = cmd.Execute - If NOT rsCompliance.EOF Then - If NOT IsNull(rsCompliance("is_third_party_managed")) Then thirdpartymanaged = rsCompliance("is_third_party_managed") - If NOT IsNull(rsCompliance("third_party_manager")) Then thirdpartymanager = rsCompliance("third_party_manager") - If NOT IsNull(rsCompliance("ot_asset_system")) Then otassetsystem = rsCompliance("ot_asset_system") - If NOT IsNull(rsCompliance("ot_asset_device_type")) Then dodassettype = rsCompliance("ot_asset_device_type") - End If - rsCompliance.Close - Set rsCompliance = Nothing - Set cmd = Nothing -%> - - - -
- - -
- - - - -
- -
-
- -
-
-
-
-
-
- Edit Equipment -
- - Back to Machines - -
- -
- - - - - - -
- - - - -
- -
- - - Machine number cannot be changed -
- -
- -
- -
- -
-
-
- - - - -
- -
- -
- -
-
-
- - - - -
- - -
- -
- - -
- -
- - - - -
-
Network Communications
-

Configure network interfaces for this equipment. You can add up to 3 interfaces.

- - -
-
- Interface 1 (Primary) -
-
-
-
-
- - - Example: 192.168.1.100 -
-
-
-
- - - Example: 00:1A:2B:3C:4D:5E -
-
-
-
-
- - -
-
- Interface 2 (Optional) -
-
-
-
-
- - -
-
-
-
- - -
-
-
-
-
- - -
-
- Interface 3 (Optional) -
-
-
-
-
- - -
-
-
-
- - -
-
-
-
-
- -
- - - - -
-
Machine Relationships
-

Define relationships between this equipment and other machines or PCs.

- -
- - - Select a PC that controls this equipment -
- -
- - - Select a backup/redundant machine (creates bidirectional relationship) -
- -
- - - - -
-
Compliance & Security
-

Track compliance and security information for this equipment.

- -
- - - Is this equipment managed by a third party? -
- -
- -
- -
- -
-
- Select the vendor managing this equipment -
- - - - -
- - - Operational Technology asset classification -
- -
- - - Department of Defense asset classification -
- -
- - - - -
-
Location
-

Set the physical location of this equipment on the shop floor map.

- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- - -
-
- - - Cancel - -
- -
- -
-
-
-
- - -
- -
- - - - - - -
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - -
-
-
-
Select Location on Map
- -
-
-
-
-
-
No location selected
-
- - -
-
-
-
- - - - - -<% - objConn.Close -%> diff --git a/editmacine.asp.backup-20251027 b/editmacine.asp.backup-20251027 deleted file mode 100644 index 18d210a..0000000 --- a/editmacine.asp.backup-20251027 +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - - -
-<% - ' Get and validate all inputs - Dim machineid, modelid, machinetypeid, businessunitid, printerid, mapleft, maptop - machineid = Trim(Request.Querystring("machineid")) - modelid = Trim(Request.Form("modelid")) - machinetypeid = Trim(Request.Form("machinetypeid")) - businessunitid = Trim(Request.Form("businessunitid")) - printerid = Trim(Request.Form("printerid")) - mapleft = Trim(Request.Form("mapleft")) - maptop = Trim(Request.Form("maptop")) - - ' Get form inputs for new business unit - Dim newbusinessunit - newbusinessunit = Trim(Request.Form("newbusinessunit")) - - ' Get form inputs for new machine type - Dim newmachinetype, newmachinedescription, newfunctionalaccountid - newmachinetype = Trim(Request.Form("newmachinetype")) - newmachinedescription = Trim(Request.Form("newmachinedescription")) - newfunctionalaccountid = Trim(Request.Form("newfunctionalaccountid")) - - ' Get form inputs for new functional account - Dim newfunctionalaccount - newfunctionalaccount = Trim(Request.Form("newfunctionalaccount")) - - ' Get form inputs for new model - Dim newmodelnumber, newvendorid, newmodelimage - newmodelnumber = Trim(Request.Form("newmodelnumber")) - newvendorid = Trim(Request.Form("newvendorid")) - newmodelimage = Trim(Request.Form("newmodelimage")) - - ' Get form inputs for new vendor - Dim newvendorname - newvendorname = Trim(Request.Form("newvendorname")) - - ' Validate required fields - If Not IsNumeric(machineid) Or CLng(machineid) < 1 Then - Response.Write("
Error: Invalid machine ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If modelid <> "new" And (Not IsNumeric(modelid)) Then - Response.Write("
Error: Invalid model ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If machinetypeid <> "new" And (Not IsNumeric(machinetypeid)) Then - Response.Write("
Error: Invalid machine type ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If businessunitid <> "new" And (Not IsNumeric(businessunitid)) Then - Response.Write("
Error: Invalid business unit ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new business unit creation - If businessunitid = "new" Then - If Len(newbusinessunit) = 0 Then - Response.Write("
New business unit name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newbusinessunit) > 50 Then - Response.Write("
Business unit name too long
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape single quotes - Dim escapedBUName - escapedBUName = Replace(newbusinessunit, "'", "''") - - ' Insert new business unit - Dim sqlNewBU - sqlNewBU = "INSERT INTO businessunits (businessunit, isactive) VALUES ('" & escapedBUName & "', 1)" - - On Error Resume Next - objConn.Execute sqlNewBU - - If Err.Number <> 0 Then - Response.Write("
Error creating new business unit: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created business unit ID - Dim rsNewBU - Set rsNewBU = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - businessunitid = CLng(rsNewBU("newid")) - rsNewBU.Close - Set rsNewBU = Nothing - On Error Goto 0 - End If - - ' Handle new machine type creation - If machinetypeid = "new" Then - If Len(newmachinetype) = 0 Then - Response.Write("
New machine type name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newfunctionalaccountid) = 0 Then - Response.Write("
Functional account is required for new machine type
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newmachinetype) > 50 Or Len(newmachinedescription) > 255 Then - Response.Write("
Machine type field length exceeded
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new functional account creation (nested) - If newfunctionalaccountid = "new" Then - If Len(newfunctionalaccount) = 0 Then - Response.Write("
New functional account name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newfunctionalaccount) > 50 Then - Response.Write("
Functional account name too long
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape single quotes - Dim escapedFAName - escapedFAName = Replace(newfunctionalaccount, "'", "''") - - ' Insert new functional account - Dim sqlNewFA - sqlNewFA = "INSERT INTO functionalaccounts (functionalaccount, isactive) VALUES ('" & escapedFAName & "', 1)" - - On Error Resume Next - objConn.Execute sqlNewFA - - If Err.Number <> 0 Then - Response.Write("
Error creating new functional account: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created functional account ID - Dim rsNewFA - Set rsNewFA = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newfunctionalaccountid = CLng(rsNewFA("newid")) - rsNewFA.Close - Set rsNewFA = Nothing - On Error Goto 0 - End If - - ' Escape single quotes - Dim escapedMTName, escapedMTDesc - escapedMTName = Replace(newmachinetype, "'", "''") - escapedMTDesc = Replace(newmachinedescription, "'", "''") - - ' Insert new machine type - Dim sqlNewMT - sqlNewMT = "INSERT INTO machinetypes (machinetype, machinedescription, functionalaccountid, isactive) " & _ - "VALUES ('" & escapedMTName & "', '" & escapedMTDesc & "', " & newfunctionalaccountid & ", 1)" - - On Error Resume Next - objConn.Execute sqlNewMT - - If Err.Number <> 0 Then - Response.Write("
Error creating new machine type: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created machine type ID - Dim rsNewMT - Set rsNewMT = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - machinetypeid = CLng(rsNewMT("newid")) - rsNewMT.Close - Set rsNewMT = Nothing - On Error Goto 0 - End If - - ' Handle new model creation - If modelid = "new" Then - If Len(newmodelnumber) = 0 Then - Response.Write("
New model number is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newvendorid) = 0 Then - Response.Write("
Vendor is required for new model
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newmodelnumber) > 50 Or Len(newmodelimage) > 100 Then - Response.Write("
Model field length exceeded
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new vendor creation (nested) - If newvendorid = "new" Then - If Len(newvendorname) = 0 Then - Response.Write("
New vendor name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newvendorname) > 50 Then - Response.Write("
Vendor name too long
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape single quotes - Dim escapedVendorName - escapedVendorName = Replace(newvendorname, "'", "''") - - ' Insert new vendor (with ismachine=1) - Dim sqlNewVendor - sqlNewVendor = "INSERT INTO vendors (vendor, isactive, isprinter, ispc, ismachine) " & _ - "VALUES ('" & escapedVendorName & "', 1, 0, 0, 1)" - - On Error Resume Next - objConn.Execute sqlNewVendor - - If Err.Number <> 0 Then - Response.Write("
Error creating new vendor: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created vendor ID - Dim rsNewVendor - Set rsNewVendor = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newvendorid = CLng(rsNewVendor("newid")) - rsNewVendor.Close - Set rsNewVendor = Nothing - On Error Goto 0 - End If - - ' Escape single quotes for model - Dim escapedModelNumber, escapedModelImage - escapedModelNumber = Replace(newmodelnumber, "'", "''") - escapedModelImage = Replace(newmodelimage, "'", "''") - - ' Set default image if not specified - If escapedModelImage = "" Then - escapedModelImage = "default.png" - End If - - ' Insert new model - Dim sqlNewModel - sqlNewModel = "INSERT INTO models (modelnumber, vendorid, image, isactive) " & _ - "VALUES ('" & escapedModelNumber & "', " & newvendorid & ", '" & escapedModelImage & "', 1)" - - On Error Resume Next - objConn.Execute sqlNewModel - - If Err.Number <> 0 Then - Response.Write("
Error creating new model: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created model ID - Dim rsNewModel - Set rsNewModel = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - modelid = CLng(rsNewModel("newid")) - rsNewModel.Close - Set rsNewModel = Nothing - On Error Goto 0 - End If - - ' Build UPDATE statement - Dim strSQL - strSQL = "UPDATE machines SET " & _ - "modelnumberid = " & modelid & ", " & _ - "machinetypeid = " & machinetypeid & ", " & _ - "businessunitid = " & businessunitid - - ' Add optional printerid - If printerid <> "" And IsNumeric(printerid) Then - strSQL = strSQL & ", printerid = " & printerid - End If - - ' Add optional map coordinates - If mapleft <> "" And maptop <> "" And IsNumeric(mapleft) And IsNumeric(maptop) Then - strSQL = strSQL & ", mapleft = " & mapleft & ", maptop = " & maptop - End If - - strSQL = strSQL & " WHERE machineid = " & machineid - - On Error Resume Next - objConn.Execute strSQL - - If Err.Number <> 0 Then - Response.Write("
Error: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - objConn.Close -%> - -
- - diff --git a/editmacine.asp.backup-refactor-20251027 b/editmacine.asp.backup-refactor-20251027 deleted file mode 100644 index d7a71a1..0000000 --- a/editmacine.asp.backup-refactor-20251027 +++ /dev/null @@ -1,410 +0,0 @@ -<% -'============================================================================= -' FILE: editmacine.asp -' PURPOSE: Edit machine information with nested entity creation -' SECURITY: Parameterized queries, HTML encoding, input validation -' UPDATED: 2025-10-27 - Migrated to secure patterns -' NOTE: File has typo in name (macine vs machine) - preserved for compatibility -'============================================================================= -%> - - - - - - - - -
-<% - '============================================================================= - ' SECURITY: Validate machineid from querystring - '============================================================================= - Dim machineid - machineid = GetSafeInteger("QS", "machineid", 0, 1, 999999) - - If machineid = 0 Then - Response.Write("
Error: Invalid machine ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - '============================================================================= - ' SECURITY: Get and validate all form inputs - '============================================================================= - Dim modelid, machinetypeid, businessunitid, printerid, mapleft, maptop - modelid = GetSafeString("FORM", "modelid", "", 1, 50, "") - machinetypeid = GetSafeString("FORM", "machinetypeid", "", 1, 50, "") - businessunitid = GetSafeString("FORM", "businessunitid", "", 1, 50, "") - printerid = GetSafeInteger("FORM", "printerid", 0, 0, 999999) - mapleft = GetSafeInteger("FORM", "mapleft", 0, 0, 9999) - maptop = GetSafeInteger("FORM", "maptop", 0, 0, 9999) - - ' Get form inputs for new business unit - Dim newbusinessunit - newbusinessunit = GetSafeString("FORM", "newbusinessunitname", "", 0, 50, "") - - ' Get form inputs for new machine type - Dim newmachinetype, newmachinedescription, newfunctionalaccountid - newmachinetype = GetSafeString("FORM", "newmachinetypename", "", 0, 50, "") - newmachinedescription = GetSafeString("FORM", "newmachinetypedescription", "", 0, 255, "") - newfunctionalaccountid = GetSafeString("FORM", "newfunctionalaccountid", "", 0, 50, "") - - ' Get form inputs for new functional account - Dim newfunctionalaccount - newfunctionalaccount = GetSafeString("FORM", "newfunctionalaccountname", "", 0, 50, "") - - ' Get form inputs for new model - Dim newmodelnumber, newvendorid, newmodelimage - newmodelnumber = GetSafeString("FORM", "newmodelnumber", "", 0, 255, "") - newvendorid = GetSafeString("FORM", "newvendorid", "", 0, 50, "") - newmodelimage = GetSafeString("FORM", "newmodelimage", "", 0, 255, "") - - ' Get form inputs for new vendor - Dim newvendorname - newvendorname = GetSafeString("FORM", "newvendorname", "", 0, 50, "") - - '============================================================================= - ' Validate required fields - '============================================================================= - If modelid <> "new" And (Not IsNumeric(modelid)) Then - Response.Write("
Error: Invalid model ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If machinetypeid <> "new" And (Not IsNumeric(machinetypeid)) Then - Response.Write("
Error: Invalid machine type ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If businessunitid <> "new" And (Not IsNumeric(businessunitid)) Then - Response.Write("
Error: Invalid business unit ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - '============================================================================= - ' SECURITY: Handle new business unit creation with parameterized query - '============================================================================= - If businessunitid = "new" Then - If Len(newbusinessunit) = 0 Then - Response.Write("
New business unit name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Insert new business unit using parameterized query - Dim sqlNewBU - sqlNewBU = "INSERT INTO businessunits (businessunit, isactive) VALUES (?, 1)" - - On Error Resume Next - Dim cmdNewBU - Set cmdNewBU = Server.CreateObject("ADODB.Command") - cmdNewBU.ActiveConnection = objConn - cmdNewBU.CommandText = sqlNewBU - cmdNewBU.CommandType = 1 - cmdNewBU.Parameters.Append cmdNewBU.CreateParameter("@businessunit", 200, 1, 50, newbusinessunit) - cmdNewBU.Execute - - If Err.Number <> 0 Then - Response.Write("
Error creating new business unit: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created business unit ID - Dim rsNewBU - Set rsNewBU = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - businessunitid = 0 - If Not rsNewBU.EOF Then - If Not IsNull(rsNewBU("newid")) Then - businessunitid = CLng(rsNewBU("newid")) - End If - End If - rsNewBU.Close - Set rsNewBU = Nothing - Set cmdNewBU = Nothing - On Error Goto 0 - End If - - '============================================================================= - ' SECURITY: Handle new machine type creation with parameterized query - '============================================================================= - If machinetypeid = "new" Then - If Len(newmachinetype) = 0 Then - Response.Write("
New machine type name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newfunctionalaccountid) = 0 Then - Response.Write("
Functional account is required for new machine type
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new functional account creation (nested) - If newfunctionalaccountid = "new" Then - If Len(newfunctionalaccount) = 0 Then - Response.Write("
New functional account name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Insert new functional account using parameterized query - Dim sqlNewFA - sqlNewFA = "INSERT INTO functionalaccounts (functionalaccount, isactive) VALUES (?, 1)" - - On Error Resume Next - Dim cmdNewFA - Set cmdNewFA = Server.CreateObject("ADODB.Command") - cmdNewFA.ActiveConnection = objConn - cmdNewFA.CommandText = sqlNewFA - cmdNewFA.CommandType = 1 - cmdNewFA.Parameters.Append cmdNewFA.CreateParameter("@functionalaccount", 200, 1, 50, newfunctionalaccount) - cmdNewFA.Execute - - If Err.Number <> 0 Then - Response.Write("
Error creating new functional account: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created functional account ID - Dim rsNewFA - Set rsNewFA = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newfunctionalaccountid = 0 - If Not rsNewFA.EOF Then - If Not IsNull(rsNewFA("newid")) Then - newfunctionalaccountid = CLng(rsNewFA("newid")) - End If - End If - rsNewFA.Close - Set rsNewFA = Nothing - Set cmdNewFA = Nothing - On Error Goto 0 - End If - - ' Insert new machine type using parameterized query - Dim sqlNewMT - sqlNewMT = "INSERT INTO machinetypes (machinetype, machinedescription, functionalaccountid, isactive) VALUES (?, ?, ?, 1)" - - On Error Resume Next - Dim cmdNewMT - Set cmdNewMT = Server.CreateObject("ADODB.Command") - cmdNewMT.ActiveConnection = objConn - cmdNewMT.CommandText = sqlNewMT - cmdNewMT.CommandType = 1 - cmdNewMT.Parameters.Append cmdNewMT.CreateParameter("@machinetype", 200, 1, 50, newmachinetype) - cmdNewMT.Parameters.Append cmdNewMT.CreateParameter("@machinedescription", 200, 1, 255, newmachinedescription) - cmdNewMT.Parameters.Append cmdNewMT.CreateParameter("@functionalaccountid", 3, 1, , CLng(newfunctionalaccountid)) - cmdNewMT.Execute - - If Err.Number <> 0 Then - Response.Write("
Error creating new machine type: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created machine type ID - Dim rsNewMT - Set rsNewMT = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - machinetypeid = 0 - If Not rsNewMT.EOF Then - If Not IsNull(rsNewMT("newid")) Then - machinetypeid = CLng(rsNewMT("newid")) - End If - End If - rsNewMT.Close - Set rsNewMT = Nothing - Set cmdNewMT = Nothing - On Error Goto 0 - End If - - '============================================================================= - ' SECURITY: Handle new model creation with parameterized query - '============================================================================= - If modelid = "new" Then - If Len(newmodelnumber) = 0 Then - Response.Write("
New model number is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newvendorid) = 0 Then - Response.Write("
Vendor is required for new model
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new vendor creation (nested) - If newvendorid = "new" Then - If Len(newvendorname) = 0 Then - Response.Write("
New vendor name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Insert new vendor using parameterized query - Dim sqlNewVendor - sqlNewVendor = "INSERT INTO vendors (vendor, isactive, isprinter, ispc, ismachine) VALUES (?, 1, 0, 0, 1)" - - On Error Resume Next - Dim cmdNewVendor - Set cmdNewVendor = Server.CreateObject("ADODB.Command") - cmdNewVendor.ActiveConnection = objConn - cmdNewVendor.CommandText = sqlNewVendor - cmdNewVendor.CommandType = 1 - cmdNewVendor.Parameters.Append cmdNewVendor.CreateParameter("@vendor", 200, 1, 50, newvendorname) - cmdNewVendor.Execute - - If Err.Number <> 0 Then - Response.Write("
Error creating new vendor: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created vendor ID - Dim rsNewVendor - Set rsNewVendor = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newvendorid = 0 - If Not rsNewVendor.EOF Then - If Not IsNull(rsNewVendor("newid")) Then - newvendorid = CLng(rsNewVendor("newid")) - End If - End If - rsNewVendor.Close - Set rsNewVendor = Nothing - Set cmdNewVendor = Nothing - On Error Goto 0 - End If - - ' Set default image if not specified - If newmodelimage = "" Then - newmodelimage = "default.png" - End If - - ' Insert new model using parameterized query - Dim sqlNewModel - sqlNewModel = "INSERT INTO models (modelnumber, vendorid, image, isactive) VALUES (?, ?, ?, 1)" - - On Error Resume Next - Dim cmdNewModel - Set cmdNewModel = Server.CreateObject("ADODB.Command") - cmdNewModel.ActiveConnection = objConn - cmdNewModel.CommandText = sqlNewModel - cmdNewModel.CommandType = 1 - cmdNewModel.Parameters.Append cmdNewModel.CreateParameter("@modelnumber", 200, 1, 255, newmodelnumber) - cmdNewModel.Parameters.Append cmdNewModel.CreateParameter("@vendorid", 3, 1, , CLng(newvendorid)) - cmdNewModel.Parameters.Append cmdNewModel.CreateParameter("@image", 200, 1, 255, newmodelimage) - cmdNewModel.Execute - - If Err.Number <> 0 Then - Response.Write("
Error creating new model: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created model ID - Dim rsNewModel - Set rsNewModel = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - modelid = 0 - If Not rsNewModel.EOF Then - If Not IsNull(rsNewModel("newid")) Then - modelid = CLng(rsNewModel("newid")) - End If - End If - rsNewModel.Close - Set rsNewModel = Nothing - Set cmdNewModel = Nothing - On Error Goto 0 - End If - - '============================================================================= - ' SECURITY: Update machine using parameterized query - '============================================================================= - ' Build UPDATE statement with parameterized query - Dim strSQL, paramCount - paramCount = 0 - - strSQL = "UPDATE machines SET modelnumberid = ?, machinetypeid = ?, businessunitid = ?" - paramCount = 3 - - ' Add optional printerid - If printerid > 0 Then - strSQL = strSQL & ", printerid = ?" - paramCount = paramCount + 1 - End If - - ' Add optional map coordinates - If mapleft > 0 And maptop > 0 Then - strSQL = strSQL & ", mapleft = ?, maptop = ?" - paramCount = paramCount + 2 - End If - - strSQL = strSQL & " WHERE machineid = ?" - - On Error Resume Next - Dim cmdUpdate - Set cmdUpdate = Server.CreateObject("ADODB.Command") - cmdUpdate.ActiveConnection = objConn - cmdUpdate.CommandText = strSQL - cmdUpdate.CommandType = 1 - - ' Add parameters in order - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@modelnumberid", 3, 1, , CLng(modelid)) - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@machinetypeid", 3, 1, , CLng(machinetypeid)) - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@businessunitid", 3, 1, , CLng(businessunitid)) - - If printerid > 0 Then - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@printerid", 3, 1, , CLng(printerid)) - End If - - If mapleft > 0 And maptop > 0 Then - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@mapleft", 3, 1, , CLng(mapleft)) - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@maptop", 3, 1, , CLng(maptop)) - End If - - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@machineid", 3, 1, , CLng(machineid)) - - cmdUpdate.Execute - - If Err.Number <> 0 Then - Response.Write("
Error: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - Set cmdUpdate = Nothing - objConn.Close - Response.End - End If - - Set cmdUpdate = Nothing - On Error Goto 0 -%> - -<% -'============================================================================= -' CLEANUP -'============================================================================= -objConn.Close -%> -
- - diff --git a/editprinter.asp.backup-20251027 b/editprinter.asp.backup-20251027 deleted file mode 100644 index 501f49a..0000000 --- a/editprinter.asp.backup-20251027 +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - -
-<% - ' Get and validate all inputs - Dim printerid, modelid, serialnumber, ipaddress, fqdn, printercsfname, printerwindowsname, machineid, maptop, mapleft - printerid = Trim(Request.Querystring("printerid")) - modelid = Trim(Request.Form("modelid")) - serialnumber = Trim(Request.Form("serialnumber")) - ipaddress = Trim(Request.Form("ipaddress")) - fqdn = Trim(Request.Form("fqdn")) - printercsfname = Trim(Request.Form("printercsfname")) - printerwindowsname = Trim(Request.Form("printerwindowsname")) - machineid = Trim(Request.Form("machineid")) - maptop = Trim(Request.Form("maptop")) - mapleft = Trim(Request.Form("mapleft")) - - ' Get form inputs for new model - Dim newmodelnumber, newvendorid, newmodelnotes, newmodeldocpath - newmodelnumber = Trim(Request.Form("newmodelnumber")) - newvendorid = Trim(Request.Form("newvendorid")) - newmodelnotes = Trim(Request.Form("newmodelnotes")) - newmodeldocpath = Trim(Request.Form("newmodeldocpath")) - - ' Get form inputs for new vendor - Dim newvendorname - newvendorname = Trim(Request.Form("newvendorname")) - - ' Validate required fields - If Not IsNumeric(printerid) Or CLng(printerid) < 1 Then - Response.Write("
Error: Invalid printer ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If modelid <> "new" And (Not IsNumeric(modelid)) Then - Response.Write("
Error: Invalid model ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Not IsNumeric(machineid) Then - Response.Write("
Error: Invalid machine ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Validate field lengths - If Len(serialnumber) > 100 Or Len(fqdn) > 255 Or Len(printercsfname) > 50 Or Len(printerwindowsname) > 255 Then - Response.Write("
Error: Field length exceeded.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new model creation - If modelid = "new" Then - If Len(newmodelnumber) = 0 Then - Response.Write("
New model number is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newvendorid) = 0 Then - Response.Write("
Vendor is required for new model
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newmodelnumber) > 255 Or Len(newmodelnotes) > 255 Or Len(newmodeldocpath) > 255 Then - Response.Write("
Model field length exceeded
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new vendor creation (nested) - If newvendorid = "new" Then - If Len(newvendorname) = 0 Then - Response.Write("
New vendor name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newvendorname) > 50 Then - Response.Write("
Vendor name too long
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape single quotes - Dim escapedVendorName - escapedVendorName = Replace(newvendorname, "'", "''") - - ' Insert new vendor (with isprinter=1) - Dim sqlNewVendor - sqlNewVendor = "INSERT INTO vendors (vendor, isactive, isprinter, ispc, ismachine) " & _ - "VALUES ('" & escapedVendorName & "', 1, 1, 0, 0)" - - On Error Resume Next - objConn.Execute sqlNewVendor - - If Err.Number <> 0 Then - Response.Write("
Error creating new vendor: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created vendor ID - Dim rsNewVendor - Set rsNewVendor = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newvendorid = CLng(rsNewVendor("newid")) - rsNewVendor.Close - Set rsNewVendor = Nothing - On Error Goto 0 - End If - - ' Escape single quotes for model - Dim escapedModelNumber, escapedModelNotes, escapedModelDocPath - escapedModelNumber = Replace(newmodelnumber, "'", "''") - escapedModelNotes = Replace(newmodelnotes, "'", "''") - escapedModelDocPath = Replace(newmodeldocpath, "'", "''") - - ' Insert new model - Dim sqlNewModel - sqlNewModel = "INSERT INTO models (modelnumber, vendorid, notes, documentationpath, isactive) " & _ - "VALUES ('" & escapedModelNumber & "', " & newvendorid & ", '" & escapedModelNotes & "', '" & escapedModelDocPath & "', 1)" - - On Error Resume Next - objConn.Execute sqlNewModel - - If Err.Number <> 0 Then - Response.Write("
Error creating new model: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created model ID - Dim rsNewModel - Set rsNewModel = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - modelid = CLng(rsNewModel("newid")) - rsNewModel.Close - Set rsNewModel = Nothing - On Error Goto 0 - End If - - ' Escape single quotes - serialnumber = Replace(serialnumber, "'", "''") - ipaddress = Replace(ipaddress, "'", "''") - fqdn = Replace(fqdn, "'", "''") - printercsfname = Replace(printercsfname, "'", "''") - printerwindowsname = Replace(printerwindowsname, "'", "''") - - ' Handle map coordinates - default to 50 if not provided - Dim maptopSQL, mapleftSQL - If maptop <> "" And IsNumeric(maptop) Then - maptopSQL = maptop - Else - maptopSQL = "50" - End If - - If mapleft <> "" And IsNumeric(mapleft) Then - mapleftSQL = mapleft - Else - mapleftSQL = "50" - End If - - ' Build UPDATE statement - Dim strSQL - strSQL = "UPDATE printers SET " & _ - "modelid = " & modelid & ", " & _ - "serialnumber = '" & serialnumber & "', " & _ - "ipaddress = '" & ipaddress & "', " & _ - "fqdn = '" & fqdn & "', " & _ - "printercsfname = '" & printercsfname & "', " & _ - "printerwindowsname = '" & printerwindowsname & "', " & _ - "machineid = " & machineid & ", " & _ - "maptop = " & maptopSQL & ", " & _ - "mapleft = " & mapleftSQL & " " & _ - "WHERE printerid = " & printerid - - On Error Resume Next - objConn.Execute strSQL - - If Err.Number <> 0 Then - Response.Write("
Error: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - objConn.Close -%> - -
- - \ No newline at end of file diff --git a/includes/data_cache.asp.backup-20251113-064544 b/includes/data_cache.asp.backup-20251113-064544 deleted file mode 100644 index 4e7707b..0000000 --- a/includes/data_cache.asp.backup-20251113-064544 +++ /dev/null @@ -1,417 +0,0 @@ -<% -' Universal data caching system for frequently accessed database queries -' Uses Application-level cache with configurable TTL (Time To Live) - -' Cache durations in minutes -Const CACHE_DROPDOWN_TTL = 60 ' Dropdowns (vendors, models) - 1 hour -Const CACHE_LIST_TTL = 5 ' List pages (printers, machines) - 5 minutes -Const CACHE_STATIC_TTL = 1440 ' Static data (rarely changes) - 24 hours - -'============================================================================= -' DROPDOWN DATA CACHING (Vendors, Models, etc.) -'============================================================================= - -' Get all printer vendors (cached) -Function GetPrinterVendorsCached() - Dim cacheKey, cacheAge, cachedData - cacheKey = "dropdown_printer_vendors" - - ' Check cache - If Not IsEmpty(Application(cacheKey)) Then - cacheAge = DateDiff("n", Application(cacheKey & "_time"), Now()) - If cacheAge < CACHE_DROPDOWN_TTL Then - GetPrinterVendorsCached = Application(cacheKey) - Exit Function - End If - End If - - ' Fetch from database - Dim sql, rs_temp, resultArray(), count, i - sql = "SELECT vendorid, vendor FROM vendors WHERE isprinter=1 AND isactive=1 ORDER BY vendor ASC" - - Set rs_temp = objConn.Execute(sql) - - ' Count rows - count = 0 - While Not rs_temp.EOF - count = count + 1 - rs_temp.MoveNext - Wend - - If count = 0 Then - Set rs_temp = Nothing - GetPrinterVendorsCached = Array() - Exit Function - End If - - ' Reset to beginning - rs_temp.MoveFirst - - ' Build array - ReDim resultArray(count - 1, 1) ' vendorid, vendor - i = 0 - While Not rs_temp.EOF - resultArray(i, 0) = rs_temp("vendorid") - resultArray(i, 1) = rs_temp("vendor") - i = i + 1 - rs_temp.MoveNext - Wend - - rs_temp.Close - Set rs_temp = Nothing - - ' Cache it - Application.Lock - Application(cacheKey) = resultArray - Application(cacheKey & "_time") = Now() - Application.Unlock - - GetPrinterVendorsCached = resultArray -End Function - -' Get all printer models (cached) -Function GetPrinterModelsCached() - Dim cacheKey, cacheAge, cachedData - cacheKey = "dropdown_printer_models" - - ' Check cache - If Not IsEmpty(Application(cacheKey)) Then - cacheAge = DateDiff("n", Application(cacheKey & "_time"), Now()) - If cacheAge < CACHE_DROPDOWN_TTL Then - GetPrinterModelsCached = Application(cacheKey) - Exit Function - End If - End If - - ' Fetch from database - Dim sql, rs_temp, resultArray(), count, i - sql = "SELECT models.modelnumberid, models.modelnumber, vendors.vendor " & _ - "FROM vendors, models " & _ - "WHERE models.vendorid = vendors.vendorid " & _ - "AND vendors.isprinter=1 AND models.isactive=1 " & _ - "ORDER BY modelnumber ASC" - - Set rs_temp = objConn.Execute(sql) - - ' Count rows - count = 0 - While Not rs_temp.EOF - count = count + 1 - rs_temp.MoveNext - Wend - - If count = 0 Then - Set rs_temp = Nothing - GetPrinterModelsCached = Array() - Exit Function - End If - - ' Reset to beginning - rs_temp.MoveFirst - - ' Build array - ReDim resultArray(count - 1, 2) ' modelnumberid, modelnumber, vendor - i = 0 - While Not rs_temp.EOF - resultArray(i, 0) = rs_temp("modelnumberid") - resultArray(i, 1) = rs_temp("modelnumber") - resultArray(i, 2) = rs_temp("vendor") - i = i + 1 - rs_temp.MoveNext - Wend - - rs_temp.Close - Set rs_temp = Nothing - - ' Cache it - Application.Lock - Application(cacheKey) = resultArray - Application(cacheKey & "_time") = Now() - Application.Unlock - - GetPrinterModelsCached = resultArray -End Function - -'============================================================================= -' LIST PAGE CACHING (Printer list, Machine list, etc.) -'============================================================================= - -' Get all active printers (cached) - for displayprinters.asp -Function GetPrinterListCached() - Dim cacheKey, cacheAge - cacheKey = "list_printers" - - ' Check cache - If Not IsEmpty(Application(cacheKey)) Then - cacheAge = DateDiff("n", Application(cacheKey & "_time"), Now()) - If cacheAge < CACHE_LIST_TTL Then - GetPrinterListCached = Application(cacheKey) - Exit Function - End If - End If - - ' Fetch from database - Dim sql, rs_temp, resultArray(), count, i - sql = "SELECT printers.printerid AS printer, printers.*, vendors.*, models.*, machines.* " & _ - "FROM printers, vendors, models, machines " & _ - "WHERE printers.modelid=models.modelnumberid " & _ - "AND models.vendorid=vendors.vendorid " & _ - "AND printers.machineid=machines.machineid " & _ - "AND printers.isactive=1 " & _ - "ORDER BY machinenumber ASC" - - Set rs_temp = objConn.Execute(sql) - - ' Count rows - count = 0 - While Not rs_temp.EOF - count = count + 1 - rs_temp.MoveNext - Wend - - If count = 0 Then - Set rs_temp = Nothing - GetPrinterListCached = Array() - Exit Function - End If - - rs_temp.MoveFirst - - ' Build array with all needed fields - ReDim resultArray(count - 1, 11) ' printer, image, installpath, machinenumber, machineid, vendor, modelnumber, documentationpath, printercsfname, ipaddress, serialnumber, islocationonly - i = 0 - While Not rs_temp.EOF - resultArray(i, 0) = rs_temp("printer") - resultArray(i, 1) = rs_temp("image") - resultArray(i, 2) = rs_temp("installpath") - resultArray(i, 3) = rs_temp("machinenumber") - resultArray(i, 4) = rs_temp("machineid") - resultArray(i, 5) = rs_temp("vendor") - resultArray(i, 6) = rs_temp("modelnumber") - resultArray(i, 7) = rs_temp("documentationpath") - resultArray(i, 8) = rs_temp("printercsfname") - resultArray(i, 9) = rs_temp("ipaddress") - resultArray(i, 10) = rs_temp("serialnumber") - - ' Convert islocationonly bit to 1/0 integer (bit fields come as binary) - On Error Resume Next - If IsNull(rs_temp("islocationonly")) Then - resultArray(i, 11) = 0 - Else - ' Convert bit field to integer (0 or 1) - resultArray(i, 11) = Abs(CBool(rs_temp("islocationonly"))) - End If - On Error Goto 0 - - i = i + 1 - rs_temp.MoveNext - Wend - - rs_temp.Close - Set rs_temp = Nothing - - ' Cache it - Application.Lock - Application(cacheKey) = resultArray - Application(cacheKey & "_time") = Now() - Application.Unlock - - GetPrinterListCached = resultArray -End Function - -'============================================================================= -' HELPER FUNCTIONS -'============================================================================= - -' Render dropdown options from cached vendor data -Function RenderVendorOptions(selectedID) - Dim vendors, output, i - vendors = GetPrinterVendorsCached() - output = "" - - On Error Resume Next - If Not IsArray(vendors) Or UBound(vendors) < 0 Then - RenderVendorOptions = "" - Exit Function - End If - On Error Goto 0 - - For i = 0 To UBound(vendors) - If CLng(vendors(i, 0)) = CLng(selectedID) Then - output = output & "" - Else - output = output & "" - End If - Next - - RenderVendorOptions = output -End Function - -' Render dropdown options from cached model data -Function RenderModelOptions(selectedID) - Dim models, output, i - models = GetPrinterModelsCached() - output = "" - - On Error Resume Next - If Not IsArray(models) Or UBound(models) < 0 Then - RenderModelOptions = "" - Exit Function - End If - On Error Goto 0 - - For i = 0 To UBound(models) - If CLng(models(i, 0)) = CLng(selectedID) Then - output = output & "" - Else - output = output & "" - End If - Next - - RenderModelOptions = output -End Function - -' Get all support teams (cached) - for application dropdowns -Function GetSupportTeamsCached() - Dim cacheKey, cacheAge, cachedData - cacheKey = "dropdown_support_teams" - - ' Check cache - If Not IsEmpty(Application(cacheKey)) Then - cacheAge = DateDiff("n", Application(cacheKey & "_time"), Now()) - If cacheAge < CACHE_DROPDOWN_TTL Then - GetSupportTeamsCached = Application(cacheKey) - Exit Function - End If - End If - - ' Fetch from database - Dim sql, rs_temp, resultArray(), count, i - sql = "SELECT supporteamid, teamname FROM supportteams WHERE isactive=1 ORDER BY teamname ASC" - - Set rs_temp = objConn.Execute(sql) - - ' Count rows - count = 0 - While Not rs_temp.EOF - count = count + 1 - rs_temp.MoveNext - Wend - - If count = 0 Then - Set rs_temp = Nothing - GetSupportTeamsCached = Array() - Exit Function - End If - - ' Reset to beginning - rs_temp.MoveFirst - - ' Build array - ReDim resultArray(count - 1, 1) ' supporteamid, teamname - i = 0 - While Not rs_temp.EOF - resultArray(i, 0) = rs_temp("supporteamid") - resultArray(i, 1) = rs_temp("teamname") - i = i + 1 - rs_temp.MoveNext - Wend - - rs_temp.Close - Set rs_temp = Nothing - - ' Cache it - Application.Lock - Application(cacheKey) = resultArray - Application(cacheKey & "_time") = Now() - Application.Unlock - - GetSupportTeamsCached = resultArray -End Function - -' Render dropdown options from cached support team data -Function RenderSupportTeamOptions(selectedID) - Dim teams, output, i - teams = GetSupportTeamsCached() - output = "" - - On Error Resume Next - If Not IsArray(teams) Or UBound(teams) < 0 Then - RenderSupportTeamOptions = "" - Exit Function - End If - On Error Goto 0 - - For i = 0 To UBound(teams) - If CLng(teams(i, 0)) = CLng(selectedID) Then - output = output & "" - Else - output = output & "" - End If - Next - - RenderSupportTeamOptions = output -End Function - -' Clear dropdown cache (call after adding/editing vendors or models) -Sub ClearDropdownCache() - Application.Lock - Application("dropdown_printer_vendors") = Empty - Application("dropdown_printer_vendors_time") = Empty - Application("dropdown_printer_models") = Empty - Application("dropdown_printer_models_time") = Empty - Application("dropdown_support_teams") = Empty - Application("dropdown_support_teams_time") = Empty - Application.Unlock -End Sub - -' Clear list cache (call after adding/editing printers) -Sub ClearListCache() - Application.Lock - Application("list_printers") = Empty - Application("list_printers_time") = Empty - Application.Unlock -End Sub - -' Clear ALL data cache -Sub ClearAllDataCache() - Dim key, keysToRemove(), count, i - count = 0 - - ' First pass: collect keys to remove - ReDim keysToRemove(100) ' Initial size - For Each key In Application.Contents - If Left(key, 9) = "dropdown_" Or Left(key, 5) = "list_" Then - keysToRemove(count) = key - count = count + 1 - If count Mod 100 = 0 Then - ReDim Preserve keysToRemove(count + 100) - End If - End If - Next - - ' Second pass: remove collected keys - Application.Lock - For i = 0 To count - 1 - Application.Contents.Remove(keysToRemove(i)) - Next - Application.Unlock -End Sub - -' Get cache stats -Function GetCacheStats() - Dim stats, key, count - count = 0 - - For Each key In Application.Contents - If Left(key, 9) = "dropdown_" Or Left(key, 5) = "list_" Or Left(key, 7) = "zabbix_" Then - If Right(key, 5) <> "_time" And Right(key, 11) <> "_refreshing" Then - count = count + 1 - End If - End If - Next - - stats = "Cached items: " & count - GetCacheStats = stats -End Function -%> diff --git a/includes/sql.asp.production b/includes/sql.asp.production deleted file mode 100644 index 674ede7..0000000 --- a/includes/sql.asp.production +++ /dev/null @@ -1,8 +0,0 @@ -<% - ' objConn - script-global connection object (no Dim for global scope) - Session.Timeout=15 - Set objConn=Server.CreateObject("ADODB.Connection") - objConn.ConnectionString="DSN=shopdb;Uid=root;Pwd=WJF11sql;Option=3;Pooling=True;Max Pool Size=100;" - objConn.Open - set rs = server.createobject("ADODB.Recordset") -%> \ No newline at end of file diff --git a/includes/wjf_employees-sql.asp.produciton b/includes/wjf_employees-sql.asp.produciton deleted file mode 100644 index 889f105..0000000 --- a/includes/wjf_employees-sql.asp.produciton +++ /dev/null @@ -1,8 +0,0 @@ -<% - Dim objConn - Session.Timeout=15 - Set objConn=Server.CreateObject("ADODB.Connection") - objConn.ConnectionString="DSN=wjf_employees;Uid=root;Pwd=WJF11sql;Option=3;Pooling=True;Max Pool Size=100;" - objConn.Open - set rs = server.createobject("ADODB.Recordset") -%> \ No newline at end of file diff --git a/includes/zabbix_cached.asp.backup-20251113-064547 b/includes/zabbix_cached.asp.backup-20251113-064547 deleted file mode 100644 index 6a5c735..0000000 --- a/includes/zabbix_cached.asp.backup-20251113-064547 +++ /dev/null @@ -1,130 +0,0 @@ -<% -' Cached Zabbix API wrapper with background refresh -' Include the base zabbix.asp functions -%> - -<% - -' Main cached function - returns data immediately, refreshes in background if stale -Function GetPrinterDataCached(hostIP) - Dim cacheKey, cacheAge, forceRefresh - cacheKey = "zabbix_" & hostIP - - ' Check if manual refresh was requested - forceRefresh = (Request.QueryString("refresh") = "1" And Request.QueryString("ip") = hostIP) - - If forceRefresh Then - ' Clear cache for manual refresh - Application.Lock - Application(cacheKey) = Empty - Application(cacheKey & "_time") = Empty - Application(cacheKey & "_refreshing") = "false" - Application.Unlock - End If - - ' Check if cache exists - If Not IsEmpty(Application(cacheKey)) And Not forceRefresh Then - cacheAge = DateDiff("n", Application(cacheKey & "_time"), Now()) - - ' If cache is stale (>5 min) AND not already refreshing, trigger background update - If cacheAge >= 5 And Application(cacheKey & "_refreshing") <> "true" Then - ' Mark as refreshing - Application.Lock - Application(cacheKey & "_refreshing") = "true" - Application.Unlock - - ' Trigger async background refresh (non-blocking) - On Error Resume Next - Dim http - Set http = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0") - ' True = async (doesn't block user) - http.Open "GET", "http://localhost/refresh_zabbix_cache.asp?ip=" & Server.URLEncode(hostIP), True - http.Send - Set http = Nothing - On Error Goto 0 - End If - - ' Return cached data immediately (user doesn't wait) - GetPrinterDataCached = Application(cacheKey) - Exit Function - End If - - ' No cache exists - fetch initial data (first time only, or after manual refresh) - Dim freshData, zabbixConnected, pingStatus, tonerJSON - - zabbixConnected = ZabbixLogin() - - If zabbixConnected = "1" Then - pingStatus = GetPrinterPingStatus(hostIP) - tonerJSON = GetPrinterTonerLevels(hostIP) - Else - pingStatus = "-1" - tonerJSON = "" - End If - - ' Store as array: [connected, pingStatus, tonerJSON] - Dim resultData(2) - resultData(0) = zabbixConnected - resultData(1) = pingStatus - resultData(2) = tonerJSON - - ' Cache the result - Application.Lock - Application(cacheKey) = resultData - Application(cacheKey & "_time") = Now() - Application(cacheKey & "_refreshing") = "false" - Application.Unlock - - GetPrinterDataCached = resultData -End Function - -' Helper function to get cache age (for display purposes) -Function GetCacheAge(hostIP) - Dim cacheKey, cacheTime - cacheKey = "zabbix_" & hostIP - - If IsEmpty(Application(cacheKey & "_time")) Then - GetCacheAge = -1 - Exit Function - End If - - GetCacheAge = DateDiff("s", Application(cacheKey & "_time"), Now()) -End Function - -' Clear cache for a specific printer (called by manual refresh) -Sub ClearPrinterCache(hostIP) - Dim cacheKey - cacheKey = "zabbix_" & hostIP - - Application.Lock - Application(cacheKey) = Empty - Application(cacheKey & "_time") = Empty - Application(cacheKey & "_refreshing") = "false" - Application.Unlock -End Sub - -' Clear all Zabbix cache (admin function) -Sub ClearAllZabbixCache() - Dim key, keysToRemove(), count, i - count = 0 - - ' First pass: collect keys to remove - ReDim keysToRemove(100) ' Initial size - For Each key In Application.Contents - If Left(key, 7) = "zabbix_" Then - keysToRemove(count) = key - count = count + 1 - If count Mod 100 = 0 Then - ReDim Preserve keysToRemove(count + 100) - End If - End If - Next - - ' Second pass: remove collected keys - Application.Lock - For i = 0 To count - 1 - Application.Contents.Remove(keysToRemove(i)) - Next - Application.Unlock -End Sub -%> diff --git a/listpcs.asp b/listpcs.asp deleted file mode 100644 index 8901cc6..0000000 --- a/listpcs.asp +++ /dev/null @@ -1,297 +0,0 @@ -<%' Cache buster: 20251110-1430 %> - - - - - - - -<% - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF -%> - - - -
- - -
- - - - -
-
-
-
-
-
-
-
-
PCs
- -
-<% -Dim currentPCType, currentPCStatus, recentFilter, deviceTypeFilter, sel -currentPCType = Request.QueryString("pctype") -currentPCStatus = Request.QueryString("pcstatus") -recentFilter = Request.QueryString("recent") -deviceTypeFilter = Request.QueryString("devicetype") -%> -
- - - - - <% If currentPCType <> "" Or currentPCStatus <> "" Or recentFilter <> "" Or deviceTypeFilter <> "" Then %> - - Clear - - <% End If %> - -
-
-
- - - - - - - - - - - - - -<% - ' Build query based on filters - Dim pcTypeFilter, pcStatusFilter, recentDaysFilter, deviceTypeFilterSQL, whereClause - pcTypeFilter = Request.QueryString("pctype") - pcStatusFilter = Request.QueryString("pcstatus") - recentDaysFilter = Request.QueryString("recent") - deviceTypeFilterSQL = Request.QueryString("devicetype") - - ' Base query with LEFT JOINs to show all PCs - strSQL = "SELECT m.machineid, m.hostname, m.alias, m.serialnumber, m.machinenumber, m.pctypeid, m.machinestatusid, " & _ - "m.modelnumberid, m.businessunitid, m.osid, m.loggedinuser, m.lastupdated, " & _ - "vendors.vendor, models.modelnumber, operatingsystems.operatingsystem, " & _ - "c.address AS ipaddress, c.macaddress, " & _ - "models.machinetypeid, pctype.typename, machinestatus.machinestatus " & _ - "FROM machines m " & _ - "LEFT JOIN models ON m.modelnumberid = models.modelnumberid " & _ - "LEFT JOIN vendors ON models.vendorid = vendors.vendorid " & _ - "LEFT JOIN operatingsystems ON m.osid = operatingsystems.osid " & _ - "LEFT JOIN communications c ON c.machineid = m.machineid AND c.isprimary = 1 " & _ - "LEFT JOIN pctype ON m.pctypeid = pctype.pctypeid " & _ - "LEFT JOIN machinestatus ON m.machinestatusid = machinestatus.machinestatusid " & _ - "WHERE m.isactive = 1 AND m.pctypeid IS NOT NULL" - - ' Apply filters - whereClause = "" - If pcTypeFilter <> "" Then - whereClause = whereClause & "AND m.pctypeid = " & pcTypeFilter & " " - End If - - If pcStatusFilter <> "" Then - whereClause = whereClause & "AND m.machinestatusid = " & pcStatusFilter & " " - End If - - If recentDaysFilter <> "" And IsNumeric(recentDaysFilter) Then - whereClause = whereClause & "AND m.lastupdated >= DATE_SUB(NOW(), INTERVAL " & recentDaysFilter & " DAY) " - End If - - ' Filter by device type (laptop vs desktop) based on model name patterns - If deviceTypeFilterSQL = "laptop" Then - whereClause = whereClause & "AND (models.modelnumber LIKE '%Latitude%' OR models.modelnumber LIKE '%Precision%' AND (models.modelnumber NOT LIKE '%Tower%')) " - ElseIf deviceTypeFilterSQL = "desktop" Then - whereClause = whereClause & "AND (models.modelnumber LIKE '%OptiPlex%' OR models.modelnumber LIKE '%Tower%' OR models.modelnumber LIKE '%Micro%') " - End If - - strSQL = strSQL & whereClause & " GROUP BY m.machineid ORDER BY m.machinenumber ASC, m.hostname ASC" - - set rs = objconn.Execute(strSQL) - while not rs.eof - -%> - - - - - - - - -<% - rs.movenext - wend - objConn.Close -%> - -
HostnameSerialIPModelOSMachine
" title="Click to Show PC Details"><% - Dim displayName - If IsNull(rs("hostname")) Or rs("hostname") = "" Then - displayName = rs("serialnumber") - Else - displayName = rs("hostname") - End If - Response.Write(displayName) - %><%Response.Write(rs("serialnumber"))%><%Response.Write(rs("ipaddress"))%><%Response.Write(rs("modelnumber"))%><%Response.Write(rs("operatingsystem"))%>" title="Click to Show Machine Details"><%Response.Write(rs("machinenumber"))%>
-
-
-
-
-
- - - -
- - - - - -
-
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - diff --git a/network_map.asp.backup-20251113-064542 b/network_map.asp.backup-20251113-064542 deleted file mode 100644 index 4337926..0000000 --- a/network_map.asp.backup-20251113-064542 +++ /dev/null @@ -1,443 +0,0 @@ - - - - - - - - - -<% - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF -%> - - - -
- - -
- - - - -
-
-
-
-
-
-
-
-   Network Infrastructure Map -
-
- - - -
-
-
-
-
-
- -
-
-
- Legend -
-
-

- Equipment type color codes: -

- -
-
- - Printer -
-
- - Access Point -
-
- - IDF -
-
- - Camera -
-
- - Switch -
-
- - Server -
-
- -
- Tips: -
    -
  • Hover over markers for details
  • -
  • Use search to find specific equipment
  • -
  • Filter by type to focus on specific equipment
  • -
  • Click "View Details" for full information
  • -
-
-
-
-
-
- -
- - - - - -
-
- - - - - - - - - - - - - - - - - - - diff --git a/pc_edit.asp.broken b/pc_edit.asp.broken deleted file mode 100644 index 9803269..0000000 --- a/pc_edit.asp.broken +++ /dev/null @@ -1,1136 +0,0 @@ - - - - - - - - - -<% - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF - - ' Get and validate pcid parameter - Dim machineid, machineData, strSQL - machineid = Request.QueryString("pcid") - - ' Security validation - ensure pcid is numeric - If NOT IsNumeric(machineid) OR machineid = "" Then - Response.Redirect("./displaypcs.asp") - Response.End - End If - - ' Load PC data (pctypeid IS NOT NULL identifies PCs) - strSQL = "SELECT m.*, " &_ - "mo.modelnumber, mo.vendorid AS modelvendorid, mo.machinetypeid, mo.image AS modelimage, " &_ - "v.vendor, " &_ - "bu.businessunit, " &_ - "mt.machinetype " &_ - "FROM machines m " &_ - "LEFT JOIN models mo ON m.modelnumberid = mo.modelnumberid " &_ - "LEFT JOIN vendors v ON mo.vendorid = v.vendorid " &_ - "LEFT JOIN businessunits bu ON m.businessunitid = bu.businessunitid " &_ - "LEFT JOIN machinetypes mt ON mo.machinetypeid = mt.machinetypeid " &_ - "WHERE m.machineid = ? AND m.pctypeid IS NOT NULL" - - Dim cmd, rsMachine - Set cmd = Server.CreateObject("ADODB.Command") - cmd.ActiveConnection = objConn - cmd.CommandText = strSQL - cmd.CommandType = 1 - cmd.Parameters.Append cmd.CreateParameter("@machineid", 3, 1, , machineid) - Set rsMachine = cmd.Execute - - If rsMachine.EOF Then - rsMachine.Close - Set rsMachine = Nothing - Set cmd = Nothing - objConn.Close - Response.Redirect("./displaypcs.asp") - Response.End - End If - - ' Store machine data - Dim machinenumber, modelid, businessunitid, alias, machinenotes, mapleft, maptop - machinenumber = "" : If NOT IsNull(rsMachine("machinenumber")) Then machinenumber = rsMachine("machinenumber") & "" - modelid = "" : If NOT IsNull(rsMachine("modelnumberid")) Then modelid = rsMachine("modelnumberid") - businessunitid = "" : If NOT IsNull(rsMachine("businessunitid")) Then businessunitid = rsMachine("businessunitid") - alias = "" : If NOT IsNull(rsMachine("alias")) Then alias = rsMachine("alias") & "" - machinenotes = "" : If NOT IsNull(rsMachine("machinenotes")) Then machinenotes = rsMachine("machinenotes") & "" - mapleft = "" : If NOT IsNull(rsMachine("mapleft")) Then mapleft = rsMachine("mapleft") - maptop = "" : If NOT IsNull(rsMachine("maptop")) Then maptop = rsMachine("maptop") - - rsMachine.Close - Set rsMachine = Nothing - Set cmd = Nothing - - ' Load network interfaces from communications table - Dim ip1, mac1, ip2, mac2, ip3, mac3 - ip1 = "" : mac1 = "" : ip2 = "" : mac2 = "" : ip3 = "" : mac3 = "" - - strSQL = "SELECT address, macaddress FROM communications WHERE machineid = ? AND isactive = 1 ORDER BY isprimary DESC" - Set cmd = Server.CreateObject("ADODB.Command") - cmd.ActiveConnection = objConn - cmd.CommandText = strSQL - cmd.CommandType = 1 - cmd.Parameters.Append cmd.CreateParameter("@machineid", 3, 1, , machineid) - Dim rsComms - Set rsComms = cmd.Execute - - Dim interfaceCount - interfaceCount = 0 - While NOT rsComms.EOF AND interfaceCount < 3 - interfaceCount = interfaceCount + 1 - If interfaceCount = 1 Then - If NOT IsNull(rsComms("address")) Then ip1 = rsComms("address") - If NOT IsNull(rsComms("macaddress")) Then mac1 = rsComms("macaddress") - ElseIf interfaceCount = 2 Then - If NOT IsNull(rsComms("address")) Then ip2 = rsComms("address") - If NOT IsNull(rsComms("macaddress")) Then mac2 = rsComms("macaddress") - ElseIf interfaceCount = 3 Then - If NOT IsNull(rsComms("address")) Then ip3 = rsComms("address") - If NOT IsNull(rsComms("macaddress")) Then mac3 = rsComms("macaddress") - End If - rsComms.MoveNext - Wend - rsComms.Close - Set rsComms = Nothing - Set cmd = Nothing - - ' Load controlling PC from machinerelationships - ' Note: Controls relationship is PC → Equipment, so we need machineid (PC) where related_machineid is this equipment - Dim controllingpcid - controllingpcid = "" - strSQL = "SELECT mr.machineid AS controlpcid FROM machinerelationships mr " &_ - "JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid " &_ - "WHERE mr.related_machineid = ? AND rt.relationshiptype = 'Controls' AND mr.isactive = 1" - Set cmd = Server.CreateObject("ADODB.Command") - cmd.ActiveConnection = objConn - cmd.CommandText = strSQL - cmd.CommandType = 1 - cmd.Parameters.Append cmd.CreateParameter("@machineid", 3, 1, , machineid) - Dim rsControlPC - Set rsControlPC = cmd.Execute - If NOT rsControlPC.EOF Then - If NOT IsNull(rsControlPC("controlpcid")) Then controllingpcid = rsControlPC("controlpcid") - End If - rsControlPC.Close - Set rsControlPC = Nothing - Set cmd = Nothing - - ' Load dualpath from machinerelationships - Dim dualpathid - dualpathid = "" - strSQL = "SELECT related_machineid FROM machinerelationships mr " &_ - "JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid " &_ - "WHERE mr.machineid = ? AND rt.relationshiptype = 'Dualpath' AND mr.isactive = 1" - Set cmd = Server.CreateObject("ADODB.Command") - cmd.ActiveConnection = objConn - cmd.CommandText = strSQL - cmd.CommandType = 1 - cmd.Parameters.Append cmd.CreateParameter("@machineid", 3, 1, , machineid) - Dim rsDualpath - Set rsDualpath = cmd.Execute - If NOT rsDualpath.EOF Then - If NOT IsNull(rsDualpath("related_machineid")) Then dualpathid = rsDualpath("related_machineid") - End If - rsDualpath.Close - Set rsDualpath = Nothing - Set cmd = Nothing - - ' Load compliance data - Dim thirdpartymanaged, thirdpartymanager, otassetsystem, dodassettype - thirdpartymanaged = "NA" : thirdpartymanager = "" : otassetsystem = "" : dodassettype = "" - - strSQL = "SELECT * FROM compliance WHERE machineid = ?" - Set cmd = Server.CreateObject("ADODB.Command") - cmd.ActiveConnection = objConn - cmd.CommandText = strSQL - cmd.CommandType = 1 - cmd.Parameters.Append cmd.CreateParameter("@machineid", 3, 1, , machineid) - Dim rsCompliance - Set rsCompliance = cmd.Execute - If NOT rsCompliance.EOF Then - If NOT IsNull(rsCompliance("is_third_party_managed")) Then thirdpartymanaged = rsCompliance("is_third_party_managed") - If NOT IsNull(rsCompliance("third_party_manager")) Then thirdpartymanager = rsCompliance("third_party_manager") - If NOT IsNull(rsCompliance("ot_asset_system")) Then otassetsystem = rsCompliance("ot_asset_system") - If NOT IsNull(rsCompliance("ot_asset_device_type")) Then dodassettype = rsCompliance("ot_asset_device_type") - End If - rsCompliance.Close - Set rsCompliance = Nothing - Set cmd = Nothing -%> - - - -
- - -
- - - - -
- -
-
- -
-
-
-
-
-
- Edit Equipment -
- - Back to Machines - -
- -
- - - - - - -
- - - - -
- -
- - - Machine number cannot be changed -
- -
- -
- -
- -
-
-
- - - - -
- -
- -
- -
-
-
- - - - -
- - -
- -
- - -
- -
- - - - -
-
Network Communications
-

Configure network interfaces for this equipment. You can add up to 3 interfaces.

- - -
-
- Interface 1 (Primary) -
-
-
-
-
- - - Example: 192.168.1.100 -
-
-
-
- - - Example: 00:1A:2B:3C:4D:5E -
-
-
-
-
- - -
-
- Interface 2 (Optional) -
-
-
-
-
- - -
-
-
-
- - -
-
-
-
-
- - -
-
- Interface 3 (Optional) -
-
-
-
-
- - -
-
-
-
- - -
-
-
-
-
- -
- - - - -
-
Machine Relationships
-

Define relationships between this equipment and other machines or PCs.

- -
- - - Select a PC that controls this equipment -
- -
- - - Select a backup/redundant machine (creates bidirectional relationship) -
- -
- - - - -
-
Compliance & Security
-

Track compliance and security information for this equipment.

- -
- - - Is this equipment managed by a third party? -
- -
- -
- -
- -
-
- Select the vendor managing this equipment -
- - - - -
- - - Operational Technology asset classification -
- -
- - - Department of Defense asset classification -
- -
- - - - -
-
Location
-

Set the physical location of this equipment on the shop floor map.

- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- - -
-
- - - Cancel - -
- -
- -
-
-
-
- - -
- -
- - - - - - -
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - -
-
-
-
Select Location on Map
- -
-
-
-
-
-
No location selected
-
- - -
-
-
-
- - - - - -<% - objConn.Close -%> diff --git a/pclist.asp b/pclist.asp deleted file mode 100644 index 8d3de8f..0000000 --- a/pclist.asp +++ /dev/null @@ -1,297 +0,0 @@ -<%' Cache buster: 20251110-1432 %> - - - - - - - -<% - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF -%> - - - -
- - -
- - - - -
-
-
-
-
-
-
-
-
PCs
- -
-<% -Dim currentPCType, currentPCStatus, recentFilter, deviceTypeFilter, sel -currentPCType = Request.QueryString("pctype") -currentPCStatus = Request.QueryString("pcstatus") -recentFilter = Request.QueryString("recent") -deviceTypeFilter = Request.QueryString("devicetype") -%> -
- - - - - <% If currentPCType <> "" Or currentPCStatus <> "" Or recentFilter <> "" Or deviceTypeFilter <> "" Then %> - - Clear - - <% End If %> - -
-
-
- - - - - - - - - - - - - -<% - ' Build query based on filters - Dim pcTypeFilter, pcStatusFilter, recentDaysFilter, deviceTypeFilterSQL, whereClause - pcTypeFilter = Request.QueryString("pctype") - pcStatusFilter = Request.QueryString("pcstatus") - recentDaysFilter = Request.QueryString("recent") - deviceTypeFilterSQL = Request.QueryString("devicetype") - - ' Base query with LEFT JOINs to show all PCs - strSQL = "SELECT m.machineid, m.hostname, m.alias, m.serialnumber, m.machinenumber, m.pctypeid, m.machinestatusid, " & _ - "m.modelnumberid, m.businessunitid, m.osid, m.loggedinuser, m.lastupdated, " & _ - "vendors.vendor, models.modelnumber, operatingsystems.operatingsystem, " & _ - "c.address AS ipaddress, c.macaddress, " & _ - "models.machinetypeid, pctype.typename, machinestatus.machinestatus " & _ - "FROM machines m " & _ - "LEFT JOIN models ON m.modelnumberid = models.modelnumberid " & _ - "LEFT JOIN vendors ON models.vendorid = vendors.vendorid " & _ - "LEFT JOIN operatingsystems ON m.osid = operatingsystems.osid " & _ - "LEFT JOIN communications c ON c.machineid = m.machineid AND c.isprimary = 1 " & _ - "LEFT JOIN pctype ON m.pctypeid = pctype.pctypeid " & _ - "LEFT JOIN machinestatus ON m.machinestatusid = machinestatus.machinestatusid " & _ - "WHERE m.isactive = 1 AND m.pctypeid IS NOT NULL" - - ' Apply filters - whereClause = "" - If pcTypeFilter <> "" Then - whereClause = whereClause & "AND m.pctypeid = " & pcTypeFilter & " " - End If - - If pcStatusFilter <> "" Then - whereClause = whereClause & "AND m.machinestatusid = " & pcStatusFilter & " " - End If - - If recentDaysFilter <> "" And IsNumeric(recentDaysFilter) Then - whereClause = whereClause & "AND m.lastupdated >= DATE_SUB(NOW(), INTERVAL " & recentDaysFilter & " DAY) " - End If - - ' Filter by device type (laptop vs desktop) based on model name patterns - If deviceTypeFilterSQL = "laptop" Then - whereClause = whereClause & "AND (models.modelnumber LIKE '%Latitude%' OR models.modelnumber LIKE '%Precision%' AND (models.modelnumber NOT LIKE '%Tower%')) " - ElseIf deviceTypeFilterSQL = "desktop" Then - whereClause = whereClause & "AND (models.modelnumber LIKE '%OptiPlex%' OR models.modelnumber LIKE '%Tower%' OR models.modelnumber LIKE '%Micro%') " - End If - - strSQL = strSQL & whereClause & " GROUP BY m.machineid ORDER BY m.machinenumber ASC, m.hostname ASC" - - set rs = objconn.Execute(strSQL) - while not rs.eof - -%> - - - - - - - - -<% - rs.movenext - wend - objConn.Close -%> - -
HostnameSerialIPModelOSMachine
" title="Click to Show PC Details"><% - Dim displayName - If IsNull(rs("hostname")) Or rs("hostname") = "" Then - displayName = rs("serialnumber") - Else - displayName = rs("hostname") - End If - Response.Write(displayName) - %><%Response.Write(rs("serialnumber"))%><%Response.Write(rs("ipaddress"))%><%Response.Write(rs("modelnumber"))%><%Response.Write(rs("operatingsystem"))%>" title="Click to Show Machine Details"><%Response.Write(rs("machinenumber"))%>
-
-
-
-
-
- - - -
- - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pcs.asp b/pcs.asp deleted file mode 100644 index 8901cc6..0000000 --- a/pcs.asp +++ /dev/null @@ -1,297 +0,0 @@ -<%' Cache buster: 20251110-1430 %> - - - - - - - -<% - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF -%> - - - -
- - -
- - - - -
-
-
-
-
-
-
-
-
PCs
- -
-<% -Dim currentPCType, currentPCStatus, recentFilter, deviceTypeFilter, sel -currentPCType = Request.QueryString("pctype") -currentPCStatus = Request.QueryString("pcstatus") -recentFilter = Request.QueryString("recent") -deviceTypeFilter = Request.QueryString("devicetype") -%> -
- - - - - <% If currentPCType <> "" Or currentPCStatus <> "" Or recentFilter <> "" Or deviceTypeFilter <> "" Then %> - - Clear - - <% End If %> - -
-
-
- - - - - - - - - - - - - -<% - ' Build query based on filters - Dim pcTypeFilter, pcStatusFilter, recentDaysFilter, deviceTypeFilterSQL, whereClause - pcTypeFilter = Request.QueryString("pctype") - pcStatusFilter = Request.QueryString("pcstatus") - recentDaysFilter = Request.QueryString("recent") - deviceTypeFilterSQL = Request.QueryString("devicetype") - - ' Base query with LEFT JOINs to show all PCs - strSQL = "SELECT m.machineid, m.hostname, m.alias, m.serialnumber, m.machinenumber, m.pctypeid, m.machinestatusid, " & _ - "m.modelnumberid, m.businessunitid, m.osid, m.loggedinuser, m.lastupdated, " & _ - "vendors.vendor, models.modelnumber, operatingsystems.operatingsystem, " & _ - "c.address AS ipaddress, c.macaddress, " & _ - "models.machinetypeid, pctype.typename, machinestatus.machinestatus " & _ - "FROM machines m " & _ - "LEFT JOIN models ON m.modelnumberid = models.modelnumberid " & _ - "LEFT JOIN vendors ON models.vendorid = vendors.vendorid " & _ - "LEFT JOIN operatingsystems ON m.osid = operatingsystems.osid " & _ - "LEFT JOIN communications c ON c.machineid = m.machineid AND c.isprimary = 1 " & _ - "LEFT JOIN pctype ON m.pctypeid = pctype.pctypeid " & _ - "LEFT JOIN machinestatus ON m.machinestatusid = machinestatus.machinestatusid " & _ - "WHERE m.isactive = 1 AND m.pctypeid IS NOT NULL" - - ' Apply filters - whereClause = "" - If pcTypeFilter <> "" Then - whereClause = whereClause & "AND m.pctypeid = " & pcTypeFilter & " " - End If - - If pcStatusFilter <> "" Then - whereClause = whereClause & "AND m.machinestatusid = " & pcStatusFilter & " " - End If - - If recentDaysFilter <> "" And IsNumeric(recentDaysFilter) Then - whereClause = whereClause & "AND m.lastupdated >= DATE_SUB(NOW(), INTERVAL " & recentDaysFilter & " DAY) " - End If - - ' Filter by device type (laptop vs desktop) based on model name patterns - If deviceTypeFilterSQL = "laptop" Then - whereClause = whereClause & "AND (models.modelnumber LIKE '%Latitude%' OR models.modelnumber LIKE '%Precision%' AND (models.modelnumber NOT LIKE '%Tower%')) " - ElseIf deviceTypeFilterSQL = "desktop" Then - whereClause = whereClause & "AND (models.modelnumber LIKE '%OptiPlex%' OR models.modelnumber LIKE '%Tower%' OR models.modelnumber LIKE '%Micro%') " - End If - - strSQL = strSQL & whereClause & " GROUP BY m.machineid ORDER BY m.machinenumber ASC, m.hostname ASC" - - set rs = objconn.Execute(strSQL) - while not rs.eof - -%> - - - - - - - - -<% - rs.movenext - wend - objConn.Close -%> - -
HostnameSerialIPModelOSMachine
" title="Click to Show PC Details"><% - Dim displayName - If IsNull(rs("hostname")) Or rs("hostname") = "" Then - displayName = rs("serialnumber") - Else - displayName = rs("hostname") - End If - Response.Write(displayName) - %><%Response.Write(rs("serialnumber"))%><%Response.Write(rs("ipaddress"))%><%Response.Write(rs("modelnumber"))%><%Response.Write(rs("operatingsystem"))%>" title="Click to Show Machine Details"><%Response.Write(rs("machinenumber"))%>
-
-
-
-
-
- - - -
- - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/printerlookup.asp b/printerlookup.asp deleted file mode 100644 index cdab2cf..0000000 --- a/printerlookup.asp +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - -<% -' Lookup printer by IP address and redirect to displayprinter.asp -Dim ipaddress, strSQL, rs - -ipaddress = Request.QueryString("ip") - -If ipaddress <> "" Then - strSQL = "SELECT printerid FROM printers WHERE ipaddress = '" & Replace(ipaddress, "'", "''") & "' AND isactive = 1" - Set rs = objConn.Execute(strSQL) - - If Not rs.EOF Then - Response.Redirect("displayprinter.asp?printerid=" & rs("printerid")) - Else - Response.Write("Printer not found with IP: " & Server.HTMLEncode(ipaddress)) - End If - - rs.Close - Set rs = Nothing -Else - Response.Write("No IP address provided") -End If - -objConn.Close -%> - - diff --git a/save_network_device.asp.backup-20251027 b/save_network_device.asp.backup-20251027 deleted file mode 100644 index 226af30..0000000 --- a/save_network_device.asp.backup-20251027 +++ /dev/null @@ -1,448 +0,0 @@ - - - - - -<% -' Universal save endpoint for all network devices (IDF, Server, Switch, Camera) -' Routes to appropriate table based on device type - -' Get device type and ID -Dim deviceType, deviceId, isDelete -deviceType = Trim(Request.Form("type")) -deviceId = Trim(Request.Form("id")) -isDelete = Trim(Request.Form("delete")) - -' Validate device type -If deviceType <> "idf" And deviceType <> "server" And deviceType <> "switch" And deviceType <> "camera" And deviceType <> "accesspoint" Then - Response.Write("
Error: Invalid device type
") - Response.Write("Back to Network Devices") - objConn.Close - Response.End -End If - -' Validate device ID -If deviceId = "" Then deviceId = "0" -If Not IsNumeric(deviceId) Then - Response.Write("
Error: Invalid device ID
") - Response.Write("Back to Network Devices") - objConn.Close - Response.End -End If - -' Map type to table and fields -Dim tableName, idField, nameField, redirectUrl -Select Case deviceType - Case "idf" - tableName = "idfs" - idField = "idfid" - nameField = "idfname" - redirectUrl = "network_devices.asp?filter=IDF" - Case "server" - tableName = "servers" - idField = "serverid" - nameField = "servername" - redirectUrl = "network_devices.asp?filter=Server" - Case "switch" - tableName = "switches" - idField = "switchid" - nameField = "switchname" - redirectUrl = "network_devices.asp?filter=Switch" - Case "camera" - tableName = "cameras" - idField = "cameraid" - nameField = "cameraname" - redirectUrl = "network_devices.asp?filter=Camera" - Case "accesspoint" - tableName = "accesspoints" - idField = "apid" - nameField = "apname" - redirectUrl = "network_devices.asp?filter=Access Point" -End Select - -' Handle DELETE request -If isDelete = "1" Then - ' Soft delete - set isactive = 0 - Dim strDelete - strDelete = "UPDATE " & tableName & " SET isactive = 0 WHERE " & idField & " = " & deviceId - objConn.Execute(strDelete) - objConn.Close - Response.Redirect(redirectUrl) - Response.End -End If - -' Get form data -Dim deviceName, description, maptop, mapleft, isactiveForm -deviceName = Trim(Request.Form(nameField)) -description = Trim(Request.Form("description")) -maptop = Trim(Request.Form("maptop")) -mapleft = Trim(Request.Form("mapleft")) -isactiveForm = Trim(Request.Form("isactive")) - -' Handle isactive - checkbox: checked=1, unchecked=empty string -' Default to 0 (inactive) if not provided (unchecked) -If isactiveForm = "1" Then - isactiveForm = "1" -Else - isactiveForm = "0" -End If - -' Validate name field (required for all) -If deviceName = "" Then - Response.Write("
Error: " & UCase(Left(nameField, 1)) & Mid(nameField, 2) & " is required
") - Response.Write("Go back") - objConn.Close - Response.End -End If - -' Validate field lengths -If Len(deviceName) > 100 Or Len(description) > 255 Then - Response.Write("
Error: Field length exceeded
") - Response.Write("Go back") - objConn.Close - Response.End -End If - -' Handle NULL values for optional numeric fields -If maptop = "" Or Not IsNumeric(maptop) Then maptop = "NULL" Else maptop = CLng(maptop) -If mapleft = "" Or Not IsNumeric(mapleft) Then mapleft = "NULL" Else mapleft = CLng(mapleft) - -' Escape single quotes for SQL -deviceName = Replace(deviceName, "'", "''") -description = Replace(description, "'", "''") - -' Build SQL based on device type -Dim strSQL - -If deviceType = "idf" Then - ' IDF - no model/vendor - If deviceId = "0" Then - ' INSERT - strSQL = "INSERT INTO idfs (idfname, description, maptop, mapleft, isactive) " & _ - "VALUES ('" & deviceName & "', '" & description & "', " & maptop & ", " & mapleft & ", " & isactiveForm & ")" - Else - ' UPDATE - strSQL = "UPDATE idfs SET " & _ - "idfname = '" & deviceName & "', " & _ - "description = '" & description & "', " & _ - "maptop = " & maptop & ", " & _ - "mapleft = " & mapleft & ", " & _ - "isactive = " & isactiveForm & " " & _ - "WHERE idfid = " & deviceId - End If - -ElseIf deviceType = "server" Or deviceType = "switch" Or deviceType = "accesspoint" Then - ' Server/Switch/Access Point - has modelid but NO idfid - Dim modelid, serialnumber, ipaddress - modelid = Trim(Request.Form("modelid")) - serialnumber = Trim(Request.Form("serialnumber")) - ipaddress = Trim(Request.Form("ipaddress")) - - ' Handle new model creation - If modelid = "new" Then - Dim newmodelnumber, newvendorid, newmodelnotes, newmodeldocpath, newvendorname - newmodelnumber = Trim(Request.Form("newmodelnumber")) - newvendorid = Trim(Request.Form("newvendorid")) - newmodelnotes = Trim(Request.Form("newmodelnotes")) - newmodeldocpath = Trim(Request.Form("newmodeldocpath")) - newvendorname = Trim(Request.Form("newvendorname")) - - ' Validate required fields for new model - If newmodelnumber = "" Then - Response.Write("
Error: Model number is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If newvendorid = "" Then - Response.Write("
Error: Vendor is required for new model
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new vendor creation (nested) - If newvendorid = "new" Then - If newvendorname = "" Then - Response.Write("
Error: Vendor name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape and insert new vendor - Dim escapedVendorName, sqlNewVendor - escapedVendorName = Replace(newvendorname, "'", "''") - sqlNewVendor = "INSERT INTO vendors (vendor, isactive) VALUES ('" & escapedVendorName & "', 1)" - - On Error Resume Next - objConn.Execute sqlNewVendor - If Err.Number <> 0 Then - Response.Write("
Error creating vendor: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get newly created vendor ID - Dim rsNewVendor - Set rsNewVendor = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newvendorid = rsNewVendor("newid") - rsNewVendor.Close - Set rsNewVendor = Nothing - On Error Goto 0 - End If - - ' Escape and insert new model - Dim escapedModelNumber, escapedModelNotes, escapedModelDocPath, sqlNewModel - escapedModelNumber = Replace(newmodelnumber, "'", "''") - escapedModelNotes = Replace(newmodelnotes, "'", "''") - escapedModelDocPath = Replace(newmodeldocpath, "'", "''") - sqlNewModel = "INSERT INTO models (modelnumber, vendorid, notes, documentationpath, isactive) " & _ - "VALUES ('" & escapedModelNumber & "', " & newvendorid & ", '" & escapedModelNotes & "', '" & escapedModelDocPath & "', 1)" - - On Error Resume Next - objConn.Execute sqlNewModel - If Err.Number <> 0 Then - Response.Write("
Error creating model: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get newly created model ID - Dim rsNewModel - Set rsNewModel = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - modelid = rsNewModel("newid") - rsNewModel.Close - Set rsNewModel = Nothing - On Error Goto 0 - ' Handle NULL/empty modelid - ElseIf modelid = "" Or Not IsNumeric(modelid) Then - modelid = "NULL" - Else - modelid = CLng(modelid) - End If - - ' Escape strings - serialnumber = Replace(serialnumber, "'", "''") - ipaddress = Replace(ipaddress, "'", "''") - - ' Validate lengths - If Len(serialnumber) > 100 Or Len(ipaddress) > 45 Then - Response.Write("
Error: Field length exceeded
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If deviceId = "0" Then - ' INSERT - strSQL = "INSERT INTO " & tableName & " (" & nameField & ", modelid, serialnumber, ipaddress, description, maptop, mapleft, isactive) " & _ - "VALUES ('" & deviceName & "', " & modelid & ", '" & serialnumber & "', '" & ipaddress & "', '" & description & "', " & maptop & ", " & mapleft & ", " & isactiveForm & ")" - Else - ' UPDATE - strSQL = "UPDATE " & tableName & " SET " & _ - nameField & " = '" & deviceName & "', " & _ - "modelid = " & modelid & ", " & _ - "serialnumber = '" & serialnumber & "', " & _ - "ipaddress = '" & ipaddress & "', " & _ - "description = '" & description & "', " & _ - "maptop = " & maptop & ", " & _ - "mapleft = " & mapleft & ", " & _ - "isactive = " & isactiveForm & " " & _ - "WHERE " & idField & " = " & deviceId - End If - -ElseIf deviceType = "camera" Then - ' Camera - has modelid, idfid, AND macaddress - Dim cameraModelid, cameraIdfid, cameraSerial, cameraMac, cameraIP - cameraModelid = Trim(Request.Form("modelid")) - cameraIdfid = Trim(Request.Form("idfid")) - cameraSerial = Trim(Request.Form("serialnumber")) - cameraMac = Trim(Request.Form("macaddress")) - cameraIP = Trim(Request.Form("ipaddress")) - - ' Handle new IDF creation for camera - If cameraIdfid = "new" Then - Dim cameraNewidfname, cameraNewidfdescription - cameraNewidfname = Trim(Request.Form("newidfname")) - cameraNewidfdescription = Trim(Request.Form("newidfdescription")) - - ' Validate required fields for new IDF - If cameraNewidfname = "" Then - Response.Write("
Error: IDF name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape and insert new IDF - Dim cameraEscapedIdfName, cameraEscapedIdfDesc, cameraSqlNewIdf - cameraEscapedIdfName = Replace(cameraNewidfname, "'", "''") - cameraEscapedIdfDesc = Replace(cameraNewidfdescription, "'", "''") - cameraSqlNewIdf = "INSERT INTO idfs (idfname, description, isactive) VALUES ('" & cameraEscapedIdfName & "', '" & cameraEscapedIdfDesc & "', 1)" - - On Error Resume Next - objConn.Execute cameraSqlNewIdf - If Err.Number <> 0 Then - Response.Write("
Error creating IDF: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get newly created IDF ID - Dim rsNewIdfCamera - Set rsNewIdfCamera = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - cameraIdfid = CLng(rsNewIdfCamera("newid")) - rsNewIdfCamera.Close - Set rsNewIdfCamera = Nothing - On Error Goto 0 - End If - - ' Validate required idfid for cameras - If cameraIdfid = "" Or Not IsNumeric(cameraIdfid) Or CLng(cameraIdfid) < 1 Then - Response.Write("
Error: IDF location is required for cameras
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new model creation for camera - If cameraModelid = "new" Then - Dim cameraNewmodelnumber, cameraNewvendorid, cameraNewmodelnotes, cameraNewmodeldocpath, cameraNewvendorname - cameraNewmodelnumber = Trim(Request.Form("newmodelnumber")) - cameraNewvendorid = Trim(Request.Form("newvendorid")) - cameraNewmodelnotes = Trim(Request.Form("newmodelnotes")) - cameraNewmodeldocpath = Trim(Request.Form("newmodeldocpath")) - cameraNewvendorname = Trim(Request.Form("newvendorname")) - - ' Validate required fields for new model - If cameraNewmodelnumber = "" Then - Response.Write("
Error: Model number is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If cameraNewvendorid = "" Then - Response.Write("
Error: Vendor is required for new model
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new vendor creation (nested) - If cameraNewvendorid = "new" Then - If cameraNewvendorname = "" Then - Response.Write("
Error: Vendor name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape and insert new vendor - Dim cameraEscapedVendorName, cameraSqlNewVendor - cameraEscapedVendorName = Replace(cameraNewvendorname, "'", "''") - cameraSqlNewVendor = "INSERT INTO vendors (vendor, isactive) VALUES ('" & cameraEscapedVendorName & "', 1)" - - On Error Resume Next - objConn.Execute cameraSqlNewVendor - If Err.Number <> 0 Then - Response.Write("
Error creating vendor: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get newly created vendor ID - Dim rsNewVendorCamera - Set rsNewVendorCamera = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - cameraNewvendorid = rsNewVendorCamera("newid") - rsNewVendorCamera.Close - Set rsNewVendorCamera = Nothing - On Error Goto 0 - End If - - ' Escape and insert new model - Dim cameraEscapedModelNumber, cameraEscapedModelNotes, cameraEscapedModelDocPath, cameraSqlNewModel - cameraEscapedModelNumber = Replace(cameraNewmodelnumber, "'", "''") - cameraEscapedModelNotes = Replace(cameraNewmodelnotes, "'", "''") - cameraEscapedModelDocPath = Replace(cameraNewmodeldocpath, "'", "''") - cameraSqlNewModel = "INSERT INTO models (modelnumber, vendorid, notes, documentationpath, isactive) " & _ - "VALUES ('" & cameraEscapedModelNumber & "', " & cameraNewvendorid & ", '" & cameraEscapedModelNotes & "', '" & cameraEscapedModelDocPath & "', 1)" - - On Error Resume Next - objConn.Execute cameraSqlNewModel - If Err.Number <> 0 Then - Response.Write("
Error creating model: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get newly created model ID - Dim rsNewModelCamera - Set rsNewModelCamera = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - cameraModelid = rsNewModelCamera("newid") - rsNewModelCamera.Close - Set rsNewModelCamera = Nothing - On Error Goto 0 - ' Handle NULL modelid - ElseIf cameraModelid = "" Or Not IsNumeric(cameraModelid) Then - cameraModelid = "NULL" - Else - cameraModelid = CLng(cameraModelid) - End If - - ' Escape strings - cameraSerial = Replace(cameraSerial, "'", "''") - cameraMac = Replace(cameraMac, "'", "''") - cameraIP = Replace(cameraIP, "'", "''") - - ' Validate lengths - If Len(cameraSerial) > 100 Or Len(cameraMac) > 17 Or Len(cameraIP) > 45 Then - Response.Write("
Error: Field length exceeded
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If deviceId = "0" Then - ' INSERT - strSQL = "INSERT INTO cameras (cameraname, modelid, idfid, serialnumber, macaddress, ipaddress, description, maptop, mapleft, isactive) " & _ - "VALUES ('" & deviceName & "', " & cameraModelid & ", " & cameraIdfid & ", '" & cameraSerial & "', '" & cameraMac & "', '" & cameraIP & "', '" & description & "', " & maptop & ", " & mapleft & ", " & isactiveForm & ")" - Else - ' UPDATE - strSQL = "UPDATE cameras SET " & _ - "cameraname = '" & deviceName & "', " & _ - "modelid = " & cameraModelid & ", " & _ - "idfid = " & cameraIdfid & ", " & _ - "serialnumber = '" & cameraSerial & "', " & _ - "macaddress = '" & cameraMac & "', " & _ - "ipaddress = '" & cameraIP & "', " & _ - "description = '" & description & "', " & _ - "maptop = " & maptop & ", " & _ - "mapleft = " & mapleft & ", " & _ - "isactive = " & isactiveForm & " " & _ - "WHERE cameraid = " & deviceId - End If -End If - -' Execute SQL -On Error Resume Next -objConn.Execute(strSQL) -If Err.Number <> 0 Then - Response.Write("
Error saving device: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - objConn.Close - Response.End -End If -On Error Goto 0 - -' Success - redirect to list -objConn.Close -Response.Redirect(redirectUrl) -%> diff --git a/saveapplication_direct.asp.backup-20251027 b/saveapplication_direct.asp.backup-20251027 deleted file mode 100644 index 3c426e9..0000000 --- a/saveapplication_direct.asp.backup-20251027 +++ /dev/null @@ -1,248 +0,0 @@ - -<% -' Get all form data -Dim appname, appdescription, supportteamid -Dim applicationnotes, installpath, applicationlink, documentationpath, image -Dim isinstallable, isactive, ishidden, isprinter, islicenced -Dim newsupportteamname, newsupportteamurl, newappownerid - -appname = Trim(Request.Form("appname")) -appdescription = Trim(Request.Form("appdescription")) -supportteamid = Trim(Request.Form("supportteamid")) -applicationnotes = Trim(Request.Form("applicationnotes")) -installpath = Trim(Request.Form("installpath")) -applicationlink = Trim(Request.Form("applicationlink")) -documentationpath = Trim(Request.Form("documentationpath")) -image = Trim(Request.Form("image")) - -' New support team fields -newsupportteamname = Trim(Request.Form("newsupportteamname")) -newsupportteamurl = Trim(Request.Form("newsupportteamurl")) -newappownerid = Trim(Request.Form("newappownerid")) - -' Checkboxes -If Request.Form("isinstallable") = "1" Then isinstallable = 1 Else isinstallable = 0 -If Request.Form("isactive") = "1" Then isactive = 1 Else isactive = 0 -If Request.Form("ishidden") = "1" Then ishidden = 1 Else ishidden = 0 -If Request.Form("isprinter") = "1" Then isprinter = 1 Else isprinter = 0 -If Request.Form("islicenced") = "1" Then islicenced = 1 Else islicenced = 0 - -' Basic validation -If Len(appname) < 1 Or Len(appname) > 50 Then - Response.Write("Error: Application name must be 1-50 characters") - objConn.Close - Response.End -End If - -' Validate support team is selected -If supportteamid = "" Then - Response.Write("
Error: Please select a support team.
") - Response.Write("Go back") - objConn.Close - Response.End -End If - -' Check if we need to create a new support team first -If supportteamid = "new" Then - If newsupportteamname = "" Then - Response.Write("
Error: Support team name is required.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newsupportteamname) > 50 Then - Response.Write("
Error: Support team name too long.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape quotes for support team name and URL - Dim escapedTeamName, escapedTeamUrl - escapedTeamName = Replace(newsupportteamname, "'", "''") - escapedTeamUrl = Replace(newsupportteamurl, "'", "''") - - ' Check if support team already exists - Dim checkSQL, rsCheck - checkSQL = "SELECT COUNT(*) as cnt FROM supportteams WHERE LOWER(teamname) = LOWER('" & escapedTeamName & "')" - Set rsCheck = objConn.Execute(checkSQL) - If rsCheck.EOF Then - rsCheck.Close - Response.Write("
Error: Database query failed.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - If CLng(rsCheck("cnt")) > 0 Then - rsCheck.Close - Response.Write("
Error: Support team '" & Server.HTMLEncode(newsupportteamname) & "' already exists.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - rsCheck.Close - - ' Check if we need to create a new app owner first (nested creation) - If newappownerid = "new" Then - Dim newappownername, newappownersso - newappownername = Trim(Request.Form("newappownername")) - newappownersso = Trim(Request.Form("newappownersso")) - - If newappownername = "" Or newappownersso = "" Then - Response.Write("
Error: App owner name and SSO are required.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newappownername) > 50 Or Len(newappownersso) > 50 Then - Response.Write("
Error: App owner name or SSO too long.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape quotes - Dim escapedOwnerName, escapedSSO - escapedOwnerName = Replace(newappownername, "'", "''") - escapedSSO = Replace(newappownersso, "'", "''") - - ' Check if app owner already exists - checkSQL = "SELECT COUNT(*) as cnt FROM appowners WHERE LOWER(appowner) = LOWER('" & escapedOwnerName & "') OR LOWER(sso) = LOWER('" & escapedSSO & "')" - Set rsCheck = objConn.Execute(checkSQL) - If rsCheck.EOF Then - rsCheck.Close - Response.Write("
Error: Database query failed (app owner check).
") - Response.Write("Go back") - objConn.Close - Response.End - End If - If CLng(rsCheck("cnt")) > 0 Then - rsCheck.Close - Response.Write("
Error: App owner with this name or SSO already exists.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - rsCheck.Close - - ' Insert new app owner - Dim ownerSQL - ownerSQL = "INSERT INTO appowners (appowner, sso, isactive) VALUES ('" & escapedOwnerName & "', '" & escapedSSO & "', 1)" - - On Error Resume Next - objConn.Execute ownerSQL - - If Err.Number <> 0 Then - Response.Write("
Error creating app owner: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the new app owner ID - Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid") - newappownerid = rsCheck("newid") - rsCheck.Close - Else - ' Validate existing app owner ID - If Not IsNumeric(newappownerid) Or CLng(newappownerid) < 1 Then - Response.Write("
Error: Invalid app owner.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - End If - - ' Insert new support team - Dim teamSQL - teamSQL = "INSERT INTO supportteams (teamname, teamurl, appownerid, isactive) VALUES ('" & escapedTeamName & "', '" & escapedTeamUrl & "', " & newappownerid & ", 1)" - - On Error Resume Next - objConn.Execute teamSQL - - If Err.Number <> 0 Then - Response.Write("
Error creating support team: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the new support team ID - Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid") - supportteamid = rsCheck("newid") - rsCheck.Close -Else - ' Validate existing support team ID - If Not IsNumeric(supportteamid) Or CLng(supportteamid) < 1 Then - Response.Write("
Error: Invalid support team ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If -End If - -' Escape backslashes and single quotes for SQL -' Must escape backslashes FIRST, then quotes -appname = Replace(appname, "\", "\\") -appname = Replace(appname, "'", "''") -appdescription = Replace(appdescription, "\", "\\") -appdescription = Replace(appdescription, "'", "''") -applicationnotes = Replace(applicationnotes, "\", "\\") -applicationnotes = Replace(applicationnotes, "'", "''") -installpath = Replace(installpath, "\", "\\") -installpath = Replace(installpath, "'", "''") -applicationlink = Replace(applicationlink, "\", "\\") -applicationlink = Replace(applicationlink, "'", "''") -documentationpath = Replace(documentationpath, "\", "\\") -documentationpath = Replace(documentationpath, "'", "''") -image = Replace(image, "\", "\\") -image = Replace(image, "'", "''") - -' Build INSERT statement -Dim strSQL -strSQL = "INSERT INTO applications (" & _ - "appname, appdescription, supportteamid, applicationnotes, " & _ - "installpath, applicationlink, documentationpath, image, " & _ - "isinstallable, isactive, ishidden, isprinter, islicenced" & _ - ") VALUES (" & _ - "'" & appname & "', " & _ - "'" & appdescription & "', " & _ - supportteamid & ", " & _ - "'" & applicationnotes & "', " & _ - "'" & installpath & "', " & _ - "'" & applicationlink & "', " & _ - "'" & documentationpath & "', " & _ - "'" & image & "', " & _ - isinstallable & ", " & _ - isactive & ", " & _ - ishidden & ", " & _ - isprinter & ", " & _ - islicenced & ")" - -On Error Resume Next -objConn.Execute strSQL - -If Err.Number <> 0 Then - Response.Write("Error: " & Err.Description) - objConn.Close - Response.End -End If - -' Get the new application ID -Dim rsNew -Set rsNew = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") -Dim newAppId -newAppId = rsNew("newid") -rsNew.Close -Set rsNew = Nothing - -objConn.Close - -If newAppId > 0 Then - Response.Redirect("displayapplication.asp?appid=" & newAppId) -Else - Response.Write("Error: Could not retrieve new application ID") -End If -%> diff --git a/savedevice_direct.asp.backup-20251027 b/savedevice_direct.asp.backup-20251027 deleted file mode 100644 index 7171986..0000000 --- a/savedevice_direct.asp.backup-20251027 +++ /dev/null @@ -1,55 +0,0 @@ - -<% - ' Get the serial number from the form - Dim serialnumber - serialnumber = Trim(Request.Form("serialnumber")) - - ' Basic validation - serial number should not be empty and should be alphanumeric-ish - If serialnumber = "" Or Len(serialnumber) < 3 Or Len(serialnumber) > 100 Then - objConn.Close - Response.Redirect("./adddevice.asp?error=INVALID_SERIAL") - Response.End - End If - - ' Escape quotes - serialnumber = Replace(serialnumber, "'", "''") - - ' Check if serial number already exists - Dim checkSQL, rsCheck, existingPCID - checkSQL = "SELECT pcid FROM pc WHERE serialnumber = '" & serialnumber & "'" - Set rsCheck = objConn.Execute(checkSQL) - - If Not rsCheck.EOF Then - ' Serial number already exists - redirect to edit page - existingPCID = rsCheck("pcid") - rsCheck.Close - objConn.Close - Response.Redirect("./editdevice.asp?pcid=" & existingPCID & "&scanned=1") - Response.End - End If - - rsCheck.Close - - ' Insert new device with minimal required fields and defaults - ' pcstatusid = 2 (Inventory) - ' isactive = 1 - ' modelnumberid = 1 (default model) - ' requires_manual_machine_config = 0 (no manual config needed) - ' osid = 1 (default OS) - ' machinenumber = 'IT Closet' (default location for new devices) - Dim insertSQL - insertSQL = "INSERT INTO pc (serialnumber, pcstatusid, isactive, modelnumberid, requires_manual_machine_config, osid, machinenumber, dateadded) " & _ - "VALUES ('" & serialnumber & "', 2, 1, 1, 0, 1, 'IT Closet', NOW())" - - On Error Resume Next - objConn.Execute insertSQL - - If Err.Number = 0 Then - objConn.Close - ' Success - redirect back with success message - Response.Redirect("./adddevice.asp?added=" & Server.URLEncode(Request.Form("serialnumber"))) - Else - objConn.Close - Response.Redirect("./adddevice.asp?error=db") - End If -%> diff --git a/savemachine.asp.backup-refactor-20251027 b/savemachine.asp.backup-refactor-20251027 deleted file mode 100644 index 58b98ba..0000000 --- a/savemachine.asp.backup-refactor-20251027 +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - - - - - -
-<% - ' Initialize error handling - Call InitializeErrorHandling("savemachine.asp") - - ' Get and validate all inputs - Dim machinenumber, modelid, machinetypeid, businessunitid, alias, machinenotes, mapleft, maptop - machinenumber = Trim(Request.Form("machinenumber")) - modelid = Trim(Request.Form("modelid")) - machinetypeid = Trim(Request.Form("machinetypeid")) - businessunitid = Trim(Request.Form("businessunitid")) - alias = Trim(Request.Form("alias")) - machinenotes = Trim(Request.Form("machinenotes")) - mapleft = Trim(Request.Form("mapleft")) - maptop = Trim(Request.Form("maptop")) - - ' Validate required fields - If machinenumber = "" Then - Call HandleValidationError("addmachine.asp", "INVALID_INPUT") - End If - - If Not ValidateID(modelid) Then - Call HandleValidationError("addmachine.asp", "INVALID_ID") - End If - - If Not ValidateID(machinetypeid) Then - Call HandleValidationError("addmachine.asp", "INVALID_ID") - End If - - If Not ValidateID(businessunitid) Then - Call HandleValidationError("addmachine.asp", "INVALID_ID") - End If - - ' Validate field lengths - If Len(machinenumber) > 50 Then - Call HandleValidationError("addmachine.asp", "INVALID_INPUT") - End If - - If Len(alias) > 50 Then - Call HandleValidationError("addmachine.asp", "INVALID_INPUT") - End If - - ' machinenotes is TEXT field, no length validation needed - - ' Check if machine number already exists - Dim checkSQL, rsCheck - checkSQL = "SELECT COUNT(*) as cnt FROM machines WHERE machinenumber = ?" - Set rsCheck = ExecuteParameterizedQuery(objConn, checkSQL, Array(machinenumber)) - If Not rsCheck.EOF Then - If Not IsNull(rsCheck("cnt")) Then - If CLng(rsCheck("cnt")) > 0 Then - rsCheck.Close - Set rsCheck = Nothing - Response.Write("
Error: Machine number '" & Server.HTMLEncode(machinenumber) & "' already exists.
") - Response.Write("Go back") - Call CleanupResources() - Response.End - End If - End If - End If - rsCheck.Close - Set rsCheck = Nothing - - ' Build INSERT statement with parameterized query - Dim params, paramList - strSQL = "INSERT INTO machines (machinenumber, modelnumberid, machinetypeid, businessunitid" - - ' Add optional fields to SQL - If alias <> "" Then - strSQL = strSQL & ", alias" - End If - If machinenotes <> "" Then - strSQL = strSQL & ", machinenotes" - End If - If mapleft <> "" And maptop <> "" Then - If IsNumeric(mapleft) And IsNumeric(maptop) Then - strSQL = strSQL & ", mapleft, maptop" - End If - End If - - strSQL = strSQL & ", isactive, islocationonly) VALUES (?, ?, ?, ?" - - ' Build param list dynamically - Dim paramCount - paramCount = 4 ' Start with 4 required params - - ' Count optional params - If alias <> "" Then paramCount = paramCount + 1 - If machinenotes <> "" Then paramCount = paramCount + 1 - If mapleft <> "" And maptop <> "" Then - If IsNumeric(mapleft) And IsNumeric(maptop) Then - paramCount = paramCount + 2 - End If - End If - paramCount = paramCount + 2 ' For isactive and islocationonly - - ' Initialize array with correct size - ReDim paramList(paramCount - 1) - Dim paramIndex - paramIndex = 0 - - ' Add required fields - paramList(paramIndex) = machinenumber - paramIndex = paramIndex + 1 - paramList(paramIndex) = modelid - paramIndex = paramIndex + 1 - paramList(paramIndex) = machinetypeid - paramIndex = paramIndex + 1 - paramList(paramIndex) = businessunitid - paramIndex = paramIndex + 1 - - ' Add optional fields to param list - If alias <> "" Then - strSQL = strSQL & ", ?" - paramList(paramIndex) = alias - paramIndex = paramIndex + 1 - End If - If machinenotes <> "" Then - strSQL = strSQL & ", ?" - paramList(paramIndex) = machinenotes - paramIndex = paramIndex + 1 - End If - If mapleft <> "" And maptop <> "" Then - If IsNumeric(mapleft) And IsNumeric(maptop) Then - strSQL = strSQL & ", ?, ?" - paramList(paramIndex) = mapleft - paramIndex = paramIndex + 1 - paramList(paramIndex) = maptop - paramIndex = paramIndex + 1 - End If - End If - - ' Add isactive and islocationonly values - strSQL = strSQL & ", ?, ?)" - paramList(paramIndex) = 1 ' isactive = 1 - paramIndex = paramIndex + 1 - paramList(paramIndex) = 0 ' islocationonly = 0 - - ' Execute parameterized insert - Dim recordsAffected - recordsAffected = ExecuteParameterizedInsert(objConn, strSQL, paramList) - - ' Get the new machine ID - Dim newMachineId - Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid") - newMachineId = 0 - If Not rsCheck.EOF Then - If Not IsNull(rsCheck("newid")) Then - newMachineId = CLng(rsCheck("newid")) - End If - End If - rsCheck.Close - Set rsCheck = Nothing - - ' Cleanup resources - Call CleanupResources() - - ' Redirect to display page - If recordsAffected > 0 And newMachineId > 0 Then -%> - -<% - Else - Response.Write("Error: Machine was not added successfully.") - End If -%> -
- - diff --git a/savemachine_direct.asp.backup-20251027 b/savemachine_direct.asp.backup-20251027 deleted file mode 100644 index 3e166ed..0000000 --- a/savemachine_direct.asp.backup-20251027 +++ /dev/null @@ -1,409 +0,0 @@ - - - - - - - -
-<% - ' Get and validate all inputs - Dim machinenumber, modelid, machinetypeid, businessunitid, alias, machinenotes, mapleft, maptop - machinenumber = Trim(Request.Form("machinenumber")) - modelid = Trim(Request.Form("modelid")) - machinetypeid = Trim(Request.Form("machinetypeid")) - businessunitid = Trim(Request.Form("businessunitid")) - alias = Trim(Request.Form("alias")) - machinenotes = Trim(Request.Form("machinenotes")) - mapleft = Trim(Request.Form("mapleft")) - maptop = Trim(Request.Form("maptop")) - - ' Get form inputs for new business unit - Dim newbusinessunit - newbusinessunit = Trim(Request.Form("newbusinessunit")) - - ' Get form inputs for new machine type - Dim newmachinetype, newmachinedescription, newfunctionalaccountid - newmachinetype = Trim(Request.Form("newmachinetype")) - newmachinedescription = Trim(Request.Form("newmachinedescription")) - newfunctionalaccountid = Trim(Request.Form("newfunctionalaccountid")) - - ' Get form inputs for new functional account - Dim newfunctionalaccount - newfunctionalaccount = Trim(Request.Form("newfunctionalaccount")) - - ' Get form inputs for new model - Dim newmodelnumber, newvendorid, newmodelimage - newmodelnumber = Trim(Request.Form("newmodelnumber")) - newvendorid = Trim(Request.Form("newvendorid")) - newmodelimage = Trim(Request.Form("newmodelimage")) - - ' Get form inputs for new vendor - Dim newvendorname - newvendorname = Trim(Request.Form("newvendorname")) - - ' Validate required fields - If machinenumber = "" Then - Response.Write("
Error: Machine number is required.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Validate ID fields - allow "new" as a valid value - If modelid <> "new" And Not IsNumeric(modelid) Then - Response.Write("
Error: Invalid model ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If machinetypeid <> "new" And Not IsNumeric(machinetypeid) Then - Response.Write("
Error: Invalid machine type ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If businessunitid <> "new" And Not IsNumeric(businessunitid) Then - Response.Write("
Error: Invalid business unit ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Validate field lengths - If Len(machinenumber) > 50 Or Len(alias) > 50 Then - Response.Write("
Error: Field length exceeded.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Check if machine number already exists - Dim checkSQL, rsCheck - checkSQL = "SELECT COUNT(*) as cnt FROM machines WHERE machinenumber = '" & Replace(machinenumber, "'", "''") & "'" - Set rsCheck = objConn.Execute(checkSQL) - If Not rsCheck.EOF Then - If CLng(rsCheck("cnt")) > 0 Then - rsCheck.Close - Set rsCheck = Nothing - Response.Write("
Error: Machine number '" & Server.HTMLEncode(machinenumber) & "' already exists.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - End If - rsCheck.Close - Set rsCheck = Nothing - - ' Handle new business unit creation - If businessunitid = "new" Then - If Len(newbusinessunit) = 0 Then - Response.Write("
New business unit name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newbusinessunit) > 50 Then - Response.Write("
Business unit name too long
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape single quotes - Dim escapedBUName - escapedBUName = Replace(newbusinessunit, "'", "''") - - ' Insert new business unit - Dim sqlNewBU - sqlNewBU = "INSERT INTO businessunits (businessunit, isactive) VALUES ('" & escapedBUName & "', 1)" - - On Error Resume Next - objConn.Execute sqlNewBU - - If Err.Number <> 0 Then - Response.Write("
Error creating new business unit: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created business unit ID - Dim rsNewBU - Set rsNewBU = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - businessunitid = CLng(rsNewBU("newid")) - rsNewBU.Close - Set rsNewBU = Nothing - On Error Goto 0 - End If - - ' Handle new machine type creation - If machinetypeid = "new" Then - If Len(newmachinetype) = 0 Then - Response.Write("
New machine type name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newfunctionalaccountid) = 0 Then - Response.Write("
Functional account is required for new machine type
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newmachinetype) > 50 Or Len(newmachinedescription) > 255 Then - Response.Write("
Machine type field length exceeded
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new functional account creation (nested) - If newfunctionalaccountid = "new" Then - If Len(newfunctionalaccount) = 0 Then - Response.Write("
New functional account name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newfunctionalaccount) > 50 Then - Response.Write("
Functional account name too long
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape single quotes - Dim escapedFAName - escapedFAName = Replace(newfunctionalaccount, "'", "''") - - ' Insert new functional account - Dim sqlNewFA - sqlNewFA = "INSERT INTO functionalaccounts (functionalaccount, isactive) VALUES ('" & escapedFAName & "', 1)" - - On Error Resume Next - objConn.Execute sqlNewFA - - If Err.Number <> 0 Then - Response.Write("
Error creating new functional account: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created functional account ID - Dim rsNewFA - Set rsNewFA = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newfunctionalaccountid = CLng(rsNewFA("newid")) - rsNewFA.Close - Set rsNewFA = Nothing - On Error Goto 0 - End If - - ' Escape single quotes - Dim escapedMTName, escapedMTDesc - escapedMTName = Replace(newmachinetype, "'", "''") - escapedMTDesc = Replace(newmachinedescription, "'", "''") - - ' Insert new machine type - Dim sqlNewMT - sqlNewMT = "INSERT INTO machinetypes (machinetype, machinedescription, functionalaccountid, isactive) " & _ - "VALUES ('" & escapedMTName & "', '" & escapedMTDesc & "', " & newfunctionalaccountid & ", 1)" - - On Error Resume Next - objConn.Execute sqlNewMT - - If Err.Number <> 0 Then - Response.Write("
Error creating new machine type: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created machine type ID - Dim rsNewMT - Set rsNewMT = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - machinetypeid = CLng(rsNewMT("newid")) - rsNewMT.Close - Set rsNewMT = Nothing - On Error Goto 0 - End If - - ' Handle new model creation - If modelid = "new" Then - If Len(newmodelnumber) = 0 Then - Response.Write("
New model number is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newvendorid) = 0 Then - Response.Write("
Vendor is required for new model
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newmodelnumber) > 50 Or Len(newmodelimage) > 100 Then - Response.Write("
Model field length exceeded
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new vendor creation (nested) - If newvendorid = "new" Then - If Len(newvendorname) = 0 Then - Response.Write("
New vendor name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newvendorname) > 50 Then - Response.Write("
Vendor name too long
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape single quotes - Dim escapedVendorName - escapedVendorName = Replace(newvendorname, "'", "''") - - ' Insert new vendor (with ismachine=1) - Dim sqlNewVendor - sqlNewVendor = "INSERT INTO vendors (vendor, isactive, isprinter, ispc, ismachine) " & _ - "VALUES ('" & escapedVendorName & "', 1, 0, 0, 1)" - - On Error Resume Next - objConn.Execute sqlNewVendor - - If Err.Number <> 0 Then - Response.Write("
Error creating new vendor: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created vendor ID - Dim rsNewVendor - Set rsNewVendor = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newvendorid = CLng(rsNewVendor("newid")) - rsNewVendor.Close - Set rsNewVendor = Nothing - On Error Goto 0 - End If - - ' Escape single quotes for model - Dim escapedModelNumber, escapedModelImage - escapedModelNumber = Replace(newmodelnumber, "'", "''") - escapedModelImage = Replace(newmodelimage, "'", "''") - - ' Set default image if not specified - If escapedModelImage = "" Then - escapedModelImage = "default.png" - End If - - ' Insert new model - Dim sqlNewModel - sqlNewModel = "INSERT INTO models (modelnumber, vendorid, image, isactive) " & _ - "VALUES ('" & escapedModelNumber & "', " & newvendorid & ", '" & escapedModelImage & "', 1)" - - On Error Resume Next - objConn.Execute sqlNewModel - - If Err.Number <> 0 Then - Response.Write("
Error creating new model: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created model ID - Dim rsNewModel - Set rsNewModel = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - modelid = CLng(rsNewModel("newid")) - rsNewModel.Close - Set rsNewModel = Nothing - On Error Goto 0 - End If - - ' Escape single quotes - machinenumber = Replace(machinenumber, "'", "''") - alias = Replace(alias, "'", "''") - machinenotes = Replace(machinenotes, "'", "''") - - ' Build INSERT statement - Dim strSQL, fields, values - fields = "machinenumber, modelnumberid, machinetypeid, businessunitid" - values = "'" & machinenumber & "', " & modelid & ", " & machinetypeid & ", " & businessunitid - - If alias <> "" Then - fields = fields & ", alias" - values = values & ", '" & alias & "'" - End If - - If machinenotes <> "" Then - fields = fields & ", machinenotes" - values = values & ", '" & machinenotes & "'" - End If - - If mapleft <> "" And maptop <> "" And IsNumeric(mapleft) And IsNumeric(maptop) Then - fields = fields & ", mapleft, maptop" - values = values & ", " & mapleft & ", " & maptop - End If - - fields = fields & ", isactive, islocationonly" - values = values & ", 1, 0" - - strSQL = "INSERT INTO machines (" & fields & ") VALUES (" & values & ")" - - On Error Resume Next - objConn.Execute strSQL - - If Err.Number <> 0 Then - Response.Write("
Error: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the new machine ID - Dim newMachineId - Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid") - newMachineId = CLng(rsCheck("newid")) - rsCheck.Close - Set rsCheck = Nothing - - ' Link selected PC to this machine by updating its machinenumber field - Dim pcid, updatePCSQL - pcid = Trim(Request.Form("pcid")) - - If pcid <> "" And IsNumeric(pcid) And CLng(pcid) > 0 Then - updatePCSQL = "UPDATE pc SET machinenumber = '" & machinenumber & "' WHERE pcid = " & CLng(pcid) - On Error Resume Next - objConn.Execute updatePCSQL - On Error Goto 0 - End If - - objConn.Close - - If CLng(newMachineId) > 0 Then -%> - -<% - Else - Response.Write("Error: Machine was not added successfully.") - End If -%> -
- - diff --git a/savemachine_direct.asp.backup-refactor-20251027 b/savemachine_direct.asp.backup-refactor-20251027 deleted file mode 100644 index 45d0047..0000000 --- a/savemachine_direct.asp.backup-refactor-20251027 +++ /dev/null @@ -1,459 +0,0 @@ -<% -'============================================================================= -' FILE: savemachine_direct.asp -' PURPOSE: Create new machine with nested entity creation (vendor, model, machine type, functional account, business unit) -' SECURITY: Parameterized queries, HTML encoding, input validation -' UPDATED: 2025-10-27 - Migrated to secure patterns -'============================================================================= -%> - - - - - - - -
-<% - ' Get and validate all inputs - Dim machinenumber, modelid, machinetypeid, businessunitid, alias, machinenotes, mapleft, maptop - machinenumber = Trim(Request.Form("machinenumber")) - modelid = Trim(Request.Form("modelid")) - machinetypeid = Trim(Request.Form("machinetypeid")) - businessunitid = Trim(Request.Form("businessunitid")) - alias = Trim(Request.Form("alias")) - machinenotes = Trim(Request.Form("machinenotes")) - mapleft = Trim(Request.Form("mapleft")) - maptop = Trim(Request.Form("maptop")) - - ' Get form inputs for new business unit - Dim newbusinessunit - newbusinessunit = Trim(Request.Form("newbusinessunit")) - - ' Get form inputs for new machine type - Dim newmachinetype, newmachinedescription, newfunctionalaccountid - newmachinetype = Trim(Request.Form("newmachinetype")) - newmachinedescription = Trim(Request.Form("newmachinedescription")) - newfunctionalaccountid = Trim(Request.Form("newfunctionalaccountid")) - - ' Get form inputs for new functional account - Dim newfunctionalaccount - newfunctionalaccount = Trim(Request.Form("newfunctionalaccount")) - - ' Get form inputs for new model - Dim newmodelnumber, newvendorid, newmodelimage - newmodelnumber = Trim(Request.Form("newmodelnumber")) - newvendorid = Trim(Request.Form("newvendorid")) - newmodelimage = Trim(Request.Form("newmodelimage")) - - ' Get form inputs for new vendor - Dim newvendorname - newvendorname = Trim(Request.Form("newvendorname")) - - ' Validate required fields - If machinenumber = "" Then - Response.Write("
Error: Machine number is required.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Validate ID fields - allow "new" as a valid value - If modelid <> "new" And Not IsNumeric(modelid) Then - Response.Write("
Error: Invalid model ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If machinetypeid <> "new" And Not IsNumeric(machinetypeid) Then - Response.Write("
Error: Invalid machine type ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If businessunitid <> "new" And Not IsNumeric(businessunitid) Then - Response.Write("
Error: Invalid business unit ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Validate field lengths - If Len(machinenumber) > 50 Or Len(alias) > 50 Then - Response.Write("
Error: Field length exceeded.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Check if machine number already exists - Dim checkSQL, rsCheck, cmdCheck - checkSQL = "SELECT COUNT(*) as cnt FROM machines WHERE machinenumber = ?" - Set cmdCheck = Server.CreateObject("ADODB.Command") - cmdCheck.ActiveConnection = objConn - cmdCheck.CommandText = checkSQL - cmdCheck.CommandType = 1 - cmdCheck.Parameters.Append cmdCheck.CreateParameter("@machinenumber", 200, 1, 50, machinenumber) - Set rsCheck = cmdCheck.Execute - If Not rsCheck.EOF Then - If CLng(rsCheck("cnt")) > 0 Then - rsCheck.Close - Set rsCheck = Nothing - Set cmdCheck = Nothing - Response.Write("
Error: Machine number '" & Server.HTMLEncode(machinenumber) & "' already exists.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - End If - rsCheck.Close - Set rsCheck = Nothing - Set cmdCheck = Nothing - - ' Handle new business unit creation - If businessunitid = "new" Then - If Len(newbusinessunit) = 0 Then - Response.Write("
New business unit name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newbusinessunit) > 50 Then - Response.Write("
Business unit name too long
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Insert new business unit using parameterized query - Dim sqlNewBU, cmdNewBU - sqlNewBU = "INSERT INTO businessunits (businessunit, isactive) VALUES (?, 1)" - Set cmdNewBU = Server.CreateObject("ADODB.Command") - cmdNewBU.ActiveConnection = objConn - cmdNewBU.CommandText = sqlNewBU - cmdNewBU.CommandType = 1 - cmdNewBU.Parameters.Append cmdNewBU.CreateParameter("@businessunit", 200, 1, 50, newbusinessunit) - - On Error Resume Next - cmdNewBU.Execute - - If Err.Number <> 0 Then - Response.Write("
Error creating new business unit: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - Set cmdNewBU = Nothing - objConn.Close - Response.End - End If - - ' Get the newly created business unit ID - Dim rsNewBU - Set rsNewBU = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - businessunitid = CLng(rsNewBU("newid")) - rsNewBU.Close - Set rsNewBU = Nothing - Set cmdNewBU = Nothing - On Error Goto 0 - End If - - ' Handle new machine type creation - If machinetypeid = "new" Then - If Len(newmachinetype) = 0 Then - Response.Write("
New machine type name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newfunctionalaccountid) = 0 Then - Response.Write("
Functional account is required for new machine type
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newmachinetype) > 50 Or Len(newmachinedescription) > 255 Then - Response.Write("
Machine type field length exceeded
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new functional account creation (nested) - If newfunctionalaccountid = "new" Then - If Len(newfunctionalaccount) = 0 Then - Response.Write("
New functional account name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newfunctionalaccount) > 50 Then - Response.Write("
Functional account name too long
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Insert new functional account using parameterized query - Dim sqlNewFA, cmdNewFA - sqlNewFA = "INSERT INTO functionalaccounts (functionalaccount, isactive) VALUES (?, 1)" - Set cmdNewFA = Server.CreateObject("ADODB.Command") - cmdNewFA.ActiveConnection = objConn - cmdNewFA.CommandText = sqlNewFA - cmdNewFA.CommandType = 1 - cmdNewFA.Parameters.Append cmdNewFA.CreateParameter("@functionalaccount", 200, 1, 50, newfunctionalaccount) - - On Error Resume Next - cmdNewFA.Execute - - If Err.Number <> 0 Then - Response.Write("
Error creating new functional account: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - Set cmdNewFA = Nothing - objConn.Close - Response.End - End If - - ' Get the newly created functional account ID - Dim rsNewFA - Set rsNewFA = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newfunctionalaccountid = CLng(rsNewFA("newid")) - rsNewFA.Close - Set rsNewFA = Nothing - Set cmdNewFA = Nothing - On Error Goto 0 - End If - - ' Insert new machine type using parameterized query - Dim sqlNewMT, cmdNewMT - sqlNewMT = "INSERT INTO machinetypes (machinetype, machinedescription, functionalaccountid, isactive) VALUES (?, ?, ?, 1)" - Set cmdNewMT = Server.CreateObject("ADODB.Command") - cmdNewMT.ActiveConnection = objConn - cmdNewMT.CommandText = sqlNewMT - cmdNewMT.CommandType = 1 - cmdNewMT.Parameters.Append cmdNewMT.CreateParameter("@machinetype", 200, 1, 50, newmachinetype) - cmdNewMT.Parameters.Append cmdNewMT.CreateParameter("@machinedescription", 200, 1, 255, newmachinedescription) - cmdNewMT.Parameters.Append cmdNewMT.CreateParameter("@functionalaccountid", 3, 1, , CLng(newfunctionalaccountid)) - - On Error Resume Next - cmdNewMT.Execute - - If Err.Number <> 0 Then - Response.Write("
Error creating new machine type: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - Set cmdNewMT = Nothing - objConn.Close - Response.End - End If - - ' Get the newly created machine type ID - Dim rsNewMT - Set rsNewMT = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - machinetypeid = CLng(rsNewMT("newid")) - rsNewMT.Close - Set rsNewMT = Nothing - Set cmdNewMT = Nothing - On Error Goto 0 - End If - - ' Handle new model creation - If modelid = "new" Then - If Len(newmodelnumber) = 0 Then - Response.Write("
New model number is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newvendorid) = 0 Then - Response.Write("
Vendor is required for new model
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newmodelnumber) > 50 Or Len(newmodelimage) > 100 Then - Response.Write("
Model field length exceeded
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new vendor creation (nested) - If newvendorid = "new" Then - If Len(newvendorname) = 0 Then - Response.Write("
New vendor name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newvendorname) > 50 Then - Response.Write("
Vendor name too long
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Insert new vendor using parameterized query (with ismachine=1) - Dim sqlNewVendor, cmdNewVendor - sqlNewVendor = "INSERT INTO vendors (vendor, isactive, isprinter, ispc, ismachine) VALUES (?, 1, 0, 0, 1)" - Set cmdNewVendor = Server.CreateObject("ADODB.Command") - cmdNewVendor.ActiveConnection = objConn - cmdNewVendor.CommandText = sqlNewVendor - cmdNewVendor.CommandType = 1 - cmdNewVendor.Parameters.Append cmdNewVendor.CreateParameter("@vendor", 200, 1, 50, newvendorname) - - On Error Resume Next - cmdNewVendor.Execute - - If Err.Number <> 0 Then - Response.Write("
Error creating new vendor: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - Set cmdNewVendor = Nothing - objConn.Close - Response.End - End If - - ' Get the newly created vendor ID - Dim rsNewVendor - Set rsNewVendor = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newvendorid = CLng(rsNewVendor("newid")) - rsNewVendor.Close - Set rsNewVendor = Nothing - Set cmdNewVendor = Nothing - On Error Goto 0 - End If - - ' Set default image if not specified - Dim modelImageValue - If Len(newmodelimage) > 0 Then - modelImageValue = newmodelimage - Else - modelImageValue = "default.png" - End If - - ' Insert new model using parameterized query - Dim sqlNewModel, cmdNewModel - sqlNewModel = "INSERT INTO models (modelnumber, vendorid, image, isactive) VALUES (?, ?, ?, 1)" - Set cmdNewModel = Server.CreateObject("ADODB.Command") - cmdNewModel.ActiveConnection = objConn - cmdNewModel.CommandText = sqlNewModel - cmdNewModel.CommandType = 1 - cmdNewModel.Parameters.Append cmdNewModel.CreateParameter("@modelnumber", 200, 1, 50, newmodelnumber) - cmdNewModel.Parameters.Append cmdNewModel.CreateParameter("@vendorid", 3, 1, , CLng(newvendorid)) - cmdNewModel.Parameters.Append cmdNewModel.CreateParameter("@image", 200, 1, 100, modelImageValue) - - On Error Resume Next - cmdNewModel.Execute - - If Err.Number <> 0 Then - Response.Write("
Error creating new model: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - Set cmdNewModel = Nothing - objConn.Close - Response.End - End If - - ' Get the newly created model ID - Dim rsNewModel - Set rsNewModel = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - modelid = CLng(rsNewModel("newid")) - rsNewModel.Close - Set rsNewModel = Nothing - Set cmdNewModel = Nothing - On Error Goto 0 - End If - - ' Build INSERT statement with parameterized query - Dim strSQL, cmdMachine - strSQL = "INSERT INTO machines (machinenumber, modelnumberid, machinetypeid, businessunitid, alias, machinenotes, mapleft, maptop, isactive, islocationonly) " & _ - "VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, 0)" - - Set cmdMachine = Server.CreateObject("ADODB.Command") - cmdMachine.ActiveConnection = objConn - cmdMachine.CommandText = strSQL - cmdMachine.CommandType = 1 - cmdMachine.Parameters.Append cmdMachine.CreateParameter("@machinenumber", 200, 1, 50, machinenumber) - cmdMachine.Parameters.Append cmdMachine.CreateParameter("@modelnumberid", 3, 1, , CLng(modelid)) - cmdMachine.Parameters.Append cmdMachine.CreateParameter("@machinetypeid", 3, 1, , CLng(machinetypeid)) - cmdMachine.Parameters.Append cmdMachine.CreateParameter("@businessunitid", 3, 1, , CLng(businessunitid)) - - ' Handle optional alias - If alias <> "" Then - cmdMachine.Parameters.Append cmdMachine.CreateParameter("@alias", 200, 1, 50, alias) - Else - cmdMachine.Parameters.Append cmdMachine.CreateParameter("@alias", 200, 1, 50, Null) - End If - - ' Handle optional machinenotes - If machinenotes <> "" Then - cmdMachine.Parameters.Append cmdMachine.CreateParameter("@machinenotes", 200, 1, 500, machinenotes) - Else - cmdMachine.Parameters.Append cmdMachine.CreateParameter("@machinenotes", 200, 1, 500, Null) - End If - - ' Handle optional map coordinates - If mapleft <> "" And maptop <> "" And IsNumeric(mapleft) And IsNumeric(maptop) Then - cmdMachine.Parameters.Append cmdMachine.CreateParameter("@mapleft", 3, 1, , CLng(mapleft)) - cmdMachine.Parameters.Append cmdMachine.CreateParameter("@maptop", 3, 1, , CLng(maptop)) - Else - cmdMachine.Parameters.Append cmdMachine.CreateParameter("@mapleft", 3, 1, , Null) - cmdMachine.Parameters.Append cmdMachine.CreateParameter("@maptop", 3, 1, , Null) - End If - - On Error Resume Next - cmdMachine.Execute - - If Err.Number <> 0 Then - Response.Write("
Error: " & Server.HTMLEncode(Err.Description) & "
") - Response.Write("Go back") - Set cmdMachine = Nothing - objConn.Close - Response.End - End If - Set cmdMachine = Nothing - - ' Get the new machine ID - Dim newMachineId - Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid") - newMachineId = CLng(rsCheck("newid")) - rsCheck.Close - Set rsCheck = Nothing - - ' Link selected PC to this machine by updating its machinenumber field - Dim pcid - pcid = Trim(Request.Form("pcid")) - - If pcid <> "" And IsNumeric(pcid) And CLng(pcid) > 0 Then - Dim updatePCSQL, cmdUpdatePC - updatePCSQL = "UPDATE pc SET machinenumber = ? WHERE pcid = ?" - Set cmdUpdatePC = Server.CreateObject("ADODB.Command") - cmdUpdatePC.ActiveConnection = objConn - cmdUpdatePC.CommandText = updatePCSQL - cmdUpdatePC.CommandType = 1 - cmdUpdatePC.Parameters.Append cmdUpdatePC.CreateParameter("@machinenumber", 200, 1, 50, machinenumber) - cmdUpdatePC.Parameters.Append cmdUpdatePC.CreateParameter("@pcid", 3, 1, , CLng(pcid)) - - On Error Resume Next - cmdUpdatePC.Execute - Set cmdUpdatePC = Nothing - On Error Goto 0 - End If - - objConn.Close - - If CLng(newMachineId) > 0 Then -%> - -<% - Else - Response.Write("Error: Machine was not added successfully.") - End If -%> -
- - diff --git a/savemodel.asp.backup-20251027 b/savemodel.asp.backup-20251027 deleted file mode 100644 index 7d496f4..0000000 --- a/savemodel.asp.backup-20251027 +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - -
-<% - ' Initialize error handling - Call InitializeErrorHandling("savemodel.asp") - - ' Get and validate all inputs - Dim modelnumber, vendorid, notes, documentationpath - Dim newvendorname, isprinter, ispc, ismachine - Dim modelisprinter, modelispc, modelismachine - - modelnumber = Trim(Request.Form("modelnumber")) - vendorid = Trim(Request.Form("vendorid")) - notes = Trim(Request.Form("notes")) - documentationpath = Trim(Request.Form("documentationpath")) - - ' New vendor fields - newvendorname = Trim(Request.Form("newvendorname")) - isprinter = Request.Form("isprinter") - ispc = Request.Form("ispc") - ismachine = Request.Form("ismachine") - - ' Model type checkboxes (NOTE: these are different from vendor checkboxes above) - modelisprinter = Request.Form("modelisprinter") - modelispc = Request.Form("modelispc") - modelismachine = Request.Form("modelismachine") - - ' Validate required fields - If modelnumber = "" Then - Call HandleValidationError("addmodel.asp", "INVALID_INPUT") - End If - - ' Validate field lengths - If Len(modelnumber) > 255 Then - Call HandleValidationError("addmodel.asp", "INVALID_INPUT") - End If - - If Len(notes) > 255 Then - Call HandleValidationError("addmodel.asp", "INVALID_INPUT") - End If - - If Len(documentationpath) > 255 Then - Call HandleValidationError("addmodel.asp", "INVALID_INPUT") - End If - - ' Check if we need to create a new vendor first - If vendorid = "new" Then - If newvendorname = "" Then - Response.Write("
Error: Manufacturer name is required when adding a new manufacturer.
") - Response.Write("Go back") - Call CleanupResources() - Response.End - End If - - If Len(newvendorname) > 50 Then - Call HandleValidationError("addmodel.asp", "INVALID_INPUT") - End If - - ' Check if vendor already exists - Dim checkSQL, rsCheck - checkSQL = "SELECT COUNT(*) as cnt FROM vendors WHERE LOWER(vendor) = LOWER(?)" - Set rsCheck = ExecuteParameterizedQuery(objConn, checkSQL, Array(newvendorname)) - If rsCheck("cnt") > 0 Then - rsCheck.Close - Set rsCheck = Nothing - Response.Write("
Error: Manufacturer '" & Server.HTMLEncode(newvendorname) & "' already exists.
") - Response.Write("Go back") - Call CleanupResources() - Response.End - End If - rsCheck.Close - Set rsCheck = Nothing - - ' Insert new vendor - Dim vendorSQL - vendorSQL = "INSERT INTO vendors (vendor, isactive, isprinter, ispc, ismachine) VALUES (?, 1, ?, ?, ?)" - - Dim vendorParams - vendorParams = Array(newvendorname, _ - IIf(isprinter = "1", 1, 0), _ - IIf(ispc = "1", 1, 0), _ - IIf(ismachine = "1", 1, 0)) - - Call ExecuteParameterizedUpdate(objConn, vendorSQL, vendorParams) - - ' Get the new vendor ID - Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid") - vendorid = rsCheck("newid") - rsCheck.Close - Set rsCheck = Nothing - Else - ' Validate existing vendor ID - If Not ValidateID(vendorid) Then - Call HandleValidationError("addmodel.asp", "INVALID_ID") - End If - End If - - ' Now we need to update the vendor's type flags based on model type selection - ' If model is for printer, ensure vendor.isprinter = 1, etc. - If modelisprinter = "1" OR modelispc = "1" OR modelismachine = "1" Then - Dim updateVendorSQL - updateVendorSQL = "UPDATE vendors SET " - Dim updateParts() - ReDim updateParts(-1) - - If modelisprinter = "1" Then - ReDim Preserve updateParts(UBound(updateParts) + 1) - updateParts(UBound(updateParts)) = "isprinter = 1" - End If - If modelispc = "1" Then - ReDim Preserve updateParts(UBound(updateParts) + 1) - updateParts(UBound(updateParts)) = "ispc = 1" - End If - If modelismachine = "1" Then - ReDim Preserve updateParts(UBound(updateParts) + 1) - updateParts(UBound(updateParts)) = "ismachine = 1" - End If - - If UBound(updateParts) >= 0 Then - updateVendorSQL = updateVendorSQL & Join(updateParts, ", ") & " WHERE vendorid = ?" - Call ExecuteParameterizedUpdate(objConn, updateVendorSQL, Array(vendorid)) - End If - End If - - ' Check if model already exists for this vendor - checkSQL = "SELECT COUNT(*) as cnt FROM models WHERE LOWER(modelnumber) = LOWER(?) AND vendorid = ?" - Set rsCheck = ExecuteParameterizedQuery(objConn, checkSQL, Array(modelnumber, vendorid)) - If rsCheck("cnt") > 0 Then - rsCheck.Close - Set rsCheck = Nothing - Response.Write("
Error: Model '" & Server.HTMLEncode(modelnumber) & "' already exists for this manufacturer.
") - Response.Write("Go back") - Call CleanupResources() - Response.End - End If - rsCheck.Close - Set rsCheck = Nothing - - ' Insert the new model - Dim modelSQL, modelParams - modelSQL = "INSERT INTO models (modelnumber, vendorid, notes, documentationpath, isactive) VALUES (?, ?, ?, ?, 1)" - modelParams = Array(modelnumber, vendorid, notes, documentationpath) - - Dim recordsAffected - recordsAffected = ExecuteParameterizedUpdate(objConn, modelSQL, modelParams) - - ' Get the new model ID - Dim newModelId - Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid") - newModelId = rsCheck("newid") - rsCheck.Close - Set rsCheck = Nothing - - ' Cleanup resources - Call CleanupResources() - - ' Redirect back to where they came from or to a success page - If recordsAffected > 0 And newModelId > 0 Then - Response.Write("
Model added successfully!
") - Response.Write("

Model '" & Server.HTMLEncode(modelnumber) & "' has been added.

") - Response.Write("

Add Another Model ") - Response.Write("Add Printer ") - Response.Write("Add Machine

") - Else - Response.Write("
Error: Model was not added successfully.
") - Response.Write("Go back") - End If -%> -
- - diff --git a/savemodel_direct.asp.backup-20251027 b/savemodel_direct.asp.backup-20251027 deleted file mode 100644 index bd41eeb..0000000 --- a/savemodel_direct.asp.backup-20251027 +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - -
-<% - ' Get and validate all inputs - Dim modelnumber, vendorid, notes, documentationpath - Dim newvendorname, isprinter, ispc, ismachine - Dim modelisprinter, modelispc, modelismachine - - modelnumber = Trim(Request.Form("modelnumber")) - vendorid = Trim(Request.Form("vendorid")) - notes = Trim(Request.Form("notes")) - documentationpath = Trim(Request.Form("documentationpath")) - - ' New vendor fields - newvendorname = Trim(Request.Form("newvendorname")) - isprinter = Request.Form("isprinter") - ispc = Request.Form("ispc") - ismachine = Request.Form("ismachine") - - ' Model type checkboxes - modelisprinter = Request.Form("modelisprinter") - modelispc = Request.Form("modelispc") - modelismachine = Request.Form("modelismachine") - - ' Validate required fields - If modelnumber = "" Then - Response.Write("
Error: Model number is required.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Validate field lengths - If Len(modelnumber) > 255 Then - Response.Write("
Error: Model number too long.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(notes) > 255 Then - Response.Write("
Error: Notes too long.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(documentationpath) > 255 Then - Response.Write("
Error: Documentation path too long.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape quotes - modelnumber = Replace(modelnumber, "'", "''") - notes = Replace(notes, "'", "''") - documentationpath = Replace(documentationpath, "'", "''") - newvendorname = Replace(newvendorname, "'", "''") - - ' Check if we need to create a new vendor first - If vendorid = "new" Then - If newvendorname = "" Then - Response.Write("
Error: Manufacturer name is required when adding a new manufacturer.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newvendorname) > 50 Then - Response.Write("
Error: Manufacturer name too long.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Check if vendor already exists - Dim checkSQL, rsCheck - checkSQL = "SELECT COUNT(*) as cnt FROM vendors WHERE LOWER(vendor) = LOWER('" & newvendorname & "')" - Set rsCheck = objConn.Execute(checkSQL) - If rsCheck("cnt") > 0 Then - rsCheck.Close - Response.Write("
Error: Manufacturer '" & Server.HTMLEncode(Request.Form("newvendorname")) & "' already exists.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - rsCheck.Close - - ' Convert vendor checkboxes - Dim iPrint, iPC, iMach - If isprinter = "1" Then iPrint = 1 Else iPrint = 0 - If ispc = "1" Then iPC = 1 Else iPC = 0 - If ismachine = "1" Then iMach = 1 Else iMach = 0 - - ' Insert new vendor - Dim vendorSQL - vendorSQL = "INSERT INTO vendors (vendor, isactive, isprinter, ispc, ismachine) " & _ - "VALUES ('" & newvendorname & "', 1, " & iPrint & ", " & iPC & ", " & iMach & ")" - - On Error Resume Next - objConn.Execute vendorSQL - - If Err.Number <> 0 Then - Response.Write("
Error creating manufacturer: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the new vendor ID - Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid") - vendorid = rsCheck("newid") - rsCheck.Close - Else - ' Validate existing vendor ID - If Not IsNumeric(vendorid) Or CLng(vendorid) < 1 Then - Response.Write("
Error: Invalid manufacturer ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - End If - - ' Update vendor's type flags based on model type selection - If modelisprinter = "1" OR modelispc = "1" OR modelismachine = "1" Then - Dim updateVendorSQL, updateParts - updateParts = "" - - If modelisprinter = "1" Then - If updateParts <> "" Then updateParts = updateParts & ", " - updateParts = updateParts & "isprinter = 1" - End If - If modelispc = "1" Then - If updateParts <> "" Then updateParts = updateParts & ", " - updateParts = updateParts & "ispc = 1" - End If - If modelismachine = "1" Then - If updateParts <> "" Then updateParts = updateParts & ", " - updateParts = updateParts & "ismachine = 1" - End If - - If updateParts <> "" Then - updateVendorSQL = "UPDATE vendors SET " & updateParts & " WHERE vendorid = " & vendorid - objConn.Execute updateVendorSQL - End If - End If - - ' Check if model already exists for this vendor - checkSQL = "SELECT COUNT(*) as cnt FROM models WHERE LOWER(modelnumber) = LOWER('" & modelnumber & "') AND vendorid = " & vendorid - Set rsCheck = objConn.Execute(checkSQL) - If rsCheck("cnt") > 0 Then - rsCheck.Close - Response.Write("
Error: Model '" & Server.HTMLEncode(Request.Form("modelnumber")) & "' already exists for this manufacturer.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - rsCheck.Close - - ' Insert the new model - Dim modelSQL - modelSQL = "INSERT INTO models (modelnumber, vendorid, notes, documentationpath, isactive) " & _ - "VALUES ('" & modelnumber & "', " & vendorid & ", '" & notes & "', '" & documentationpath & "', 1)" - - On Error Resume Next - objConn.Execute modelSQL - - If Err.Number <> 0 Then - Response.Write("
Error: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the new model ID - Dim newModelId - Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid") - newModelId = rsCheck("newid") - rsCheck.Close - - objConn.Close - - If newModelId > 0 Then - Response.Write("
Model added successfully!
") - Response.Write("

Model '" & Server.HTMLEncode(Request.Form("modelnumber")) & "' has been added.

") - Response.Write("

Add Another Model ") - Response.Write("Add Printer ") - Response.Write("Add Machine

") - Else - Response.Write("
Error: Model was not added successfully.
") - Response.Write("Go back") - End If -%> -
- - diff --git a/savenotification_direct.asp.backup-20251027 b/savenotification_direct.asp.backup-20251027 deleted file mode 100644 index b08a24a..0000000 --- a/savenotification_direct.asp.backup-20251027 +++ /dev/null @@ -1,74 +0,0 @@ - -<% -' Get form inputs -Dim notification, ticketnumber, starttime, endtime, isactive, isshopfloor, notificationtypeid, businessunitid -notification = Trim(Request.Form("notification")) -ticketnumber = Trim(Request.Form("ticketnumber")) -starttime = Trim(Request.Form("starttime")) -endtime = Trim(Request.Form("endtime")) -isactive = Request.Form("isactive") -isshopfloor = Request.Form("isshopfloor") -notificationtypeid = Trim(Request.Form("notificationtypeid")) -businessunitid = Trim(Request.Form("businessunitid")) - -If isactive = "" Then isactive = 0 Else isactive = 1 -If isshopfloor = "" Then isshopfloor = 0 Else isshopfloor = 1 - -' Default to TBD if no type selected -If notificationtypeid = "" Or Not IsNumeric(notificationtypeid) Then - notificationtypeid = "1" -End If - -' Validate required fields (endtime is now optional) -If Len(notification) = 0 Or Len(starttime) = 0 Then - Response.Write("Required fields missing") - objConn.Close - Response.End -End If - -If Len(notification) > 500 Or Len(ticketnumber) > 50 Then - Response.Write("Field length exceeded") - objConn.Close - Response.End -End If - -' Escape quotes -notification = Replace(notification, "'", "''") -ticketnumber = Replace(ticketnumber, "'", "''") - -' Convert datetime format for starttime -starttime = Replace(starttime, "T", " ") & ":00" - -' Handle optional endtime - leave as NULL if blank (indefinite) -Dim strSQL, endtimeSQL, businessunitSQL -If Len(endtime) = 0 Then - ' No end date - store as NULL for indefinite notifications - endtimeSQL = "NULL" -Else - ' End date specified - convert format and wrap in quotes - endtime = Replace(endtime, "T", " ") & ":00" - endtimeSQL = "'" & endtime & "'" -End If - -' Handle optional businessunitid - NULL means applies to all business units -If businessunitid = "" Or Not IsNumeric(businessunitid) Then - businessunitSQL = "NULL" -Else - businessunitSQL = businessunitid -End If - -' INSERT -strSQL = "INSERT INTO notifications (notificationtypeid, businessunitid, notification, ticketnumber, starttime, endtime, isactive, isshopfloor) " & _ - "VALUES (" & notificationtypeid & ", " & businessunitSQL & ", '" & notification & "', '" & ticketnumber & "', '" & starttime & "', " & endtimeSQL & ", " & isactive & ", " & isshopfloor & ")" - -On Error Resume Next -objConn.Execute strSQL - -If Err.Number = 0 Then - objConn.Close - Response.Redirect("displaynotifications.asp") -Else - Response.Write("Error: " & Err.Description) - objConn.Close -End If -%> diff --git a/saveprinter_direct.asp.backup-20251027 b/saveprinter_direct.asp.backup-20251027 deleted file mode 100644 index 975353a..0000000 --- a/saveprinter_direct.asp.backup-20251027 +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - -
-<% - ' Get and validate all inputs - Dim modelid, serialnumber, ipaddress, fqdn, printercsfname, printerwindowsname, machineid, maptop, mapleft - modelid = Trim(Request.Form("modelid")) - serialnumber = Trim(Request.Form("serialnumber")) - ipaddress = Trim(Request.Form("ipaddress")) - fqdn = Trim(Request.Form("fqdn")) - printercsfname = Trim(Request.Form("printercsfname")) - printerwindowsname = Trim(Request.Form("printerwindowsname")) - machineid = Trim(Request.Form("machineid")) - maptop = Trim(Request.Form("maptop")) - mapleft = Trim(Request.Form("mapleft")) - - ' Get form inputs for new model - Dim newmodelnumber, newvendorid, newmodelnotes, newmodeldocpath - newmodelnumber = Trim(Request.Form("newmodelnumber")) - newvendorid = Trim(Request.Form("newvendorid")) - newmodelnotes = Trim(Request.Form("newmodelnotes")) - newmodeldocpath = Trim(Request.Form("newmodeldocpath")) - - ' Get form inputs for new vendor - Dim newvendorname - newvendorname = Trim(Request.Form("newvendorname")) - - ' Validate required fields - If modelid = "" Then - Response.Write("
Error: Model is required.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If modelid <> "new" And Not IsNumeric(modelid) Then - Response.Write("
Error: Invalid model ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Not IsNumeric(machineid) Then - Response.Write("
Error: Invalid machine ID.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If serialnumber = "" Or ipaddress = "" Or printerwindowsname = "" Then - Response.Write("
Error: Required fields missing.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Validate field lengths - If Len(serialnumber) > 100 Or Len(fqdn) > 255 Or Len(printercsfname) > 50 Or Len(printerwindowsname) > 255 Then - Response.Write("
Error: Field length exceeded.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Check if printer with same IP already exists - Dim checkSQL, rsCheck - checkSQL = "SELECT COUNT(*) as cnt FROM printers WHERE ipaddress = '" & Replace(ipaddress, "'", "''") & "' AND isactive = 1" - Set rsCheck = objConn.Execute(checkSQL) - If Not rsCheck.EOF Then - If CLng(rsCheck("cnt")) > 0 Then - rsCheck.Close - Set rsCheck = Nothing - Response.Write("
Error: A printer with IP address '" & Server.HTMLEncode(ipaddress) & "' already exists.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - End If - rsCheck.Close - Set rsCheck = Nothing - - ' Handle new model creation - If modelid = "new" Then - If Len(newmodelnumber) = 0 Then - Response.Write("
New model number is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newvendorid) = 0 Then - Response.Write("
Vendor is required for new model
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newmodelnumber) > 255 Or Len(newmodelnotes) > 255 Or Len(newmodeldocpath) > 255 Then - Response.Write("
Model field length exceeded
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Handle new vendor creation (nested) - If newvendorid = "new" Then - If Len(newvendorname) = 0 Then - Response.Write("
New vendor name is required
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(newvendorname) > 50 Then - Response.Write("
Vendor name too long
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Escape single quotes - Dim escapedVendorName - escapedVendorName = Replace(newvendorname, "'", "''") - - ' Insert new vendor (with isprinter=1) - Dim sqlNewVendor - sqlNewVendor = "INSERT INTO vendors (vendor, isactive, isprinter, ispc, ismachine) " & _ - "VALUES ('" & escapedVendorName & "', 1, 1, 0, 0)" - - On Error Resume Next - objConn.Execute sqlNewVendor - - If Err.Number <> 0 Then - Response.Write("
Error creating new vendor: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created vendor ID - Dim rsNewVendor - Set rsNewVendor = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newvendorid = rsNewVendor("newid") - rsNewVendor.Close - Set rsNewVendor = Nothing - On Error Goto 0 - End If - - ' Escape single quotes for model - Dim escapedModelNumber, escapedModelNotes, escapedModelDocPath - escapedModelNumber = Replace(newmodelnumber, "'", "''") - escapedModelNotes = Replace(newmodelnotes, "'", "''") - escapedModelDocPath = Replace(newmodeldocpath, "'", "''") - - ' Insert new model - Dim sqlNewModel - sqlNewModel = "INSERT INTO models (modelnumber, vendorid, notes, documentationpath, isactive) " & _ - "VALUES ('" & escapedModelNumber & "', " & newvendorid & ", '" & escapedModelNotes & "', '" & escapedModelDocPath & "', 1)" - - On Error Resume Next - objConn.Execute sqlNewModel - - If Err.Number <> 0 Then - Response.Write("
Error creating new model: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Get the newly created model ID - Dim rsNewModel - Set rsNewModel = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - modelid = rsNewModel("newid") - rsNewModel.Close - Set rsNewModel = Nothing - On Error Goto 0 - End If - - ' Escape single quotes - serialnumber = Replace(serialnumber, "'", "''") - ipaddress = Replace(ipaddress, "'", "''") - fqdn = Replace(fqdn, "'", "''") - printercsfname = Replace(printercsfname, "'", "''") - printerwindowsname = Replace(printerwindowsname, "'", "''") - - ' Build INSERT statement with map coordinates (default to 50,50 if not provided) - Dim strSQL, maptopSQL, mapleftSQL - - ' Handle map coordinates - default to 50 if not provided - If maptop <> "" And IsNumeric(maptop) Then - maptopSQL = maptop - Else - maptopSQL = "50" - End If - - If mapleft <> "" And IsNumeric(mapleft) Then - mapleftSQL = mapleft - Else - mapleftSQL = "50" - End If - - strSQL = "INSERT INTO printers (modelid, serialnumber, ipaddress, fqdn, printercsfname, printerwindowsname, machineid, maptop, mapleft, isactive) " & _ - "VALUES (" & modelid & ", '" & serialnumber & "', '" & ipaddress & "', '" & fqdn & "', '" & printercsfname & "', '" & printerwindowsname & "', " & machineid & ", " & maptopSQL & ", " & mapleftSQL & ", 1)" - - On Error Resume Next - objConn.Execute strSQL - - If Err.Number <> 0 Then - Response.Write("
Error inserting printer: " & Err.Description & "
") - Response.Write("
SQL: " & Server.HTMLEncode(strSQL) & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - On Error Goto 0 - - ' Get the new printer ID - Dim newPrinterId - Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid") - newPrinterId = CLng(rsCheck("newid")) - rsCheck.Close - Set rsCheck = Nothing - - objConn.Close - - If CLng(newPrinterId) > 0 Then -%> - -<% - Else - Response.Write("Error: Printer was not added successfully.") - End If -%> -
- - diff --git a/savevendor_direct.asp.backup-20251027 b/savevendor_direct.asp.backup-20251027 deleted file mode 100644 index 92ea518..0000000 --- a/savevendor_direct.asp.backup-20251027 +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -
-<% - Dim vendor, isprinter, ispc, ismachine - vendor = Trim(Request.Form("vendor")) - isprinter = Request.Form("isprinter") - ispc = Request.Form("ispc") - ismachine = Request.Form("ismachine") - - ' Validate - If vendor = "" Then - Response.Write("
Error: Manufacturer name is required.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If Len(vendor) > 50 Then - Response.Write("
Error: Manufacturer name too long.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - If isprinter <> "1" AND ispc <> "1" AND ismachine <> "1" Then - Response.Write("
Error: Please select at least one category.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - ' Check if exists - Dim checkSQL, rsCheck - checkSQL = "SELECT COUNT(*) as cnt FROM vendors WHERE LOWER(vendor) = LOWER('" & Replace(vendor, "'", "''") & "')" - Set rsCheck = objConn.Execute(checkSQL) - If rsCheck("cnt") > 0 Then - rsCheck.Close - Response.Write("
Error: Manufacturer '" & Server.HTMLEncode(vendor) & "' already exists.
") - Response.Write("Go back") - objConn.Close - Response.End - End If - rsCheck.Close - - ' Escape quotes - vendor = Replace(vendor, "'", "''") - - ' Convert checkboxes - Dim iPrint, iPC, iMach - If isprinter = "1" Then iPrint = 1 Else iPrint = 0 - If ispc = "1" Then iPC = 1 Else iPC = 0 - If ismachine = "1" Then iMach = 1 Else iMach = 0 - - ' INSERT - Dim vendorSQL - vendorSQL = "INSERT INTO vendors (vendor, isactive, isprinter, ispc, ismachine) " & _ - "VALUES ('" & vendor & "', 1, " & iPrint & ", " & iPC & ", " & iMach & ")" - - On Error Resume Next - objConn.Execute vendorSQL - - If Err.Number <> 0 Then - Response.Write("
Error: " & Err.Description & "
") - Response.Write("Go back") - objConn.Close - Response.End - End If - - Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid") - Dim newVendorId - newVendorId = rsCheck("newid") - rsCheck.Close - - objConn.Close - - If newVendorId > 0 Then - Response.Write("
Manufacturer added successfully!
") - Response.Write("

Manufacturer '" & Server.HTMLEncode(Request.Form("vendor")) & "' has been added.

") - Response.Write("

Add Another Manufacturer ") - Response.Write("Add Model

") - Else - Response.Write("
Error: Manufacturer was not added.
") - Response.Write("Go back") - End If -%> -
- - diff --git a/tonerreport.asp.backup b/tonerreport.asp.backup deleted file mode 100644 index ceaa2e6..0000000 --- a/tonerreport.asp.backup +++ /dev/null @@ -1,951 +0,0 @@ - - - - - - - - -<% - ' ============================================================================ - ' FUNCTION: SafeGetZabbixData - ' PURPOSE: Safely call Zabbix function with error handling - ' ============================================================================ - Function SafeGetZabbixData(ipaddress) - On Error Resume Next - Dim result - result = GetAllPrinterSuppliesCached(ipaddress) - If Err.Number <> 0 Then - result = Empty - Err.Clear - End If - On Error Goto 0 - SafeGetZabbixData = result - End Function - - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF - - ' ============================================================================ - ' FUNCTION: GetMarketingName - ' PURPOSE: Convert OEM part numbers to marketing names for easier supply closet matching - ' ============================================================================ - Function GetMarketingName(oemPartNumber) - Dim oem, marketing - oem = UCase(Trim(oemPartNumber)) - - ' HP M454dw / M454dn / M479fdw (414A/414X series) - If oem = "W2020A" Or oem = "W2020X" Then marketing = "414A/414X Black" - ElseIf oem = "W2021A" Or oem = "W2021X" Then marketing = "414A/414X Cyan" - ElseIf oem = "W2022A" Or oem = "W2022X" Then marketing = "414A/414X Yellow" - ElseIf oem = "W2023A" Or oem = "W2023X" Then marketing = "414A/414X Magenta" - - ' HP M254dw / M255dw (202A/202X series) - ElseIf oem = "CF500A" Or oem = "CF500X" Then marketing = "202A/202X Black" - ElseIf oem = "CF501A" Or oem = "CF501X" Then marketing = "202A/202X Cyan" - ElseIf oem = "CF502A" Or oem = "CF502X" Then marketing = "202A/202X Yellow" - ElseIf oem = "CF503A" Or oem = "CF503X" Then marketing = "202A/202X Magenta" - - ' HP M251nw / M252dw (201A/201X series) - ElseIf oem = "CF400A" Or oem = "CF400X" Then marketing = "201A/201X Black" - ElseIf oem = "CF401A" Or oem = "CF401X" Then marketing = "201A/201X Cyan" - ElseIf oem = "CF402A" Or oem = "CF402X" Then marketing = "201A/201X Yellow" - ElseIf oem = "CF403A" Or oem = "CF403X" Then marketing = "201A/201X Magenta" - - ' HP LaserJet 200 color M251nw (131A/131X series) - ElseIf oem = "CF210A" Or oem = "CF210X" Then marketing = "131A/131X Black" - ElseIf oem = "CF211A" Then marketing = "131A Cyan" - ElseIf oem = "CF212A" Then marketing = "131A Yellow" - ElseIf oem = "CF213A" Then marketing = "131A Magenta" - - ' HP M404n / M406 (58A/58X series) - ElseIf oem = "CF258A" Or oem = "CF258X" Then marketing = "58A/58X Black" - - ' HP M506 / M607 (87A/87X series) - ElseIf oem = "CF287A" Or oem = "CF287X" Then marketing = "87A/87X Black" - - ' HP M602 (90A/90X series) - ElseIf oem = "CE390A" Or oem = "CE390X" Then marketing = "90A/90X Black" - - ' HP P3015dn (55A/55X series) - ElseIf oem = "CE255A" Or oem = "CE255X" Then marketing = "55A/55X Black" - - ' HP LaserJet 4250tn (42A/42X series) - ElseIf oem = "Q5942A" Or oem = "Q5942X" Then marketing = "42A/42X Black" - - ' HP LaserJet Pro 4001n (147A/147X series) - ElseIf oem = "W1470A" Or oem = "W1470X" Then marketing = "147A/147X Black" - - ' HP Imaging Drums - ElseIf oem = "CF234A" Then marketing = "34A Drum" - ElseIf oem = "CF219A" Then marketing = "19A Drum" - ElseIf oem = "W2030A" Or oem = "W2030X" Then marketing = "415A/415X Drum" - - ' HP Maintenance Kits - ElseIf oem = "CF254A" Then marketing = "54A Maintenance Kit" - ElseIf oem = "CF247A" Then marketing = "47A Maintenance Kit" - - ' Xerox (note: many use numeric part numbers) - ElseIf oem = "006R01697" Then marketing = "Xerox Black Toner" - ElseIf oem = "006R01698" Then marketing = "Xerox Cyan Toner" - ElseIf oem = "006R01699" Then marketing = "Xerox Yellow Toner" - ElseIf oem = "006R01700" Then marketing = "Xerox Magenta Toner" - - Else - marketing = "" ' No mapping found - will display OEM number only - End If - - GetMarketingName = marketing - End Function -%> - - - -
- - -
- - - - -
-
-
-
-
-
-
-
-
  Supplies Alert Report
-

- Monitors: Toner/Ink <20%, Drums <20%, Maintenance Kits <20%, Waste Cartridges >80% -

-
-
- - -
-
-
- - - - - - - - - - - - -<% - ' Declare all variables at top level to avoid scope issues - Dim strSQL, rs, printerid, printerwindowsname, printercsfname, ipaddress, machinenumber, modelnumber, machineid, vendor - Dim printerData, zabbixConnected, pingStatus, suppliesJSON - Dim lowSuppliesFound - Dim alertItems() - Dim alertCount - Dim itemStart, itemEnd, currentPos, itemBlock - Dim itemName, itemValue, itemStatus, itemState - Dim namePos, nameStart, nameEnd - Dim valuePos, valueStart, valueEnd - Dim statusPos, statusStart, statusEnd - Dim statePos, stateStart, stateEnd - Dim baseName, numericValue - Dim statusIcon, statusColor, statusText - Dim partNumber, lookupName - Dim partNumbers - Dim debugPartNumbers, debugAllItems, debugItemCount - Dim isSupplyItem, isWasteItem, showItem - Dim marketingName, displayPartNumber - Dim urgencyScore, alertItem - Dim i, j, tempAlert, outputItem, k - Dim partKeyName, tryName, partKey, foundMatch - Dim primaryWord, supplyType, colorPos - Dim typeMatches, colorMatches - - alertCount = 0 - ReDim alertItems(500) ' Pre-allocate space for up to 500 alerts - lowSuppliesFound = False - - strSQL = "SELECT printers.printerid, printers.printerwindowsname, printers.printercsfname, printers.ipaddress, " &_ - "machines.machinenumber, machines.machineid, models.modelnumber, machines.alias, vendors.vendor " &_ - "FROM printers " &_ - "INNER JOIN models ON printers.modelid = models.modelnumberid " &_ - "INNER JOIN machines ON printers.machineid = machines.machineid " &_ - "INNER JOIN vendors ON models.vendorid = vendors.vendorid " &_ - "WHERE printers.isactive = 1 AND printers.ipaddress IS NOT NULL AND printers.ipaddress != '' " &_ - "ORDER BY machines.machinenumber ASC" - - set rs = objconn.Execute(strSQL) - - While Not rs.EOF - printerid = rs("printerid") - printerwindowsname = rs("printerwindowsname") - printercsfname = rs("printercsfname") - ipaddress = rs("ipaddress") - modelnumber = rs("modelnumber") - machineid = rs("machineid") - vendor = rs("vendor") - - ' Use alias if available, otherwise machinenumber - If NOT IsNull(rs("alias")) AND rs("alias") <> "" Then - machinenumber = rs("alias") - Else - machinenumber = rs("machinenumber") - End If - - ' Get cached Zabbix data for this printer (all supplies including maintenance) - printerData = SafeGetZabbixData(ipaddress) - - If Not IsEmpty(printerData) And IsArray(printerData) Then - zabbixConnected = printerData(0) - pingStatus = printerData(1) - suppliesJSON = printerData(2) - - ' Parse supplies JSON to find items below 20% - If zabbixConnected = "1" And suppliesJSON <> "" And InStr(suppliesJSON, """result"":[") > 0 Then - ' Check if result array is not empty - If InStr(suppliesJSON, """result"":[]") = 0 Then - ' First pass: Build lookup of part numbers (type:info items) - ' Use Dictionary object for more reliable storage - Set partNumbers = Server.CreateObject("Scripting.Dictionary") - debugPartNumbers = "" - debugAllItems = "" - debugItemCount = 0 - - currentPos = InStr(suppliesJSON, """result"":[") + 11 - - ' Scan for part number items (containing "Part Number" in name) - Do While currentPos > 11 And currentPos < Len(suppliesJSON) - itemStart = InStr(currentPos, suppliesJSON, "{""itemid"":") - If itemStart = 0 Then Exit Do - - itemEnd = InStr(itemStart, suppliesJSON, "},{") - If itemEnd = 0 Then itemEnd = InStr(itemStart, suppliesJSON, "}]") - If itemEnd = 0 Then Exit Do - - itemBlock = Mid(suppliesJSON, itemStart, itemEnd - itemStart + 1) - - ' Extract name - namePos = InStr(itemBlock, """name"":""") - If namePos > 0 Then - nameStart = namePos + 8 - nameEnd = InStr(nameStart, itemBlock, """") - itemName = Mid(itemBlock, nameStart, nameEnd - nameStart) - Else - itemName = "" - End If - - ' DEBUG: Track all items scanned - debugItemCount = debugItemCount + 1 - If debugItemCount <= 10 Then - debugAllItems = debugAllItems & itemName & " | " - End If - - ' If this is a part number item, store it - ' Look for various part number patterns (case-insensitive) - If InStr(1, itemName, "Part Number", 1) > 0 Or InStr(1, itemName, "Part number", 1) > 0 Or InStr(1, itemName, "OEM", 1) > 0 Or InStr(1, itemName, "SKU", 1) > 0 Then - valuePos = InStr(itemBlock, """lastvalue"":""") - If valuePos > 0 Then - valueStart = valuePos + 13 - valueEnd = InStr(valueStart, itemBlock, """") - itemValue = Mid(itemBlock, valueStart, valueEnd - valueStart) - - ' Store in dictionary with full item name as key (e.g., "Black Toner Part Number") - If Not partNumbers.Exists(itemName) Then - partNumbers.Add itemName, itemValue - debugPartNumbers = debugPartNumbers & "[" & itemName & "=" & itemValue & "] " - End If - End If - End If - - currentPos = itemEnd + 1 - Loop - - ' Debug disabled - uncomment to show part number matching debug info - ' Response.Write("") - - ' Second pass: Find level items below 20% - currentPos = InStr(suppliesJSON, """result"":[") + 11 - - Do While currentPos > 11 And currentPos < Len(suppliesJSON) - ' Find next item - itemStart = InStr(currentPos, suppliesJSON, "{""itemid"":") - If itemStart = 0 Then Exit Do - - ' Find end of this item - itemEnd = InStr(itemStart, suppliesJSON, "},{") - If itemEnd = 0 Then - ' Last item in array - itemEnd = InStr(itemStart, suppliesJSON, "}]") - End If - If itemEnd = 0 Then Exit Do - - itemBlock = Mid(suppliesJSON, itemStart, itemEnd - itemStart + 1) - - ' Extract item name - "name":" is 8 characters - namePos = InStr(itemBlock, """name"":""") - If namePos > 0 Then - nameStart = namePos + 8 - nameEnd = InStr(nameStart, itemBlock, """") - itemName = Mid(itemBlock, nameStart, nameEnd - nameStart) - Else - itemName = "Unknown" - End If - - ' Extract lastvalue - "lastvalue":" is 13 characters - valuePos = InStr(itemBlock, """lastvalue"":""") - If valuePos > 0 Then - valueStart = valuePos + 13 - valueEnd = InStr(valueStart, itemBlock, """") - itemValue = Mid(itemBlock, valueStart, valueEnd - valueStart) - Else - itemValue = "0" - End If - - ' Extract status (0 = enabled, 1 = disabled) - "status":" is 10 characters - statusPos = InStr(itemBlock, """status"":""") - If statusPos > 0 Then - statusStart = statusPos + 10 - statusEnd = InStr(statusStart, itemBlock, """") - itemStatus = Mid(itemBlock, statusStart, statusEnd - statusStart) - Else - itemStatus = "0" - End If - - ' Extract state (0 = normal, 1 = not supported) - "state":" is 9 characters - statePos = InStr(itemBlock, """state"":""") - If statePos > 0 Then - stateStart = statePos + 9 - stateEnd = InStr(stateStart, itemBlock, """") - itemState = Mid(itemBlock, stateStart, stateEnd - stateStart) - Else - itemState = "0" - End If - - ' Convert value to number and check if below 20% - On Error Resume Next - numericValue = CDbl(itemValue) - On Error Goto 0 - - ' Filter: Only show actual supply level items (must have "Level" in name) - isSupplyItem = False - If InStr(1, itemName, "Level", 1) > 0 Then - ' Exclude non-supply items - If InStr(1, itemName, "Part Number", 1) = 0 And _ - InStr(1, itemName, "ICMP", 1) = 0 And _ - InStr(1, itemName, "ping", 1) = 0 And _ - InStr(1, itemName, "loss", 1) = 0 And _ - InStr(1, itemName, "response", 1) = 0 And _ - InStr(1, itemName, "Hostname", 1) = 0 And _ - InStr(1, itemName, "Model", 1) = 0 And _ - InStr(1, itemName, "Serial", 1) = 0 And _ - InStr(1, itemName, "Location", 1) = 0 And _ - InStr(1, itemName, "Firmware", 1) = 0 And _ - InStr(1, itemName, "Current", 1) = 0 And _ - InStr(1, itemName, " Max", 1) = 0 Then - isSupplyItem = True - End If - End If - - ' Detect if this is a waste cartridge (works backwards - high % is bad) - isWasteItem = (InStr(1, itemName, "Waste", 1) > 0) - - ' Check if item should be shown based on type - showItem = False - - If isSupplyItem And itemStatus = "0" And itemState = "0" Then - If isWasteItem Then - ' Waste cartridges: alert when ABOVE 80% (nearly full) - If numericValue > 80 And numericValue <= 100 Then - showItem = True - End If - Else - ' Regular supplies: alert when BELOW 20% (running low) - If numericValue < 20 And numericValue >= 0 Then - showItem = True - End If - End If - End If - - If showItem Then - lowSuppliesFound = True - - ' Determine status indicator - If isWasteItem Then - ' Waste cartridge status (high % = bad) - If numericValue >= 95 Then - statusIcon = "zmdi-alert-circle" - statusColor = "#ff0000" - statusText = "Critical - Nearly Full" - ElseIf numericValue >= 90 Then - statusIcon = "zmdi-alert-triangle" - statusColor = "#ff6600" - statusText = "Very High" - Else - statusIcon = "zmdi-info" - statusColor = "#ffaa00" - statusText = "High" - End If - Else - ' Regular supply status (low % = bad) - If numericValue <= 5 Then - statusIcon = "zmdi-alert-circle" - statusColor = "#ff0000" - statusText = "Critical" - ElseIf numericValue <= 10 Then - statusIcon = "zmdi-alert-triangle" - statusColor = "#ff6600" - statusText = "Very Low" - Else - statusIcon = "zmdi-info" - statusColor = "#ffaa00" - statusText = "Low" - End If - End If - - ' Look up part number for this item - partNumber = "-" - If partNumbers.Count > 0 Then - ' Extract base name for lookup - remove " Level" suffix - lookupName = Replace(itemName, " Level", "") - lookupName = Trim(lookupName) - - ' Comprehensive matching strategy for all template versions - foundMatch = False - - ' Strategy 1: EXACT match - NEW template format (preferred) - ' "Black Toner Level" → "Black Toner Part Number" - ' "Cyan Ink Level" → "Cyan Ink Part Number" - ' "Black Drum Level" → "Black Drum Part Number" - partKeyName = lookupName & " Part Number" - If partNumbers.Exists(partKeyName) Then - partNumber = partNumbers(partKeyName) - foundMatch = True - End If - - ' Strategy 2: Add " Cartridge" - OLD Xerox template format - ' "Black Drum Level" → "Black Drum Cartridge Part Number" - ' "Black Toner Level" → "Black Toner Cartridge Part Number" - If Not foundMatch Then - tryName = lookupName & " Cartridge Part Number" - If partNumbers.Exists(tryName) Then - partNumber = partNumbers(tryName) - foundMatch = True - End If - End If - - ' Strategy 3: Replace supply type with "Cartridge" - OLD HP template format - ' "Black Toner Level" → "Black Cartridge Part Number" - ' "Cyan Ink Level" → "Cyan Cartridge Part Number" - If Not foundMatch Then - ' Replace common supply types with "Cartridge" - If InStr(1, lookupName, "Toner", 1) > 0 Then - tryName = Replace(lookupName, "Toner", "Cartridge", 1, -1, 1) & " Part Number" - ElseIf InStr(1, lookupName, "Ink", 1) > 0 Then - tryName = Replace(lookupName, "Ink", "Cartridge", 1, -1, 1) & " Part Number" - ElseIf InStr(1, lookupName, "Drum", 1) > 0 Then - tryName = Replace(lookupName, "Drum", "Cartridge", 1, -1, 1) & " Part Number" - Else - tryName = "" - End If - - If tryName <> "" And partNumbers.Exists(tryName) Then - partNumber = partNumbers(tryName) - foundMatch = True - End If - End If - - ' Strategy 4: Check for "Standard MIB" suffix variation - ' "Maintenance Kit Level" → "Maintenance Kit Part Number (Standard MIB)" - If Not foundMatch Then - tryName = lookupName & " Part Number (Standard MIB)" - If partNumbers.Exists(tryName) Then - partNumber = partNumbers(tryName) - foundMatch = True - End If - End If - - ' Strategy 5: Intelligent fuzzy match by type and color - If Not foundMatch Then - ' Extract primary identifier (first significant word) - primaryWord = "" - supplyType = "" - - ' Determine supply type - If InStr(1, lookupName, "Toner", 1) > 0 Then - supplyType = "Toner" - ElseIf InStr(1, lookupName, "Ink", 1) > 0 Then - supplyType = "Ink" - ElseIf InStr(1, lookupName, "Drum", 1) > 0 Then - supplyType = "Drum" - ElseIf InStr(1, lookupName, "Waste", 1) > 0 Then - supplyType = "Waste" - ElseIf InStr(1, lookupName, "Fuser", 1) > 0 Then - supplyType = "Fuser" - ElseIf InStr(1, lookupName, "Maintenance", 1) > 0 Then - supplyType = "Maintenance" - End If - - ' Extract color/identifier (first word before supply type) - If supplyType <> "" Then - colorPos = InStr(1, lookupName, supplyType, 1) - If colorPos > 1 Then - primaryWord = Trim(Left(lookupName, colorPos - 1)) - End If - End If - - ' Search all keys for matching type and color - For Each partKey In partNumbers.Keys - If InStr(1, partKey, "Part Number", 1) > 0 Then - ' Must match supply type - typeMatches = False - If supplyType <> "" Then - typeMatches = (InStr(1, partKey, supplyType, 1) > 0) Or (InStr(1, partKey, "Cartridge", 1) > 0) - Else - ' For items without obvious type, just look for any match - typeMatches = True - End If - - ' Must match color/identifier if present - colorMatches = True - If primaryWord <> "" Then - colorMatches = (InStr(1, partKey, primaryWord, 1) > 0) - End If - - If typeMatches And colorMatches Then - partNumber = partNumbers(partKey) - foundMatch = True - Exit For - End If - End If - Next - End If - End If - - ' Get marketing name for this part number - marketingName = GetMarketingName(partNumber) - - If marketingName <> "" Then - ' Show marketing name prominently with OEM number in smaller text - displayPartNumber = "" & Server.HTMLEncode(marketingName) & "
" & Server.HTMLEncode(partNumber) & "" - Else - ' No mapping found, just show OEM number - displayPartNumber = Server.HTMLEncode(partNumber) - End If - - ' Calculate urgency score for sorting - ' For regular supplies: lower % = higher urgency (5% = 95 urgency) - ' For waste: higher % = higher urgency (95% = 95 urgency) - If isWasteItem Then - urgencyScore = numericValue - Else - urgencyScore = 100 - numericValue - End If - - ' Store alert data for later sorting - alertItem = Array( _ - urgencyScore, _ - vendor, _ - printerid, _ - printerwindowsname, _ - machineid, _ - machinenumber, _ - modelnumber, _ - numericValue, _ - statusColor, _ - displayPartNumber, _ - itemName _ - ) - - alertItems(alertCount) = alertItem - alertCount = alertCount + 1 - End If - - ' Move to next item - currentPos = itemEnd + 1 - Loop - End If - End If - End If - - rs.MoveNext - Wend - - ' Sort alerts by urgency (highest urgency first = most critical) - ' Simple bubble sort with error handling - On Error Resume Next - If alertCount > 1 Then - For i = 0 To alertCount - 2 - For j = 0 To alertCount - i - 2 - ' alertItems(j)(0) is the urgency score - If Not IsEmpty(alertItems(j)) And Not IsEmpty(alertItems(j + 1)) Then - If CDbl(alertItems(j)(0)) < CDbl(alertItems(j + 1)(0)) Then - ' Swap items - tempAlert = alertItems(j) - alertItems(j) = alertItems(j + 1) - alertItems(j + 1) = tempAlert - End If - End If - Next - Next - End If - - ' Output sorted alerts - If alertCount > 0 Then - lowSuppliesFound = True - For k = 0 To alertCount - 1 - If Not IsEmpty(alertItems(k)) And IsArray(alertItems(k)) Then - outputItem = alertItems(k) - ' Array indices: 0=urgencyScore, 1=vendor, 2=printerid, 3=printerwindowsname, - ' 4=machineid, 5=machinenumber, 6=modelnumber, 7=numericValue, - ' 8=statusColor, 9=displayPartNumber, 10=itemName - - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - End If - Next - End If - On Error Goto 0 - - If Not lowSuppliesFound Then - Response.Write("") - End If - - objConn.Close -%> - -
PrinterLocationModelLevelPart Number
") - ' Response.Write("DEBUG (" & ipaddress & "): Scanned " & debugItemCount & " items | ") - ' Response.Write("First 10: " & Server.HTMLEncode(debugAllItems) & "
") - ' If debugPartNumbers <> "" Then - ' Response.Write("Part Numbers Found: " & Server.HTMLEncode(debugPartNumbers)) - ' Else - ' Response.Write("No part numbers found!") - ' End If - ' Response.Write("
" & Server.HTMLEncode(outputItem(3)) & "" & Server.HTMLEncode(outputItem(5)) & "" & Server.HTMLEncode(outputItem(6)) & "" & Round(CDbl(outputItem(7)), 1) & "%" & outputItem(9) & "
") - Response.Write("
") - Response.Write("No supply issues found - All printers have adequate supplies") - Response.Write("
-
- -
-
-
-
- - - -
- - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tonerreport.asp.broken b/tonerreport.asp.broken deleted file mode 100644 index ceaa2e6..0000000 --- a/tonerreport.asp.broken +++ /dev/null @@ -1,951 +0,0 @@ - - - - - - - - -<% - ' ============================================================================ - ' FUNCTION: SafeGetZabbixData - ' PURPOSE: Safely call Zabbix function with error handling - ' ============================================================================ - Function SafeGetZabbixData(ipaddress) - On Error Resume Next - Dim result - result = GetAllPrinterSuppliesCached(ipaddress) - If Err.Number <> 0 Then - result = Empty - Err.Clear - End If - On Error Goto 0 - SafeGetZabbixData = result - End Function - - theme = Request.Cookies("theme") - IF theme = "" THEN - theme="bg-theme1" - END IF - - ' ============================================================================ - ' FUNCTION: GetMarketingName - ' PURPOSE: Convert OEM part numbers to marketing names for easier supply closet matching - ' ============================================================================ - Function GetMarketingName(oemPartNumber) - Dim oem, marketing - oem = UCase(Trim(oemPartNumber)) - - ' HP M454dw / M454dn / M479fdw (414A/414X series) - If oem = "W2020A" Or oem = "W2020X" Then marketing = "414A/414X Black" - ElseIf oem = "W2021A" Or oem = "W2021X" Then marketing = "414A/414X Cyan" - ElseIf oem = "W2022A" Or oem = "W2022X" Then marketing = "414A/414X Yellow" - ElseIf oem = "W2023A" Or oem = "W2023X" Then marketing = "414A/414X Magenta" - - ' HP M254dw / M255dw (202A/202X series) - ElseIf oem = "CF500A" Or oem = "CF500X" Then marketing = "202A/202X Black" - ElseIf oem = "CF501A" Or oem = "CF501X" Then marketing = "202A/202X Cyan" - ElseIf oem = "CF502A" Or oem = "CF502X" Then marketing = "202A/202X Yellow" - ElseIf oem = "CF503A" Or oem = "CF503X" Then marketing = "202A/202X Magenta" - - ' HP M251nw / M252dw (201A/201X series) - ElseIf oem = "CF400A" Or oem = "CF400X" Then marketing = "201A/201X Black" - ElseIf oem = "CF401A" Or oem = "CF401X" Then marketing = "201A/201X Cyan" - ElseIf oem = "CF402A" Or oem = "CF402X" Then marketing = "201A/201X Yellow" - ElseIf oem = "CF403A" Or oem = "CF403X" Then marketing = "201A/201X Magenta" - - ' HP LaserJet 200 color M251nw (131A/131X series) - ElseIf oem = "CF210A" Or oem = "CF210X" Then marketing = "131A/131X Black" - ElseIf oem = "CF211A" Then marketing = "131A Cyan" - ElseIf oem = "CF212A" Then marketing = "131A Yellow" - ElseIf oem = "CF213A" Then marketing = "131A Magenta" - - ' HP M404n / M406 (58A/58X series) - ElseIf oem = "CF258A" Or oem = "CF258X" Then marketing = "58A/58X Black" - - ' HP M506 / M607 (87A/87X series) - ElseIf oem = "CF287A" Or oem = "CF287X" Then marketing = "87A/87X Black" - - ' HP M602 (90A/90X series) - ElseIf oem = "CE390A" Or oem = "CE390X" Then marketing = "90A/90X Black" - - ' HP P3015dn (55A/55X series) - ElseIf oem = "CE255A" Or oem = "CE255X" Then marketing = "55A/55X Black" - - ' HP LaserJet 4250tn (42A/42X series) - ElseIf oem = "Q5942A" Or oem = "Q5942X" Then marketing = "42A/42X Black" - - ' HP LaserJet Pro 4001n (147A/147X series) - ElseIf oem = "W1470A" Or oem = "W1470X" Then marketing = "147A/147X Black" - - ' HP Imaging Drums - ElseIf oem = "CF234A" Then marketing = "34A Drum" - ElseIf oem = "CF219A" Then marketing = "19A Drum" - ElseIf oem = "W2030A" Or oem = "W2030X" Then marketing = "415A/415X Drum" - - ' HP Maintenance Kits - ElseIf oem = "CF254A" Then marketing = "54A Maintenance Kit" - ElseIf oem = "CF247A" Then marketing = "47A Maintenance Kit" - - ' Xerox (note: many use numeric part numbers) - ElseIf oem = "006R01697" Then marketing = "Xerox Black Toner" - ElseIf oem = "006R01698" Then marketing = "Xerox Cyan Toner" - ElseIf oem = "006R01699" Then marketing = "Xerox Yellow Toner" - ElseIf oem = "006R01700" Then marketing = "Xerox Magenta Toner" - - Else - marketing = "" ' No mapping found - will display OEM number only - End If - - GetMarketingName = marketing - End Function -%> - - - -
- - -
- - - - -
-
-
-
-
-
-
-
-
  Supplies Alert Report
-

- Monitors: Toner/Ink <20%, Drums <20%, Maintenance Kits <20%, Waste Cartridges >80% -

-
-
- - -
-
-
- - - - - - - - - - - - -<% - ' Declare all variables at top level to avoid scope issues - Dim strSQL, rs, printerid, printerwindowsname, printercsfname, ipaddress, machinenumber, modelnumber, machineid, vendor - Dim printerData, zabbixConnected, pingStatus, suppliesJSON - Dim lowSuppliesFound - Dim alertItems() - Dim alertCount - Dim itemStart, itemEnd, currentPos, itemBlock - Dim itemName, itemValue, itemStatus, itemState - Dim namePos, nameStart, nameEnd - Dim valuePos, valueStart, valueEnd - Dim statusPos, statusStart, statusEnd - Dim statePos, stateStart, stateEnd - Dim baseName, numericValue - Dim statusIcon, statusColor, statusText - Dim partNumber, lookupName - Dim partNumbers - Dim debugPartNumbers, debugAllItems, debugItemCount - Dim isSupplyItem, isWasteItem, showItem - Dim marketingName, displayPartNumber - Dim urgencyScore, alertItem - Dim i, j, tempAlert, outputItem, k - Dim partKeyName, tryName, partKey, foundMatch - Dim primaryWord, supplyType, colorPos - Dim typeMatches, colorMatches - - alertCount = 0 - ReDim alertItems(500) ' Pre-allocate space for up to 500 alerts - lowSuppliesFound = False - - strSQL = "SELECT printers.printerid, printers.printerwindowsname, printers.printercsfname, printers.ipaddress, " &_ - "machines.machinenumber, machines.machineid, models.modelnumber, machines.alias, vendors.vendor " &_ - "FROM printers " &_ - "INNER JOIN models ON printers.modelid = models.modelnumberid " &_ - "INNER JOIN machines ON printers.machineid = machines.machineid " &_ - "INNER JOIN vendors ON models.vendorid = vendors.vendorid " &_ - "WHERE printers.isactive = 1 AND printers.ipaddress IS NOT NULL AND printers.ipaddress != '' " &_ - "ORDER BY machines.machinenumber ASC" - - set rs = objconn.Execute(strSQL) - - While Not rs.EOF - printerid = rs("printerid") - printerwindowsname = rs("printerwindowsname") - printercsfname = rs("printercsfname") - ipaddress = rs("ipaddress") - modelnumber = rs("modelnumber") - machineid = rs("machineid") - vendor = rs("vendor") - - ' Use alias if available, otherwise machinenumber - If NOT IsNull(rs("alias")) AND rs("alias") <> "" Then - machinenumber = rs("alias") - Else - machinenumber = rs("machinenumber") - End If - - ' Get cached Zabbix data for this printer (all supplies including maintenance) - printerData = SafeGetZabbixData(ipaddress) - - If Not IsEmpty(printerData) And IsArray(printerData) Then - zabbixConnected = printerData(0) - pingStatus = printerData(1) - suppliesJSON = printerData(2) - - ' Parse supplies JSON to find items below 20% - If zabbixConnected = "1" And suppliesJSON <> "" And InStr(suppliesJSON, """result"":[") > 0 Then - ' Check if result array is not empty - If InStr(suppliesJSON, """result"":[]") = 0 Then - ' First pass: Build lookup of part numbers (type:info items) - ' Use Dictionary object for more reliable storage - Set partNumbers = Server.CreateObject("Scripting.Dictionary") - debugPartNumbers = "" - debugAllItems = "" - debugItemCount = 0 - - currentPos = InStr(suppliesJSON, """result"":[") + 11 - - ' Scan for part number items (containing "Part Number" in name) - Do While currentPos > 11 And currentPos < Len(suppliesJSON) - itemStart = InStr(currentPos, suppliesJSON, "{""itemid"":") - If itemStart = 0 Then Exit Do - - itemEnd = InStr(itemStart, suppliesJSON, "},{") - If itemEnd = 0 Then itemEnd = InStr(itemStart, suppliesJSON, "}]") - If itemEnd = 0 Then Exit Do - - itemBlock = Mid(suppliesJSON, itemStart, itemEnd - itemStart + 1) - - ' Extract name - namePos = InStr(itemBlock, """name"":""") - If namePos > 0 Then - nameStart = namePos + 8 - nameEnd = InStr(nameStart, itemBlock, """") - itemName = Mid(itemBlock, nameStart, nameEnd - nameStart) - Else - itemName = "" - End If - - ' DEBUG: Track all items scanned - debugItemCount = debugItemCount + 1 - If debugItemCount <= 10 Then - debugAllItems = debugAllItems & itemName & " | " - End If - - ' If this is a part number item, store it - ' Look for various part number patterns (case-insensitive) - If InStr(1, itemName, "Part Number", 1) > 0 Or InStr(1, itemName, "Part number", 1) > 0 Or InStr(1, itemName, "OEM", 1) > 0 Or InStr(1, itemName, "SKU", 1) > 0 Then - valuePos = InStr(itemBlock, """lastvalue"":""") - If valuePos > 0 Then - valueStart = valuePos + 13 - valueEnd = InStr(valueStart, itemBlock, """") - itemValue = Mid(itemBlock, valueStart, valueEnd - valueStart) - - ' Store in dictionary with full item name as key (e.g., "Black Toner Part Number") - If Not partNumbers.Exists(itemName) Then - partNumbers.Add itemName, itemValue - debugPartNumbers = debugPartNumbers & "[" & itemName & "=" & itemValue & "] " - End If - End If - End If - - currentPos = itemEnd + 1 - Loop - - ' Debug disabled - uncomment to show part number matching debug info - ' Response.Write("") - - ' Second pass: Find level items below 20% - currentPos = InStr(suppliesJSON, """result"":[") + 11 - - Do While currentPos > 11 And currentPos < Len(suppliesJSON) - ' Find next item - itemStart = InStr(currentPos, suppliesJSON, "{""itemid"":") - If itemStart = 0 Then Exit Do - - ' Find end of this item - itemEnd = InStr(itemStart, suppliesJSON, "},{") - If itemEnd = 0 Then - ' Last item in array - itemEnd = InStr(itemStart, suppliesJSON, "}]") - End If - If itemEnd = 0 Then Exit Do - - itemBlock = Mid(suppliesJSON, itemStart, itemEnd - itemStart + 1) - - ' Extract item name - "name":" is 8 characters - namePos = InStr(itemBlock, """name"":""") - If namePos > 0 Then - nameStart = namePos + 8 - nameEnd = InStr(nameStart, itemBlock, """") - itemName = Mid(itemBlock, nameStart, nameEnd - nameStart) - Else - itemName = "Unknown" - End If - - ' Extract lastvalue - "lastvalue":" is 13 characters - valuePos = InStr(itemBlock, """lastvalue"":""") - If valuePos > 0 Then - valueStart = valuePos + 13 - valueEnd = InStr(valueStart, itemBlock, """") - itemValue = Mid(itemBlock, valueStart, valueEnd - valueStart) - Else - itemValue = "0" - End If - - ' Extract status (0 = enabled, 1 = disabled) - "status":" is 10 characters - statusPos = InStr(itemBlock, """status"":""") - If statusPos > 0 Then - statusStart = statusPos + 10 - statusEnd = InStr(statusStart, itemBlock, """") - itemStatus = Mid(itemBlock, statusStart, statusEnd - statusStart) - Else - itemStatus = "0" - End If - - ' Extract state (0 = normal, 1 = not supported) - "state":" is 9 characters - statePos = InStr(itemBlock, """state"":""") - If statePos > 0 Then - stateStart = statePos + 9 - stateEnd = InStr(stateStart, itemBlock, """") - itemState = Mid(itemBlock, stateStart, stateEnd - stateStart) - Else - itemState = "0" - End If - - ' Convert value to number and check if below 20% - On Error Resume Next - numericValue = CDbl(itemValue) - On Error Goto 0 - - ' Filter: Only show actual supply level items (must have "Level" in name) - isSupplyItem = False - If InStr(1, itemName, "Level", 1) > 0 Then - ' Exclude non-supply items - If InStr(1, itemName, "Part Number", 1) = 0 And _ - InStr(1, itemName, "ICMP", 1) = 0 And _ - InStr(1, itemName, "ping", 1) = 0 And _ - InStr(1, itemName, "loss", 1) = 0 And _ - InStr(1, itemName, "response", 1) = 0 And _ - InStr(1, itemName, "Hostname", 1) = 0 And _ - InStr(1, itemName, "Model", 1) = 0 And _ - InStr(1, itemName, "Serial", 1) = 0 And _ - InStr(1, itemName, "Location", 1) = 0 And _ - InStr(1, itemName, "Firmware", 1) = 0 And _ - InStr(1, itemName, "Current", 1) = 0 And _ - InStr(1, itemName, " Max", 1) = 0 Then - isSupplyItem = True - End If - End If - - ' Detect if this is a waste cartridge (works backwards - high % is bad) - isWasteItem = (InStr(1, itemName, "Waste", 1) > 0) - - ' Check if item should be shown based on type - showItem = False - - If isSupplyItem And itemStatus = "0" And itemState = "0" Then - If isWasteItem Then - ' Waste cartridges: alert when ABOVE 80% (nearly full) - If numericValue > 80 And numericValue <= 100 Then - showItem = True - End If - Else - ' Regular supplies: alert when BELOW 20% (running low) - If numericValue < 20 And numericValue >= 0 Then - showItem = True - End If - End If - End If - - If showItem Then - lowSuppliesFound = True - - ' Determine status indicator - If isWasteItem Then - ' Waste cartridge status (high % = bad) - If numericValue >= 95 Then - statusIcon = "zmdi-alert-circle" - statusColor = "#ff0000" - statusText = "Critical - Nearly Full" - ElseIf numericValue >= 90 Then - statusIcon = "zmdi-alert-triangle" - statusColor = "#ff6600" - statusText = "Very High" - Else - statusIcon = "zmdi-info" - statusColor = "#ffaa00" - statusText = "High" - End If - Else - ' Regular supply status (low % = bad) - If numericValue <= 5 Then - statusIcon = "zmdi-alert-circle" - statusColor = "#ff0000" - statusText = "Critical" - ElseIf numericValue <= 10 Then - statusIcon = "zmdi-alert-triangle" - statusColor = "#ff6600" - statusText = "Very Low" - Else - statusIcon = "zmdi-info" - statusColor = "#ffaa00" - statusText = "Low" - End If - End If - - ' Look up part number for this item - partNumber = "-" - If partNumbers.Count > 0 Then - ' Extract base name for lookup - remove " Level" suffix - lookupName = Replace(itemName, " Level", "") - lookupName = Trim(lookupName) - - ' Comprehensive matching strategy for all template versions - foundMatch = False - - ' Strategy 1: EXACT match - NEW template format (preferred) - ' "Black Toner Level" → "Black Toner Part Number" - ' "Cyan Ink Level" → "Cyan Ink Part Number" - ' "Black Drum Level" → "Black Drum Part Number" - partKeyName = lookupName & " Part Number" - If partNumbers.Exists(partKeyName) Then - partNumber = partNumbers(partKeyName) - foundMatch = True - End If - - ' Strategy 2: Add " Cartridge" - OLD Xerox template format - ' "Black Drum Level" → "Black Drum Cartridge Part Number" - ' "Black Toner Level" → "Black Toner Cartridge Part Number" - If Not foundMatch Then - tryName = lookupName & " Cartridge Part Number" - If partNumbers.Exists(tryName) Then - partNumber = partNumbers(tryName) - foundMatch = True - End If - End If - - ' Strategy 3: Replace supply type with "Cartridge" - OLD HP template format - ' "Black Toner Level" → "Black Cartridge Part Number" - ' "Cyan Ink Level" → "Cyan Cartridge Part Number" - If Not foundMatch Then - ' Replace common supply types with "Cartridge" - If InStr(1, lookupName, "Toner", 1) > 0 Then - tryName = Replace(lookupName, "Toner", "Cartridge", 1, -1, 1) & " Part Number" - ElseIf InStr(1, lookupName, "Ink", 1) > 0 Then - tryName = Replace(lookupName, "Ink", "Cartridge", 1, -1, 1) & " Part Number" - ElseIf InStr(1, lookupName, "Drum", 1) > 0 Then - tryName = Replace(lookupName, "Drum", "Cartridge", 1, -1, 1) & " Part Number" - Else - tryName = "" - End If - - If tryName <> "" And partNumbers.Exists(tryName) Then - partNumber = partNumbers(tryName) - foundMatch = True - End If - End If - - ' Strategy 4: Check for "Standard MIB" suffix variation - ' "Maintenance Kit Level" → "Maintenance Kit Part Number (Standard MIB)" - If Not foundMatch Then - tryName = lookupName & " Part Number (Standard MIB)" - If partNumbers.Exists(tryName) Then - partNumber = partNumbers(tryName) - foundMatch = True - End If - End If - - ' Strategy 5: Intelligent fuzzy match by type and color - If Not foundMatch Then - ' Extract primary identifier (first significant word) - primaryWord = "" - supplyType = "" - - ' Determine supply type - If InStr(1, lookupName, "Toner", 1) > 0 Then - supplyType = "Toner" - ElseIf InStr(1, lookupName, "Ink", 1) > 0 Then - supplyType = "Ink" - ElseIf InStr(1, lookupName, "Drum", 1) > 0 Then - supplyType = "Drum" - ElseIf InStr(1, lookupName, "Waste", 1) > 0 Then - supplyType = "Waste" - ElseIf InStr(1, lookupName, "Fuser", 1) > 0 Then - supplyType = "Fuser" - ElseIf InStr(1, lookupName, "Maintenance", 1) > 0 Then - supplyType = "Maintenance" - End If - - ' Extract color/identifier (first word before supply type) - If supplyType <> "" Then - colorPos = InStr(1, lookupName, supplyType, 1) - If colorPos > 1 Then - primaryWord = Trim(Left(lookupName, colorPos - 1)) - End If - End If - - ' Search all keys for matching type and color - For Each partKey In partNumbers.Keys - If InStr(1, partKey, "Part Number", 1) > 0 Then - ' Must match supply type - typeMatches = False - If supplyType <> "" Then - typeMatches = (InStr(1, partKey, supplyType, 1) > 0) Or (InStr(1, partKey, "Cartridge", 1) > 0) - Else - ' For items without obvious type, just look for any match - typeMatches = True - End If - - ' Must match color/identifier if present - colorMatches = True - If primaryWord <> "" Then - colorMatches = (InStr(1, partKey, primaryWord, 1) > 0) - End If - - If typeMatches And colorMatches Then - partNumber = partNumbers(partKey) - foundMatch = True - Exit For - End If - End If - Next - End If - End If - - ' Get marketing name for this part number - marketingName = GetMarketingName(partNumber) - - If marketingName <> "" Then - ' Show marketing name prominently with OEM number in smaller text - displayPartNumber = "" & Server.HTMLEncode(marketingName) & "
" & Server.HTMLEncode(partNumber) & "" - Else - ' No mapping found, just show OEM number - displayPartNumber = Server.HTMLEncode(partNumber) - End If - - ' Calculate urgency score for sorting - ' For regular supplies: lower % = higher urgency (5% = 95 urgency) - ' For waste: higher % = higher urgency (95% = 95 urgency) - If isWasteItem Then - urgencyScore = numericValue - Else - urgencyScore = 100 - numericValue - End If - - ' Store alert data for later sorting - alertItem = Array( _ - urgencyScore, _ - vendor, _ - printerid, _ - printerwindowsname, _ - machineid, _ - machinenumber, _ - modelnumber, _ - numericValue, _ - statusColor, _ - displayPartNumber, _ - itemName _ - ) - - alertItems(alertCount) = alertItem - alertCount = alertCount + 1 - End If - - ' Move to next item - currentPos = itemEnd + 1 - Loop - End If - End If - End If - - rs.MoveNext - Wend - - ' Sort alerts by urgency (highest urgency first = most critical) - ' Simple bubble sort with error handling - On Error Resume Next - If alertCount > 1 Then - For i = 0 To alertCount - 2 - For j = 0 To alertCount - i - 2 - ' alertItems(j)(0) is the urgency score - If Not IsEmpty(alertItems(j)) And Not IsEmpty(alertItems(j + 1)) Then - If CDbl(alertItems(j)(0)) < CDbl(alertItems(j + 1)(0)) Then - ' Swap items - tempAlert = alertItems(j) - alertItems(j) = alertItems(j + 1) - alertItems(j + 1) = tempAlert - End If - End If - Next - Next - End If - - ' Output sorted alerts - If alertCount > 0 Then - lowSuppliesFound = True - For k = 0 To alertCount - 1 - If Not IsEmpty(alertItems(k)) And IsArray(alertItems(k)) Then - outputItem = alertItems(k) - ' Array indices: 0=urgencyScore, 1=vendor, 2=printerid, 3=printerwindowsname, - ' 4=machineid, 5=machinenumber, 6=modelnumber, 7=numericValue, - ' 8=statusColor, 9=displayPartNumber, 10=itemName - - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - Response.Write("") - End If - Next - End If - On Error Goto 0 - - If Not lowSuppliesFound Then - Response.Write("") - End If - - objConn.Close -%> - -
PrinterLocationModelLevelPart Number
") - ' Response.Write("DEBUG (" & ipaddress & "): Scanned " & debugItemCount & " items | ") - ' Response.Write("First 10: " & Server.HTMLEncode(debugAllItems) & "
") - ' If debugPartNumbers <> "" Then - ' Response.Write("Part Numbers Found: " & Server.HTMLEncode(debugPartNumbers)) - ' Else - ' Response.Write("No part numbers found!") - ' End If - ' Response.Write("
" & Server.HTMLEncode(outputItem(3)) & "" & Server.HTMLEncode(outputItem(5)) & "" & Server.HTMLEncode(outputItem(6)) & "" & Round(CDbl(outputItem(7)), 1) & "%" & outputItem(9) & "
") - Response.Write("
") - Response.Write("No supply issues found - All printers have adequate supplies") - Response.Write("
-
- -
-
-
-
- - - -
- - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/updatedevice_direct.asp.backup-20251027 b/updatedevice_direct.asp.backup-20251027 deleted file mode 100644 index 73e0968..0000000 --- a/updatedevice_direct.asp.backup-20251027 +++ /dev/null @@ -1,223 +0,0 @@ - -<% - ' Get form data - Dim pcid, pcstatusid, pctypeid, hostname, modelnumberid, machinenumber, isactive - - pcid = Trim(Request.Form("pcid")) - pcstatusid = Trim(Request.Form("pcstatusid")) - pctypeid = Trim(Request.Form("pctypeid")) - hostname = Trim(Request.Form("hostname")) - modelnumberid = Trim(Request.Form("modelnumberid")) - machinenumber = Trim(Request.Form("machinenumber")) - isactive = Trim(Request.Form("isactive")) - - ' Get form inputs for new model - Dim newmodelnumber, newvendorid - newmodelnumber = Trim(Request.Form("newmodelnumber")) - newvendorid = Trim(Request.Form("newvendorid")) - - ' Get form inputs for new vendor - Dim newvendorname - newvendorname = Trim(Request.Form("newvendorname")) - - ' Validate required ID fields - If Not IsNumeric(pcid) Or CLng(pcid) < 1 Then - Response.Write("Invalid PC ID") - objConn.Close - Response.End - End If - - If Not IsNumeric(pcstatusid) Or CLng(pcstatusid) < 1 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=REQUIRED_FIELD") - objConn.Close - Response.End - End If - - ' Verify the PC exists - Dim checkSQL, rsCheck - checkSQL = "SELECT COUNT(*) as cnt FROM pc WHERE pcid = " & CLng(pcid) - Set rsCheck = objConn.Execute(checkSQL) - If Not rsCheck.EOF Then - If CLng(rsCheck("cnt")) = 0 Then - rsCheck.Close - objConn.Close - Response.Redirect("default.asp") - Response.End - End If - End If - rsCheck.Close - - ' Set isactive: if checkbox not checked, it won't be in form data - If isactive = "1" Then - isactive = 1 - Else - isactive = 0 - End If - - ' Validate optional ID fields - allow "new" as a valid value for model - If pctypeid <> "" Then - If Not IsNumeric(pctypeid) Or CLng(pctypeid) < 1 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=INVALID_ID") - objConn.Close - Response.End - End If - End If - - If modelnumberid <> "" And modelnumberid <> "new" Then - If Not IsNumeric(modelnumberid) Or CLng(modelnumberid) < 1 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=INVALID_ID") - objConn.Close - Response.End - End If - End If - - ' Handle new model creation - If modelnumberid = "new" Then - If Len(newmodelnumber) = 0 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=REQUIRED_FIELD") - objConn.Close - Response.End - End If - - If Len(newvendorid) = 0 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=REQUIRED_FIELD") - objConn.Close - Response.End - End If - - If Len(newmodelnumber) > 50 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - ' Handle new vendor creation (nested) - If newvendorid = "new" Then - If Len(newvendorname) = 0 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=REQUIRED_FIELD") - objConn.Close - Response.End - End If - - If Len(newvendorname) > 50 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - ' Escape single quotes - Dim escapedVendorName - escapedVendorName = Replace(newvendorname, "'", "''") - - ' Insert new vendor (with ispc=1) - Dim sqlNewVendor - sqlNewVendor = "INSERT INTO vendors (vendor, isactive, isprinter, ispc, ismachine) VALUES ('" & escapedVendorName & "', 1, 0, 1, 0)" - - On Error Resume Next - objConn.Execute sqlNewVendor - - If Err.Number <> 0 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=db&msg=" & Server.URLEncode(Err.Description)) - objConn.Close - Response.End - End If - - ' Get the newly created vendor ID - Dim rsNewVendor - Set rsNewVendor = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newvendorid = CLng(rsNewVendor("newid")) - rsNewVendor.Close - Set rsNewVendor = Nothing - On Error Goto 0 - End If - - ' Escape single quotes for model - Dim escapedModelNumber - escapedModelNumber = Replace(newmodelnumber, "'", "''") - - ' Insert new model - Dim sqlNewModel - sqlNewModel = "INSERT INTO models (modelnumber, vendorid, isactive) VALUES ('" & escapedModelNumber & "', " & newvendorid & ", 1)" - - On Error Resume Next - objConn.Execute sqlNewModel - - If Err.Number <> 0 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=db&msg=" & Server.URLEncode(Err.Description)) - objConn.Close - Response.End - End If - - ' Get the newly created model ID - Dim rsNewModel - Set rsNewModel = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - modelnumberid = CLng(rsNewModel("newid")) - rsNewModel.Close - Set rsNewModel = Nothing - On Error Goto 0 - End If - - ' Validate field lengths - If hostname <> "" And Len(hostname) > 255 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - If machinenumber <> "" And Len(machinenumber) > 50 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - ' Escape quotes - hostname = Replace(hostname, "'", "''") - machinenumber = Replace(machinenumber, "'", "''") - - ' Build UPDATE query dynamically - Dim updateSQL - updateSQL = "UPDATE pc SET pcstatusid = " & pcstatusid & ", isactive = " & isactive & ", " - - ' Add optional fields - If pctypeid <> "" Then - updateSQL = updateSQL & "pctypeid = " & pctypeid & ", " - Else - updateSQL = updateSQL & "pctypeid = NULL, " - End If - - If hostname <> "" Then - updateSQL = updateSQL & "hostname = '" & hostname & "', " - Else - updateSQL = updateSQL & "hostname = NULL, " - End If - - If modelnumberid <> "" Then - updateSQL = updateSQL & "modelnumberid = " & modelnumberid & ", " - Else - updateSQL = updateSQL & "modelnumberid = NULL, " - End If - - If machinenumber <> "" Then - updateSQL = updateSQL & "machinenumber = '" & machinenumber & "', " - Else - updateSQL = updateSQL & "machinenumber = NULL, " - End If - - ' Add lastupdated timestamp and WHERE clause - updateSQL = updateSQL & "lastupdated = NOW() WHERE pcid = " & pcid - - ' Execute update - On Error Resume Next - objConn.Execute updateSQL - - If Err.Number = 0 Then - objConn.Close - ' Success - redirect back to scan page ready for next scan - Response.Redirect("./adddevice.asp") - Else - Dim errMsg - errMsg = Err.Description - objConn.Close - Response.Redirect("./editdevice.asp?pcid=" & pcid & "&error=db&msg=" & Server.URLEncode(errMsg)) - End If -%> diff --git a/updatedevice_direct.asp.backup-20251114 b/updatedevice_direct.asp.backup-20251114 deleted file mode 100644 index 29f870a..0000000 --- a/updatedevice_direct.asp.backup-20251114 +++ /dev/null @@ -1,230 +0,0 @@ -<% -'============================================================================= -' FILE: updatedevice_direct.asp -' PURPOSE: Update PC/device with optional vendor and model creation -' SECURITY: Parameterized queries, HTML encoding, input validation -' UPDATED: 2025-10-27 - Migrated to secure patterns -'============================================================================= -%> - -<% - ' Get form data - Dim pcid, machinestatusid, pctypeid, hostname, modelnumberid, machinenumber, isactive - - pcid = Trim(Request.Form("pcid")) - machinestatusid = Trim(Request.Form("machinestatusid")) - pctypeid = Trim(Request.Form("pctypeid")) - hostname = Trim(Request.Form("hostname")) - modelnumberid = Trim(Request.Form("modelnumberid")) - machinenumber = Trim(Request.Form("machinenumber")) - isactive = Trim(Request.Form("isactive")) - - ' Get form inputs for new model - Dim newmodelnumber, newvendorid - newmodelnumber = Trim(Request.Form("newmodelnumber")) - newvendorid = Trim(Request.Form("newvendorid")) - - ' Get form inputs for new vendor - Dim newvendorname - newvendorname = Trim(Request.Form("newvendorname")) - - ' Validate required ID fields - If Not IsNumeric(pcid) Or CLng(pcid) < 1 Then - Response.Write("Invalid PC ID") - objConn.Close - Response.End - End If - - If Not IsNumeric(machinestatusid) Or CLng(machinestatusid) < 1 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=REQUIRED_FIELD") - objConn.Close - Response.End - End If - - ' Set isactive: if checkbox not checked, it won't be in form data - If isactive = "1" Then - isactive = 1 - Else - isactive = 0 - End If - - ' Validate optional ID fields - allow "new" as a valid value for model - If pctypeid <> "" Then - If Not IsNumeric(pctypeid) Or CLng(pctypeid) < 1 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=INVALID_ID") - objConn.Close - Response.End - End If - End If - - If modelnumberid <> "" And modelnumberid <> "new" Then - If Not IsNumeric(modelnumberid) Or CLng(modelnumberid) < 1 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=INVALID_ID") - objConn.Close - Response.End - End If - End If - - ' Handle new model creation - If modelnumberid = "new" Then - If Len(newmodelnumber) = 0 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=REQUIRED_FIELD") - objConn.Close - Response.End - End If - - If Len(newvendorid) = 0 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=REQUIRED_FIELD") - objConn.Close - Response.End - End If - - If Len(newmodelnumber) > 50 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - ' Handle new vendor creation (nested) - If newvendorid = "new" Then - If Len(newvendorname) = 0 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=REQUIRED_FIELD") - objConn.Close - Response.End - End If - - If Len(newvendorname) > 50 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - ' Insert new vendor using parameterized query (with ispc=1) - Dim sqlNewVendor, cmdNewVendor - sqlNewVendor = "INSERT INTO vendors (vendor, isactive, isprinter, ispc, ismachine) VALUES (?, 1, 0, 1, 0)" - Set cmdNewVendor = Server.CreateObject("ADODB.Command") - cmdNewVendor.ActiveConnection = objConn - cmdNewVendor.CommandText = sqlNewVendor - cmdNewVendor.CommandType = 1 - cmdNewVendor.Parameters.Append cmdNewVendor.CreateParameter("@vendor", 200, 1, 50, newvendorname) - - On Error Resume Next - cmdNewVendor.Execute - - If Err.Number <> 0 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=db&msg=" & Server.URLEncode(Server.HTMLEncode(Err.Description))) - Set cmdNewVendor = Nothing - objConn.Close - Response.End - End If - - ' Get the newly created vendor ID - Dim rsNewVendor - Set rsNewVendor = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newvendorid = CLng(rsNewVendor("newid")) - rsNewVendor.Close - Set rsNewVendor = Nothing - Set cmdNewVendor = Nothing - On Error Goto 0 - End If - - ' Insert new model using parameterized query - Dim sqlNewModel, cmdNewModel - sqlNewModel = "INSERT INTO models (modelnumber, vendorid, isactive) VALUES (?, ?, 1)" - Set cmdNewModel = Server.CreateObject("ADODB.Command") - cmdNewModel.ActiveConnection = objConn - cmdNewModel.CommandText = sqlNewModel - cmdNewModel.CommandType = 1 - cmdNewModel.Parameters.Append cmdNewModel.CreateParameter("@modelnumber", 200, 1, 50, newmodelnumber) - cmdNewModel.Parameters.Append cmdNewModel.CreateParameter("@vendorid", 3, 1, , CLng(newvendorid)) - - On Error Resume Next - cmdNewModel.Execute - - If Err.Number <> 0 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=db&msg=" & Server.URLEncode(Server.HTMLEncode(Err.Description))) - Set cmdNewModel = Nothing - objConn.Close - Response.End - End If - - ' Get the newly created model ID - Dim rsNewModel - Set rsNewModel = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - modelnumberid = CLng(rsNewModel("newid")) - rsNewModel.Close - Set rsNewModel = Nothing - Set cmdNewModel = Nothing - On Error Goto 0 - End If - - ' Validate field lengths - If hostname <> "" And Len(hostname) > 255 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - If machinenumber <> "" And Len(machinenumber) > 50 Then - Response.Redirect("editdevice.asp?pcid=" & pcid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - ' Build UPDATE query using parameterized query - Dim updateSQL, cmdUpdate - updateSQL = "UPDATE machines SET machinestatusid = ?, isactive = ?, pctypeid = ?, hostname = ?, modelnumberid = ?, machinenumber = ?, lastupdated = NOW() WHERE machineid = ? AND pctypeid IS NOT NULL" - Set cmdUpdate = Server.CreateObject("ADODB.Command") - cmdUpdate.ActiveConnection = objConn - cmdUpdate.CommandText = updateSQL - cmdUpdate.CommandType = 1 - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@machinestatusid", 3, 1, , CLng(machinestatusid)) - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@isactive", 3, 1, , isactive) - - ' Handle optional pctypeid - If pctypeid <> "" Then - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@pctypeid", 3, 1, , CLng(pctypeid)) - Else - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@pctypeid", 3, 1, , Null) - End If - - ' Handle optional hostname - If hostname <> "" Then - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@hostname", 200, 1, 255, hostname) - Else - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@hostname", 200, 1, 255, Null) - End If - - ' Handle optional modelnumberid - If modelnumberid <> "" Then - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@modelnumberid", 3, 1, , CLng(modelnumberid)) - Else - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@modelnumberid", 3, 1, , Null) - End If - - ' Handle optional machinenumber - If machinenumber <> "" Then - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@machinenumber", 200, 1, 50, machinenumber) - Else - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@machinenumber", 200, 1, 50, Null) - End If - - cmdUpdate.Parameters.Append cmdUpdate.CreateParameter("@machineid", 3, 1, , CLng(pcid)) - - ' Execute update - On Error Resume Next - cmdUpdate.Execute - - If Err.Number = 0 Then - Set cmdUpdate = Nothing - objConn.Close - ' Success - redirect back to scan page ready for next scan - Response.Redirect("./adddevice.asp") - Else - Dim errMsg - errMsg = Server.HTMLEncode(Err.Description) - Set cmdUpdate = Nothing - objConn.Close - Response.Redirect("./editdevice.asp?pcid=" & pcid & "&error=db&msg=" & Server.URLEncode(errMsg)) - End If -%> diff --git a/updatelink_direct.asp.backup-20251027 b/updatelink_direct.asp.backup-20251027 deleted file mode 100644 index c1b8e0a..0000000 --- a/updatelink_direct.asp.backup-20251027 +++ /dev/null @@ -1,227 +0,0 @@ - -<% -' Get form inputs for KB article -Dim linkid, linkurl, shortdescription, keywords, appid -linkid = Trim(Request.Form("linkid")) -linkurl = Trim(Request.Form("linkurl")) -shortdescription = Trim(Request.Form("shortdescription")) -keywords = Trim(Request.Form("keywords")) -appid = Trim(Request.Form("appid")) - -' Get form inputs for new topic -Dim newappname, newappdescription, newsupportteamid -Dim newapplicationnotes, newinstallpath, newdocumentationpath, newisactive -newappname = Trim(Request.Form("newappname")) -newappdescription = Trim(Request.Form("newappdescription")) -newsupportteamid = Trim(Request.Form("newsupportteamid")) -newapplicationnotes = Trim(Request.Form("newapplicationnotes")) -newinstallpath = Trim(Request.Form("newinstallpath")) -newdocumentationpath = Trim(Request.Form("newdocumentationpath")) -newisactive = Request.Form("newisactive") - -' Get form inputs for new support team -Dim newsupportteamname, newsupportteamurl, newappownerid -newsupportteamname = Trim(Request.Form("newsupportteamname")) -newsupportteamurl = Trim(Request.Form("newsupportteamurl")) -newappownerid = Trim(Request.Form("newappownerid")) - -' Get form inputs for new app owner -Dim newappownername, newappownersso -newappownername = Trim(Request.Form("newappownername")) -newappownersso = Trim(Request.Form("newappownersso")) - -' Basic validation -If Not IsNumeric(linkid) Or CLng(linkid) < 1 Then - Response.Write("Invalid link ID") - objConn.Close - Response.End -End If - -If Len(linkurl) = 0 Or Len(shortdescription) = 0 Or Len(appid) = 0 Then - Response.Write("Required fields missing") - objConn.Close - Response.End -End If - -If Len(linkurl) > 2000 Or Len(shortdescription) > 500 Or Len(keywords) > 500 Then - Response.Write("Field length exceeded") - objConn.Close - Response.End -End If - -' Handle new topic creation -If appid = "new" Then - If Len(newappname) = 0 Then - Response.Write("New topic name is required") - objConn.Close - Response.End - End If - - If Len(newsupportteamid) = 0 Then - Response.Write("Support team is required for new topic") - objConn.Close - Response.End - End If - - ' Validate field lengths for new topic - If Len(newappname) > 50 Or Len(newappdescription) > 255 Or Len(newapplicationnotes) > 512 Or Len(newinstallpath) > 255 Or Len(newdocumentationpath) > 512 Then - Response.Write("New topic field length exceeded") - objConn.Close - Response.End - End If - - ' Handle new support team creation (nested) - If newsupportteamid = "new" Then - If Len(newsupportteamname) = 0 Then - Response.Write("New support team name is required") - objConn.Close - Response.End - End If - - If Len(newappownerid) = 0 Then - Response.Write("App owner is required for new support team") - objConn.Close - Response.End - End If - - If Len(newsupportteamname) > 50 Or Len(newsupportteamurl) > 512 Then - Response.Write("New support team field length exceeded") - objConn.Close - Response.End - End If - - ' Handle new app owner creation (doubly nested) - If newappownerid = "new" Then - If Len(newappownername) = 0 Or Len(newappownersso) = 0 Then - Response.Write("App owner name and SSO are required") - objConn.Close - Response.End - End If - - If Len(newappownername) > 50 Or Len(newappownersso) > 255 Then - Response.Write("App owner field length exceeded") - objConn.Close - Response.End - End If - - ' Escape single quotes for new app owner - Dim escapedOwnerName, escapedOwnerSSO - escapedOwnerName = Replace(newappownername, "'", "''") - escapedOwnerSSO = Replace(newappownersso, "'", "''") - - ' Insert new app owner - Dim sqlNewOwner - sqlNewOwner = "INSERT INTO appowners (appowner, sso, isactive) " & _ - "VALUES ('" & escapedOwnerName & "', '" & escapedOwnerSSO & "', 1)" - - On Error Resume Next - objConn.Execute sqlNewOwner - - If Err.Number <> 0 Then - Response.Write("Error creating new app owner: " & Err.Description) - objConn.Close - Response.End - End If - - ' Get the newly created app owner ID - Dim rsNewOwner - Set rsNewOwner = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newappownerid = rsNewOwner("newid") - rsNewOwner.Close - Set rsNewOwner = Nothing - On Error Goto 0 - End If - - ' Escape single quotes for new support team - Dim escapedTeamName, escapedTeamURL - escapedTeamName = Replace(newsupportteamname, "'", "''") - escapedTeamURL = Replace(newsupportteamurl, "'", "''") - - ' Insert new support team with selected or newly created app owner - Dim sqlNewTeam - sqlNewTeam = "INSERT INTO supportteams (teamname, teamurl, appownerid, isactive) " & _ - "VALUES ('" & escapedTeamName & "', '" & escapedTeamURL & "', " & newappownerid & ", 1)" - - On Error Resume Next - objConn.Execute sqlNewTeam - - If Err.Number <> 0 Then - Response.Write("Error creating new support team: " & Err.Description) - objConn.Close - Response.End - End If - - ' Get the newly created support team ID - Dim rsNewTeam - Set rsNewTeam = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - newsupportteamid = rsNewTeam("newid") - rsNewTeam.Close - Set rsNewTeam = Nothing - On Error Goto 0 - End If - - ' Escape single quotes for new topic - Dim escapedAppName, escapedAppDesc, escapedAppNotes, escapedInstallPath, escapedDocPath - escapedAppName = Replace(newappname, "'", "''") - escapedAppDesc = Replace(newappdescription, "'", "''") - escapedAppNotes = Replace(newapplicationnotes, "'", "''") - escapedInstallPath = Replace(newinstallpath, "'", "''") - escapedDocPath = Replace(newdocumentationpath, "'", "''") - - ' Convert isactive checkbox - Dim isActiveValue - If newisactive = "1" Then - isActiveValue = 1 - Else - isActiveValue = 0 - End If - - ' Insert new application/topic - Dim sqlNewApp - sqlNewApp = "INSERT INTO applications (appname, appdescription, supportteamid, applicationnotes, installpath, documentationpath, isactive, isinstallable, ishidden, isprinter, islicenced) " & _ - "VALUES ('" & escapedAppName & "', '" & escapedAppDesc & "', " & newsupportteamid & ", '" & escapedAppNotes & "', '" & escapedInstallPath & "', '" & escapedDocPath & "', " & isActiveValue & ", 0, 0, 0, 0)" - - On Error Resume Next - objConn.Execute sqlNewApp - - If Err.Number <> 0 Then - Response.Write("Error creating new topic: " & Err.Description) - objConn.Close - Response.End - End If - - ' Get the newly created topic ID - Dim rsNewApp - Set rsNewApp = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - appid = rsNewApp("newid") - rsNewApp.Close - Set rsNewApp = Nothing - On Error Goto 0 -End If - -' Escape single quotes for KB article -linkurl = Replace(linkurl, "'", "''") -shortdescription = Replace(shortdescription, "'", "''") -keywords = Replace(keywords, "'", "''") - -' Build UPDATE statement -Dim strSQL -strSQL = "UPDATE knowledgebase SET " & _ - "linkurl = '" & linkurl & "', " & _ - "shortdescription = '" & shortdescription & "', " & _ - "keywords = '" & keywords & "', " & _ - "appid = " & appid & ", " & _ - "lastupdated = NOW() " & _ - "WHERE linkid = " & linkid - -On Error Resume Next -objConn.Execute strSQL - -If Err.Number = 0 Then - objConn.Close - Response.Redirect("displayknowledgearticle.asp?linkid=" & linkid & "&status=updated") -Else - objConn.Close - Response.Redirect("displayknowledgearticle.asp?linkid=" & linkid & "&status=error&msg=" & Server.URLEncode("Error: " & Err.Description)) -End If -%> diff --git a/updatenotification_direct.asp.backup-20251027 b/updatenotification_direct.asp.backup-20251027 deleted file mode 100644 index 02d1b90..0000000 --- a/updatenotification_direct.asp.backup-20251027 +++ /dev/null @@ -1,117 +0,0 @@ - -<% -' Get form inputs -Dim notificationid, notification, ticketnumber, starttime, endtime, isactive, isshopfloor, notificationtypeid, businessunitid -notificationid = Trim(Request.Form("notificationid")) -notification = Trim(Request.Form("notification")) -ticketnumber = Trim(Request.Form("ticketnumber")) -starttime = Trim(Request.Form("starttime")) -endtime = Trim(Request.Form("endtime")) -notificationtypeid = Trim(Request.Form("notificationtypeid")) -businessunitid = Trim(Request.Form("businessunitid")) - -' Handle checkbox - if the hidden field is submitted but checkbox isn't, it means unchecked -If Request.Form("isactive_submitted") = "1" Then - If Request.Form("isactive") = "1" Then - isactive = 1 - Else - isactive = 0 - End If -Else - ' Fallback for backward compatibility - If Request.Form("isactive") = "" Then - isactive = 0 - Else - isactive = 1 - End If -End If - -' Handle isshopfloor checkbox - same pattern as isactive -If Request.Form("isshopfloor_submitted") = "1" Then - If Request.Form("isshopfloor") = "1" Then - isshopfloor = 1 - Else - isshopfloor = 0 - End If -Else - ' Fallback for backward compatibility - If Request.Form("isshopfloor") = "" Then - isshopfloor = 0 - Else - isshopfloor = 1 - End If -End If - -' Validate -If Not IsNumeric(notificationid) Or CLng(notificationid) < 1 Then - Response.Write("Invalid notification ID") - objConn.Close - Response.End -End If - -' Default to TBD if no type selected -If notificationtypeid = "" Or Not IsNumeric(notificationtypeid) Then - notificationtypeid = "1" -End If - -' Validate required fields (endtime is now optional) -If Len(notification) = 0 Or Len(starttime) = 0 Then - Response.Write("Required fields missing") - objConn.Close - Response.End -End If - -If Len(notification) > 500 Or Len(ticketnumber) > 50 Then - Response.Write("Field length exceeded") - objConn.Close - Response.End -End If - -' Escape quotes -notification = Replace(notification, "'", "''") -ticketnumber = Replace(ticketnumber, "'", "''") - -' Convert datetime format for starttime -starttime = Replace(starttime, "T", " ") & ":00" - -' Handle optional endtime - leave as NULL if blank (indefinite) -Dim strSQL, endtimeSQL, businessunitSQL -If Len(endtime) = 0 Then - ' No end date - store as NULL for indefinite notifications - endtimeSQL = "NULL" -Else - ' End date specified - convert format and wrap in quotes - endtime = Replace(endtime, "T", " ") & ":00" - endtimeSQL = "'" & endtime & "'" -End If - -' Handle optional businessunitid - NULL means applies to all business units -If businessunitid = "" Or Not IsNumeric(businessunitid) Then - businessunitSQL = "NULL" -Else - businessunitSQL = businessunitid -End If - -' UPDATE -strSQL = "UPDATE notifications SET " & _ - "notificationtypeid = " & notificationtypeid & ", " & _ - "businessunitid = " & businessunitSQL & ", " & _ - "notification = '" & notification & "', " & _ - "ticketnumber = '" & ticketnumber & "', " & _ - "starttime = '" & starttime & "', " & _ - "endtime = " & endtimeSQL & ", " & _ - "isactive = " & isactive & ", " & _ - "isshopfloor = " & isshopfloor & " " & _ - "WHERE notificationid = " & notificationid - -On Error Resume Next -objConn.Execute strSQL - -If Err.Number = 0 Then - objConn.Close - Response.Redirect("displaynotifications.asp") -Else - Response.Write("Error: " & Err.Description) - objConn.Close -End If -%> diff --git a/updatepc_direct.asp.backup-20251027 b/updatepc_direct.asp.backup-20251027 deleted file mode 100644 index 5ce71c7..0000000 --- a/updatepc_direct.asp.backup-20251027 +++ /dev/null @@ -1,193 +0,0 @@ - -<% - ' Get form data - Dim pcid, vendorid, modelnumberid, machinenumber - - pcid = Trim(Request.Form("pcid")) - vendorid = Trim(Request.Form("vendorid")) - modelnumberid = Trim(Request.Form("modelid")) - machinenumber = Trim(Request.Form("machinenumber")) - - ' Get form inputs for new model - Dim newmodelnumber, newvendorid - newmodelnumber = Trim(Request.Form("newpcmodelnumber")) - newvendorid = Trim(Request.Form("newpcmodelvendorid")) - - ' Get form inputs for new vendor - Dim newvendorname - newvendorname = Trim(Request.Form("newpcvendorname")) - - ' Validate required ID fields - If Not IsNumeric(pcid) Or CLng(pcid) < 1 Then - Response.Write("Invalid PC ID") - objConn.Close - Response.End - End If - - ' Verify the PC exists - Dim checkSQL, rsCheck - checkSQL = "SELECT COUNT(*) as cnt FROM pc WHERE pcid = " & CLng(pcid) - Set rsCheck = objConn.Execute(checkSQL) - If Not rsCheck.EOF Then - If CLng(rsCheck("cnt")) = 0 Then - rsCheck.Close - objConn.Close - Response.Redirect("displaypcs.asp") - Response.End - End If - End If - rsCheck.Close - - ' Validate optional ID fields - allow "new" as a valid value for model and vendor - If vendorid <> "" And vendorid <> "new" Then - If Not IsNumeric(vendorid) Or CLng(vendorid) < 1 Then - Response.Redirect("displaypc.asp?pcid=" & pcid & "&error=INVALID_ID") - objConn.Close - Response.End - End If - End If - - If modelnumberid <> "" And modelnumberid <> "new" Then - If Not IsNumeric(modelnumberid) Or CLng(modelnumberid) < 1 Then - Response.Redirect("displaypc.asp?pcid=" & pcid & "&error=INVALID_ID") - objConn.Close - Response.End - End If - End If - - ' Handle new vendor creation - If vendorid = "new" Then - If Len(newvendorname) = 0 Then - Response.Redirect("displaypc.asp?pcid=" & pcid & "&error=REQUIRED_FIELD") - objConn.Close - Response.End - End If - - If Len(newvendorname) > 50 Then - Response.Redirect("displaypc.asp?pcid=" & pcid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - ' Escape single quotes - Dim escapedVendorName - escapedVendorName = Replace(newvendorname, "'", "''") - - ' Insert new vendor (with ispc=1) - Dim sqlNewVendor - sqlNewVendor = "INSERT INTO vendors (vendor, isactive, isprinter, ispc, ismachine) VALUES ('" & escapedVendorName & "', 1, 0, 1, 0)" - - On Error Resume Next - objConn.Execute sqlNewVendor - - If Err.Number <> 0 Then - Response.Redirect("displaypc.asp?pcid=" & pcid & "&error=db&msg=" & Server.URLEncode(Err.Description)) - objConn.Close - Response.End - End If - - ' Get the newly created vendor ID - Dim rsNewVendor - Set rsNewVendor = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - vendorid = CLng(rsNewVendor("newid")) - rsNewVendor.Close - Set rsNewVendor = Nothing - On Error Goto 0 - End If - - ' Handle new model creation - If modelnumberid = "new" Then - If Len(newmodelnumber) = 0 Then - Response.Redirect("displaypc.asp?pcid=" & pcid & "&error=REQUIRED_FIELD") - objConn.Close - Response.End - End If - - If Len(newvendorid) = 0 Then - Response.Redirect("displaypc.asp?pcid=" & pcid & "&error=REQUIRED_FIELD") - objConn.Close - Response.End - End If - - If Len(newmodelnumber) > 50 Then - Response.Redirect("displaypc.asp?pcid=" & pcid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - ' If vendor was also created new, use that vendor ID - If vendorid <> "" And IsNumeric(vendorid) Then - newvendorid = vendorid - End If - - ' Escape single quotes for model - Dim escapedModelNumber - escapedModelNumber = Replace(newmodelnumber, "'", "''") - - ' Insert new model - Dim sqlNewModel - sqlNewModel = "INSERT INTO models (modelnumber, vendorid, isactive) VALUES ('" & escapedModelNumber & "', " & newvendorid & ", 1)" - - On Error Resume Next - objConn.Execute sqlNewModel - - If Err.Number <> 0 Then - Response.Redirect("displaypc.asp?pcid=" & pcid & "&error=db&msg=" & Server.URLEncode(Err.Description)) - objConn.Close - Response.End - End If - - ' Get the newly created model ID - Dim rsNewModel - Set rsNewModel = objConn.Execute("SELECT LAST_INSERT_ID() AS newid") - modelnumberid = CLng(rsNewModel("newid")) - rsNewModel.Close - Set rsNewModel = Nothing - On Error Goto 0 - End If - - ' Validate machine number length - If machinenumber <> "" And Len(machinenumber) > 50 Then - Response.Redirect("displaypc.asp?pcid=" & pcid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - ' Escape single quotes for machine number - If machinenumber <> "" Then - machinenumber = Replace(machinenumber, "'", "''") - End If - - ' Build UPDATE statement for PC - Dim strSQL - strSQL = "UPDATE pc SET " - - ' Update model if provided - If modelnumberid <> "" And IsNumeric(modelnumberid) Then - strSQL = strSQL & "modelnumberid = " & modelnumberid & ", " - End If - - ' Update machine number - If machinenumber <> "" Then - strSQL = strSQL & "machinenumber = '" & machinenumber & "', " - Else - strSQL = strSQL & "machinenumber = NULL, " - End If - - ' Add lastupdated timestamp - strSQL = strSQL & "lastupdated = NOW() WHERE pcid = " & pcid - - On Error Resume Next - objConn.Execute strSQL - - If Err.Number <> 0 Then - Response.Redirect("displaypc.asp?pcid=" & pcid & "&error=db") - objConn.Close - Response.End - End If - - objConn.Close - - ' Success - redirect back to displaypc - Response.Redirect("./displaypc.asp?pcid=" & pcid) -%> diff --git a/updatesubnet_direct.asp.backup-20251027 b/updatesubnet_direct.asp.backup-20251027 deleted file mode 100644 index 75d5e16..0000000 --- a/updatesubnet_direct.asp.backup-20251027 +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - -
-<% - ' Get form inputs - Dim subnetid, vlan, ipstart, cidr, description, subnettypeid, cidrarray, ipend - - subnetid = Trim(Request.Querystring("subnetid")) - vlan = Trim(Request.Form("vlan")) - ipstart = Trim(Request.Form("ipstart")) - cidr = Trim(Request.Form("cidr")) - description = Trim(Request.Form("description")) - subnettypeid = Trim(Request.Form("subnettypeid")) - - ' Validate required ID fields - If Not IsNumeric(subnetid) Or CLng(subnetid) < 1 Then - Response.Write("Invalid subnet ID") - objConn.Close - Response.End - End If - - ' Verify the subnet exists - Dim checkSQL, rsCheck - checkSQL = "SELECT COUNT(*) as cnt FROM subnets WHERE subnetid = " & subnetid - Set rsCheck = objConn.Execute(checkSQL) - - Dim subnetExists - subnetExists = False - If Not rsCheck.EOF Then - If Not IsNull(rsCheck("cnt")) Then - If CLng(rsCheck("cnt")) > 0 Then - subnetExists = True - End If - End If - End If - rsCheck.Close - Set rsCheck = Nothing - - If Not subnetExists Then - Response.Redirect("displaysubnets.asp") - objConn.Close - Response.End - End If - - ' Validate required fields - If vlan = "" Or ipstart = "" Or cidr = "" Or subnettypeid = "" Then - Response.Redirect("displaysubnet.asp?subnetid=" & subnetid & "&error=REQUIRED_FIELD") - objConn.Close - Response.End - End If - - ' Validate VLAN is numeric - If Not IsNumeric(vlan) Then - Response.Redirect("displaysubnet.asp?subnetid=" & subnetid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - ' Basic IP address validation - If Len(ipstart) < 7 Or Len(ipstart) > 15 Then - Response.Redirect("displaysubnet.asp?subnetid=" & subnetid & "&error=INVALID_IP") - objConn.Close - Response.End - End If - - ' Validate subnet type ID - If Not IsNumeric(subnettypeid) Or CLng(subnettypeid) < 1 Then - Response.Redirect("displaysubnet.asp?subnetid=" & subnetid & "&error=INVALID_ID") - objConn.Close - Response.End - End If - - ' Parse CIDR value (expected format: "cidr,ipend") - If InStr(cidr, ",") = 0 Then - Response.Redirect("displaysubnet.asp?subnetid=" & subnetid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - cidrarray = Split(cidr, ",") - If UBound(cidrarray) < 1 Then - Response.Redirect("displaysubnet.asp?subnetid=" & subnetid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - ipend = Trim(cidrarray(1)) - cidr = Trim(cidrarray(0)) - - ' Remove leading slash if present (CIDR comes as "/24" format) - If Left(cidr, 1) = "/" Then - cidr = Mid(cidr, 2) - End If - - ' Validate CIDR is numeric (0-32) - If Not IsNumeric(cidr) Then - Response.Redirect("displaysubnet.asp?subnetid=" & subnetid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - If CInt(cidr) < 0 Or CInt(cidr) > 32 Then - Response.Redirect("displaysubnet.asp?subnetid=" & subnetid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - ' Validate ipend is numeric - If Not IsNumeric(ipend) Then - Response.Redirect("displaysubnet.asp?subnetid=" & subnetid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - ' Validate description length - If Len(description) > 500 Then - Response.Redirect("displaysubnet.asp?subnetid=" & subnetid & "&error=INVALID_INPUT") - objConn.Close - Response.End - End If - - ' Escape quotes - description = Replace(description, "'", "''") - ipstart = Replace(ipstart, "'", "''") - - ' Verify subnet type exists - checkSQL = "SELECT COUNT(*) as cnt FROM subnettypes WHERE subnettypeid = " & subnettypeid - Set rsCheck = objConn.Execute(checkSQL) - - Dim typeExists - typeExists = False - If Not rsCheck.EOF Then - If Not IsNull(rsCheck("cnt")) Then - If CLng(rsCheck("cnt")) > 0 Then - typeExists = True - End If - End If - End If - rsCheck.Close - Set rsCheck = Nothing - - If Not typeExists Then - Response.Redirect("displaysubnet.asp?subnetid=" & subnetid & "&error=NOT_FOUND") - objConn.Close - Response.End - End If - - ' Update - Dim strSQL - strSQL = "UPDATE subnets SET vlan = " & vlan & ", ipstart = INET_ATON('" & ipstart & "'), ipend = (INET_ATON('" & ipstart & "') + " & ipend & "), cidr = '" & cidr & "', subnettypeid = " & subnettypeid & ", description = '" & description & "' WHERE subnetid = " & subnetid - - On Error Resume Next - objConn.Execute strSQL - - If Err.Number = 0 Then - objConn.Close - Response.Redirect("./displaysubnet.asp?subnetid=" & subnetid) - Else - Response.Write("Error: " & Err.Description) - objConn.Close - End If -%>