From 49a395c9e2a195db2ea7000974f70da7131741ee Mon Sep 17 00:00:00 2001 From: Alexandre <146840804+alex001x@users.noreply.github.com> Date: Thu, 30 Oct 2025 18:22:36 +0100 Subject: [PATCH 1/3] feature/Add_Project_to_Devices.php --- classes/ProjectMembership.class.php | 11 ++++++++ devices.php | 39 +++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/classes/ProjectMembership.class.php b/classes/ProjectMembership.class.php index c9e3e878a..1a877be40 100644 --- a/classes/ProjectMembership.class.php +++ b/classes/ProjectMembership.class.php @@ -219,5 +219,16 @@ public static function RedactUser( $UserID ) { return; } + + /** + * Remove all direct project associations for a specific Device + * Used before assigning a new project to the device. + */ + public static function RemoveDeviceMemberships( $DeviceID ) { + global $dbh; + + $st = $dbh->prepare("DELETE FROM fac_ProjectMembership WHERE MemberType='Device' AND MemberID=:id"); + $st->execute(array(":id"=>$DeviceID)); + } } ?> diff --git a/devices.php b/devices.php index 26d2e822d..8867745db 100644 --- a/devices.php +++ b/devices.php @@ -682,6 +682,9 @@ function updatedevice($devid){ // Put the device rights back just in case we had someone try to inject them $dev->Rights=$devrights; + + // Capture selected project from POST (if any) + $selectedProjectID=(isset($_POST['ProjectID']))?intval($_POST['ProjectID']):0; // Stupid Cabinet vs CabinetID $dev->Cabinet=$_POST['CabinetID']; // Checkboxes don't work quite like normal inputs @@ -722,6 +725,11 @@ function updatedevice($devid){ }else{ $dev->UpdateDevice(); } + // Update Project association (remove existing, then add if selected) + ProjectMembership::RemoveDeviceMemberships($dev->DeviceID); + if($selectedProjectID>0){ + ProjectMembership::addMember($selectedProjectID,$dev->DeviceID,'Device'); + } break; case 'Delete': $dev->DeleteDevice(); @@ -775,6 +783,15 @@ function updatedevice($devid){ $dev->CreateDevice(); $dev->SetTags($tagarray); + // Update Project association (remove existing, then add if selected) + ProjectMembership::RemoveDeviceMemberships($dev->DeviceID); + if(isset($_POST['ProjectID'])){ + $selectedProjectID=intval($_POST['ProjectID']); + if($selectedProjectID>0){ + ProjectMembership::addMember($selectedProjectID,$dev->DeviceID,'Device'); + } + } + // We've, hopefully, successfully created a new device. Force them to the new device page. header('Location: '.redirect("devices.php?DeviceID=$dev->DeviceID")); exit; @@ -811,6 +828,24 @@ function updatedevice($devid){ $taginsert="\t\ttags: {items: ".json_encode($tags)."},\n"; } + // Get existing project association for this device (direct membership only) + $CurrentProjectID = 0; + if ( $dev->DeviceID > 0 ) { + $st = $dbh->prepare("SELECT ProjectID FROM fac_ProjectMembership WHERE MemberType='Device' AND MemberID=:id ORDER BY ProjectID ASC"); + $st->execute(array(":id"=>$dev->DeviceID)); + if($row = $st->fetch(PDO::FETCH_NUM)){ + $CurrentProjectID = intval($row[0]); + } + } + + // Build project options for the Project select + $projectOptions = ''; + $projList = Projects::getProjectList(); + foreach($projList as $proj){ + $selected = ($proj->ProjectID == $CurrentProjectID) ? ' selected' : ''; + $projectOptions .= "\t\t\t\t\n"; + } + // Since a device exists we're gonna need some additional info, but only if it's not a copy if(!$copy){ // clearing errors for now @@ -1836,6 +1871,10 @@ function setPreferredLayout() { +
+
+
+
From 1f8ef1cf2ce5b2b25cff8055b189404b4bf3121e Mon Sep 17 00:00:00 2001 From: Alexandre <146840804+alex001x@users.noreply.github.com> Date: Thu, 30 Oct 2025 18:56:59 +0100 Subject: [PATCH 2/3] feature/Add_Project_to_Devices.php --- devices.php | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/devices.php b/devices.php index 8867745db..6986c2b42 100644 --- a/devices.php +++ b/devices.php @@ -593,7 +593,8 @@ function updatedevice($devid){ $pwrCords=null; $chassis=""; $copy = false; - $copyerr=__("This device is a copy of an existing device. Remember to set the new location before saving."); +$copyerr=__("This device is a copy of an existing device. Remember to set the new location before saving."); +$CurrentProjectID = 0; // Default: no project selected for new devices $childList=array(); // This page was called from somewhere so let's do stuff. @@ -838,13 +839,7 @@ function updatedevice($devid){ } } - // Build project options for the Project select - $projectOptions = ''; - $projList = Projects::getProjectList(); - foreach($projList as $proj){ - $selected = ($proj->ProjectID == $CurrentProjectID) ? ' selected' : ''; - $projectOptions .= "\t\t\t\t\n"; - } + // Build project options is now handled after this block to also fill on new devices // Since a device exists we're gonna need some additional info, but only if it's not a copy if(!$copy){ @@ -894,15 +889,23 @@ function updatedevice($devid){ } $cab->CabinetID=$dev->Cabinet; $cab->GetCabinet(); - }else{ - /* - * Everything below here will get processed when no DeviceID is present - * aka adding a new device - */ - - // sets install date to today when a new device is being created - $dev->InstallDate=date("Y-m-d"); - } + }else{ + /* + * Everything below here will get processed when no DeviceID is present + * aka adding a new device + */ + + // sets install date to today when a new device is being created + $dev->InstallDate=date("Y-m-d"); + } + + // Build project options for the Project select (always available) + $projectOptions = ''; + $projList = Projects::getProjectList(); + foreach($projList as $proj){ + $selected = ($proj->ProjectID == $CurrentProjectID) ? ' selected' : ''; + $projectOptions .= "\t\t\t\t\n"; + } // We don't want someone accidentally adding a chassis device inside of a chassis slot. if($dev->ParentDevice>0){ From f2158771c77189af1b77a4aced4375173cc54f10 Mon Sep 17 00:00:00 2001 From: Alexandre <146840804+alex001x@users.noreply.github.com> Date: Thu, 30 Oct 2025 19:04:04 +0100 Subject: [PATCH 3/3] feature/Add_Project_to_Devices.php --- devices.php | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/devices.php b/devices.php index 6986c2b42..7892c30f7 100644 --- a/devices.php +++ b/devices.php @@ -2841,16 +2841,17 @@ function linkifyolog(){ }); }); - // Make the cabinet and template selections smart comboboxes if user can write - - $('#CabinetID').combobox(); - $('#TemplateID').combobox(); - $('select[name=ParentDevice]').combobox(); - + // Make the cabinet and template selections smart comboboxes if user can write + + $('#projectid').combobox(); + $('#CabinetID').combobox(); + $('#TemplateID').combobox(); + $('select[name=ParentDevice]').combobox(); + // Hide this for now $('#devicetype-limiter').parent('div').hide();