279 lines
10 KiB
PHP

<?php
/**
* Observium
*
* This file is part of Observium.
*
* @package observium
* @subpackage web
* @copyright (C) Adam Armstrong
*
*/
$ping_skip = get_entity_attrib('device', $device, 'ping_skip');
$override_type_string = get_entity_attrib('device', $device, 'override_type');
$override_type_bool = !empty($override_type_string);
$default_type = $override_type_bool ? $config['os'][$device['os']]['type'] : $device['type'];
$device_types = [];
foreach ($config['device_types'] as $type) {
$device_types[$type['type']] = ['name' => nicecase($type['type']), 'icon' => $type['icon']];
if ($type['type'] == $default_type) {
$device_types[$type['type']]['subtext'] = 'Default';
//$device_types[$type['type']]['class'] = 'error';
}
}
if (!array_key_exists($device['type'], $device_types)) {
$device_types[$device['type']] = ['name' => 'Other', 'icon' => $config['icon']['question']];
}
if ($vars['editing']) {
if ($readonly) {
print_error_permission('You have insufficient permissions to edit settings.');
} else {
print_debug_vars($vars);
$updated = 0;
// Changed sysLocation
$override_sysLocation_bool = $vars['override_sysLocation'];
if (isset($vars['sysLocation'])) {
$override_sysLocation_string = $vars['sysLocation'];
}
if (get_entity_attrib('device', $device, 'override_sysLocation_bool') != $override_sysLocation_bool ||
get_entity_attrib('device', $device, 'override_sysLocation_string') != $override_sysLocation_string) {
$updated = 2;
}
if ($override_sysLocation_bool) {
set_entity_attrib('device', $device, 'override_sysLocation_bool', '1', $device['device_id']);
} else {
del_entity_attrib('device', $device, 'override_sysLocation_bool');
}
if (isset($override_sysLocation_string)) {
set_entity_attrib('device', $device, 'override_sysLocation_string', $override_sysLocation_string);
}
// Changed Skip ping
$ping_skip_set = isset($vars['ping_skip']) && get_var_true($vars['ping_skip']);
if ($ping_skip != $ping_skip_set) {
if ($ping_skip_set) {
set_entity_attrib('device', $device, 'ping_skip', '1');
} else {
del_entity_attrib('device', $device, 'ping_skip');
}
$ping_skip = get_entity_attrib('device', $device, 'ping_skip');
$updated++;
}
# FIXME needs more sanity checking! and better feedback
# FIXME -- update location too? Need to trigger geolocation!
$update_array = [];
// Changed Type
if ($vars['type'] != $device['type'] && isset($device_types[$vars['type']])) {
$update_array['type'] = $vars['type'];
if (!$override_type_bool || $override_type_string != $vars['type']) {
// Type overridden by user..
if ($vars['type'] == $default_type) {
del_entity_attrib('device', $device, 'override_type');
$override_type_string = NULL;
} else {
set_entity_attrib('device', $device, 'override_type', $vars['type']);
$override_type_string = $vars['type'];
}
$override_type_bool = !empty($override_type_string);
}
$updated++;
}
foreach (['purpose', 'ignore', 'disabled', 'poller_id', 'force_discovery'] as $param) {
if (!in_array($param, ['purpose', 'poller_id'])) {
// Boolean params
$vars[$param] = get_var_true($vars[$param]) ? '1' : '0';
}
if ($vars[$param] != $device[$param]) {
$update_array[$param] = $vars[$param];
$updated++;
}
}
if (count($update_array)) {
$rows_updated = dbUpdate($update_array, 'devices', '`device_id` = ?', [$device['device_id']]);
}
//r($updated);
//r($update_array);
//r($rows_updated);
if ($updated) {
if ((bool)$vars['ignore'] != (bool)$device['ignore']) {
log_event('Device ' . ((bool)$vars['ignore'] ? 'ignored' : 'attended') . ': ' . $device['hostname'], $device['device_id'], 'device', $device['device_id'], 5);
}
if ((bool)$vars['disabled'] != (bool)$device['disabled']) {
log_event('Device ' . ((bool)$vars['disabled'] ? 'disabled' : 'enabled') . ': ' . $device['hostname'], $device['device_id'], 'device', $device['device_id'], 5);
}
if ((bool)$vars['force_discovery'] != (bool)$device['force_discovery']) {
log_event('Device forced discovery ' . ((bool)$vars['force_discovery'] ? 'enabled' : 'disabled') . ': ' . $device['hostname'], $device['device_id'], 'device', $device['device_id'], 5);
}
$update_message = "Device record updated.";
if ($override_sysLocation_bool) {
$update_message .= " Please note that the updated sysLocation string will only be visible after the next poll.";
}
$updated = 1;
// Request for clear WUI cache
set_cache_clear('wui');
$device = dbFetchRow("SELECT * FROM `devices` WHERE `device_id` = ?", [$device['device_id']]);
} elseif ($rows_updated = '-1') {
$update_message = "Device record unchanged. No update necessary.";
$updated = -1;
} else {
$update_message = "Device record update error.";
}
}
}
$override_sysLocation_bool = get_entity_attrib('device', $device, 'override_sysLocation_bool');
$override_sysLocation_string = get_entity_attrib('device', $device, 'override_sysLocation_string');
if ($updated && $update_message) {
print_message($update_message);
} elseif ($update_message) {
print_error($update_message);
}
$form = [
'type' => 'horizontal',
'id' => 'edit',
//'space' => '20px',
'title' => 'General Device Settings',
'icon' => $config['icon']['tools'],
//'class' => 'box box-solid',
'fieldset' => [ 'edit' => '' ],
];
$form['row'][0]['editing'] = [
'type' => 'hidden',
'value' => 'yes'
];
$form['row'][1]['purpose'] = [
'type' => 'text',
//'fieldset' => 'edit',
'name' => 'Description',
//'class' => 'input-xlarge',
'width' => '500px',
'readonly' => $readonly,
'value' => $device['purpose']
];
$form['row'][2]['type'] = [
'type' => 'select',
//'fieldset' => 'edit',
'name' => 'Type',
'width' => '250px',
'readonly' => $readonly,
'values' => $device_types,
'value' => $device['type']
];
/*
$form['row'][2]['reset_type'] = array(
'type' => 'switch',
//'fieldset' => 'edit',
//'onchange' => "toggleAttrib('disabled', 'sysLocation')",
'readonly' => $readonly,
'on-color' => 'danger',
'off-color' => 'primary',
'on-text' => 'Reset',
'off-text' => 'Keep',
'value' => 0);
*/
$form['row'][3]['sysLocation'] = [
'type' => 'text',
//'fieldset' => 'edit',
'name' => 'Custom location',
'placeholder' => '',
'width' => '250px',
'readonly' => $readonly,
'disabled' => !$override_sysLocation_bool,
'value' => $override_sysLocation_string
];
$form['row'][3]['override_sysLocation'] = [
'type' => 'toggle',
'size' => 'large',
//'fieldset' => 'edit',
//'placeholder' => 'Use custom location below.',
'onchange' => "toggleAttrib('disabled', 'sysLocation')",
'readonly' => $readonly,
'value' => $override_sysLocation_bool
];
$poller_list = get_pollers();
$form['row'][4]['poller_id'] = [
'type' => 'select',
'community' => FALSE, // not available on community edition
'name' => 'Poller',
'width' => '250px',
'readonly' => $readonly,
'disabled' => !(count($poller_list) > 1),
'values' => $poller_list,
'value' => $device['poller_id']
];
$form['row'][5]['ping_skip'] = [
'type' => 'toggle',
'view' => 'toggle',
'palette' => 'yellow',
'name' => 'Skip ping',
//'fieldset' => 'edit',
'placeholder' => 'Skip ICMP echo checks, only SNMP availability.',
'readonly' => $readonly,
'value' => $ping_skip
];
$form['row'][6]['force_discovery'] = [
'type' => 'toggle',
'view' => 'toggle',
'palette' => 'blue',
'name' => 'Force Discovery',
//'fieldset' => 'edit',
'placeholder' => 'Force the device to be rediscovered in the next 5 mins.',
'readonly' => $readonly,
'value' => $device['force_discovery']
];
// FIXME (Mike): $device['ignore'] and get_dev_attrib($device,'disable_notify') it is same/redundant options?
$form['row'][7]['ignore'] = [
'type' => 'toggle',
'view' => 'toggle',
'palette' => 'yellow',
'name' => 'Device ignore',
//'fieldset' => 'edit',
'placeholder' => 'Suppress alerts and notifications and hide in some UI elements.',
'readonly' => $readonly,
'value' => $device['ignore']
];
$form['row'][8]['disabled'] = [
'type' => 'toggle',
'view' => 'toggle',
'palette' => 'red',
'name' => 'Disable',
//'fieldset' => 'edit',
'placeholder' => 'Disables polling and discovery.',
'readonly' => $readonly,
'value' => $device['disabled']
];
$form['row'][9]['submit'] = [
'type' => 'submit',
'name' => 'Save Changes',
'icon' => 'icon-ok icon-white',
//'right' => TRUE,
'class' => 'btn-primary',
'readonly' => $readonly,
'value' => 'save'
];
print_form($form);
unset($form);
// EOF