From 32da1bceea76049d8854612fc1b92631fc83460d Mon Sep 17 00:00:00 2001 From: Neil Lathwood Date: Sun, 22 Jan 2017 09:49:13 +0000 Subject: [PATCH] fix: Changing device type now is persistant (#5529) --- html/pages/device.inc.php | 1 + html/pages/device/edit/device.inc.php | 14 ++++++++++++-- includes/common.php | 2 +- includes/discovery/functions.inc.php | 1 + includes/polling/functions.inc.php | 4 +++- 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/html/pages/device.inc.php b/html/pages/device.inc.php index 93845bbb9b..f19cb873b1 100644 --- a/html/pages/device.inc.php +++ b/html/pages/device.inc.php @@ -22,6 +22,7 @@ if (device_permitted($vars['device']) || $check_device == $vars['device']) { $device = device_by_id_cache($vars['device']); $attribs = get_dev_attribs($device['device_id']); + $device['attribs'] = $attribs; load_os($device); $entity_state = get_dev_entity_state($device['device_id']); diff --git a/html/pages/device/edit/device.inc.php b/html/pages/device/edit/device.inc.php index 6a1a67d447..bdea2734f1 100644 --- a/html/pages/device/edit/device.inc.php +++ b/html/pages/device/edit/device.inc.php @@ -24,17 +24,27 @@ if ($_POST['editing']) { dbUpdate(array('location'=>$override_sysLocation_string), 'devices', '`device_id`=?', array($device['device_id'])); } + if ($device['type'] != $vars['type']) { + $param['type'] = $vars['type']; + $update_type = true; + } + #FIXME needs more sanity checking! and better feedback - $param = array('purpose' => $vars['descr'], 'type' => $vars['type'], 'ignore' => set_numeric($vars['ignore']), 'disabled' => set_numeric($vars['disabled'])); + $param['purpose'] = $vars['descr']; + $param['ignore'] = set_numeric($vars['ignore']); + $param['disabled'] = set_numeric($vars['disabled']); $rows_updated = dbUpdate($param, 'devices', '`device_id` = ?', array($device['device_id'])); if ($rows_updated > 0 || $updated) { + if ($update_type === true) { + set_dev_attrib($device, 'override_device_type', true); + } $update_message = "Device record updated."; $updated = 1; $device = dbFetchRow("SELECT * FROM `devices` WHERE `device_id` = ?", array($device['device_id'])); - } elseif ($rows_updated = '-1') { + } elseif ($rows_updated == 0) { $update_message = "Device record unchanged. No update necessary."; $updated = -1; } else { diff --git a/includes/common.php b/includes/common.php index 71dabc5078..040e846344 100644 --- a/includes/common.php +++ b/includes/common.php @@ -1533,7 +1533,7 @@ function load_os(&$device) } // Set type to a predefined type for the OS if it's not already set - if ($config['os'][$device['os']]['type'] != $device['type']) { + if ($device['attribs']['override_device_type'] != 1 && $config['os'][$device['os']]['type'] != $device['type']) { log_event('Device type changed '.$device['type'].' => '.$config['os'][$device['os']]['type'], $device, 'system'); $device['type'] = $config['os'][$device['os']]['type']; dbUpdate(array('type' => $device['type']), 'devices', 'device_id=?', array($device['device_id'])); diff --git a/includes/discovery/functions.inc.php b/includes/discovery/functions.inc.php index 574618e183..5adbd16627 100644 --- a/includes/discovery/functions.inc.php +++ b/includes/discovery/functions.inc.php @@ -94,6 +94,7 @@ function discover_device($device, $options = null) $valid = array(); // Reset $valid array $attribs = get_dev_attribs($device['device_id']); + $device['attribs'] = $attribs; $device['snmp_max_repeaters'] = $attribs['snmp_max_repeaters']; $device_start = microtime(true); diff --git a/includes/polling/functions.inc.php b/includes/polling/functions.inc.php index 89f4425033..c8f52c6a46 100644 --- a/includes/polling/functions.inc.php +++ b/includes/polling/functions.inc.php @@ -165,9 +165,11 @@ function poll_device($device, $options) { global $config, $device, $polled_devices, $memcache; + $attribs = get_dev_attribs($device['device_id']); + $device['attribs'] = $attribs; + load_os($device); - $attribs = get_dev_attribs($device['device_id']); $device['snmp_max_repeaters'] = $attribs['snmp_max_repeaters']; $device['snmp_max_oid'] = $attribs['snmp_max_oid'];