Fix update_device hostname handling #14435 (#14448)

* Fix device_update hostname handling #14435

* Use Eloquent

* Update Device.php

Co-authored-by: Tony Murray <murraytony@gmail.com>
This commit is contained in:
rhinoau
2022-10-23 04:45:47 +08:00
committed by GitHub
parent e053b9ff7b
commit 6372041d39
2 changed files with 9 additions and 3 deletions

View File

@@ -51,6 +51,7 @@ class Device extends BaseModel
'display',
'icon',
'ip',
'notes',
'os',
'overwrite_ip',
'poller_group',

View File

@@ -1908,7 +1908,12 @@ function update_device(Illuminate\Http\Request $request)
{
$hostname = $request->route('hostname');
// use hostname as device_id if it's all digits
$device_id = ctype_digit($hostname) ? $hostname : getidbyname($hostname);
$device = ctype_digit($hostname) ? Device::find($hostname) : Device::findByHostname($hostname);
if (is_null($device)) {
return api_error(404, "Device $hostname not found");
}
$data = json_decode($request->getContent(), true);
$bad_fields = ['device_id', 'hostname'];
if (empty($data['field'])) {
@@ -1936,7 +1941,7 @@ function update_device(Illuminate\Http\Request $request)
$update[$field] = $field_data;
}
if (dbUpdate($update, 'devices', '`device_id`=?', [$device_id]) >= 0) {
if ($device->fill($update)->save()) {
return api_success_noresult(200, 'Device fields have been updated');
} else {
return api_error(500, 'Device fields failed to be updated');
@@ -1944,7 +1949,7 @@ function update_device(Illuminate\Http\Request $request)
} else {
return api_error(500, 'Device fields failed to be updated as the number of fields (' . count($data['field']) . ') does not match the supplied data (' . count($data['data']) . ')');
}
} elseif (dbUpdate([$data['field'] => $data['data']], 'devices', '`device_id`=?', [$device_id]) >= 0) {
} elseif ($device->fill([$data['field'] => $data['data']])->save()) {
return api_success_noresult(200, 'Device ' . $data['field'] . ' field has been updated');
} else {
return api_error(500, 'Device ' . $data['field'] . ' field failed to be updated');