$d_ports) { $start_port = $d_ports + 1; LOG_DEBUG($db_link, "Device id: $id add connection for port from $start_port to $sw_ports."); for ($port = $start_port; $port <= $sw_ports; $port++) { insert_record($db_link, "device_ports", [ 'device_id' => $id, 'snmp_index' => $port, 'port' => $port ]); } } if ($sw_ports < $d_ports) { LOG_DEBUG($db_link, "Device id: $id remove connection for port from $d_ports to $sw_ports"); for ($port = $d_ports; $port > $sw_ports; $port--) { $port_id = get_id_record($db_link, 'device_ports', "device_id = ? AND port = ?", [$id, $port]); if ($port_id) { delete_record($db_link, "device_ports", "id = ?", [$port_id]); delete_records($db_link, "connections", "port_id = ?", [$port_id]); } else { LOG_DEBUG($db_link, "Device id: $id port_id not found for port: $port!"); } } } } // === ОСНОВНЫЕ ДАННЫЕ УСТРОЙСТВА ============================================ $new = []; $cur_device = get_record_sql($db_link, "SELECT * FROM devices WHERE id = ?", [$id]); // IP-адрес $f_ip = trim(getPOST("f_ip", null, '')); if ($f_ip !== '') { $new['ip'] = $f_ip; $new['ip_int'] = ip2long($f_ip); $cur_auth = get_record_sql($db_link, "SELECT * FROM user_auth WHERE deleted = 0 AND ip = ?", [$f_ip]); } // Модель устройства $f_device_model_id = (int)getPOST("f_device_model_id", null, 0); if ($f_device_model_id > 0) { $new['device_model_id'] = $f_device_model_id; $new['vendor_id'] = get_device_model_vendor($db_link, $f_device_model_id); } // Количество портов $new['port_count'] = $sw_ports; // Тип устройства $new['device_type'] = (int)getPOST("f_devtype_id", null, 0); // === УПРАВЛЕНИЕ ЭКЗЕМПЛЯРАМИ ФИЛЬТРОВ ====================================== if ($new['device_type'] == 2) { // Это шлюз — должен иметь хотя бы один экземпляр $instances_count = get_count_records($db_link, 'device_filter_instances', 'device_id = ?', [$id]); if (empty($instances_count) || $instances_count == 0) { // Создаём стандартный экземпляр (ID=1) insert_record($db_link, "device_filter_instances", [ 'instance_id' => 1, 'device_id' => $id ]); LOG_INFO($db_link, "Added default firewall instance for gateway id: $id"); } } else { // Не шлюз — удаляем все экземпляры if ($device['device_type'] == 2) { $instances_count = get_count_records($db_link, 'device_filter_instances', 'device_id = ?', [$id]); if (!empty($instances_count) && $instances_count > 0) { delete_records($db_link, 'device_filter_instances', 'device_id = ?', [$id]); LOG_INFO($db_link, "Removed firewall instances for non-gateway device id: $id"); } } } // === ОСТАЛЬНЫЕ ПОЛЯ ========================================================= $new['description'] = trim(getPOST("f_description", null, '')); $new['SN'] = trim(getPOST("f_SN", null, '')); $new['firmware'] = trim(getPOST("f_firmware", null, '')); // SNMP $new['snmp_version'] = (int)getPOST("f_snmp_version", null, 0); $new['community'] = substr(trim(getPOST("f_community", null, '')), 0, 50); $new['snmp3_auth_proto'] = substr(trim(getPOST("f_snmp3_auth_proto", null, '')), 0, 10); $new['snmp3_priv_proto'] = substr(trim(getPOST("f_snmp3_priv_proto", null, '')), 0, 10); $new['rw_community'] = substr(trim(getPOST("f_rw_community", null, '')), 0, 50); $new['snmp3_user_rw'] = substr(trim(getPOST("f_snmp3_user_rw", null, '')), 0, 20); $new['snmp3_user_ro'] = substr(trim(getPOST("f_snmp3_user_ro", null, '')), 0, 20); $new['snmp3_user_rw_password']= substr(trim(getPOST("f_snmp3_user_rw_password", null, '')), 0, 20); $new['snmp3_user_ro_password']= substr(trim(getPOST("f_snmp3_user_ro_password", null, '')), 0, 20); // ACL и настройки $new['queue_enabled'] = (int)getPOST("f_queue_enabled", null, 0); $new['connected_user_only'] = (int)getPOST("f_connected_user_only", null, 0); $new['dhcp'] = (int)getPOST("f_dhcp", null, 0); $new['user_acl'] = (int)getPOST("f_user_acl", null, 0); // Расположение $new['building_id'] = (int)getPOST("f_building_id", null, 0); // Доступ $new['login'] = trim(getPOST("f_login", null, '')); $f_password = getPOST("f_password", null, ''); if ($f_password !== '' && !preg_match('/^\*+$/', $f_password)) { $new['password'] = crypt_string($f_password); } $new['protocol'] = (int)getPOST("f_protocol", null, 0); $new['control_port'] = (int)getPOST("f_control_port", null, 0); $new['netflow_save'] = (int)getPOST("f_save_netflow", null, 0); // Discovery $new['discovery'] = trim(getPOST("f_discovery", null, 0)); // Nagios $f_nagios = (int)getPOST("f_nagios", null, -1); if ($f_nagios !== -1) { $new['nagios'] = $f_nagios; if ($new['nagios'] == 0) { $new['nagios_status'] = 'UP'; } } else { if (!empty($cur_auth)) { $new['nagios'] = 0; $new['nagios_status'] = $cur_auth['nagios_status']; } } // === ЗАВИСИМОСТИ ПО ТИПУ УСТРОЙСТВА ======================================== if ($new['device_type'] == 0 || $new['protocol'] < 0) { $new['queue_enabled'] = 0; $new['connected_user_only'] = 1; $new['user_acl'] = 0; } // === СОХРАНЕНИЕ ============================================================= update_record($db_link, "devices", "id = ?", $new, [$id]); header("Location: " . $_SERVER["REQUEST_URI"]); exit; } unset($_POST); require_once($_SERVER['DOCUMENT_ROOT'] . "/inc/header.php"); print_device_submenu($page_url); print_editdevice_submenu($page_url, $id, $device['device_type'], $user_info['login']); ?>
'; } } ?>