diff --git a/includes/html/forms/create-service.inc.php b/includes/html/forms/create-service.inc.php
index ad97f0113b..1712966f91 100644
--- a/includes/html/forms/create-service.inc.php
+++ b/includes/html/forms/create-service.inc.php
@@ -24,10 +24,11 @@ $param = $vars['param'];
$ignore = isset($vars['ignore']) ? 1 : 0;
$disabled = isset($vars['disabled']) ? 1 : 0;
$device_id = $vars['device_id'];
+$service_template_id = $vars['service_template_id'];
if (is_numeric($service_id) && $service_id > 0) {
// Need to edit.
- $update = array('service_desc' => $desc, 'service_ip' => $ip, 'service_param' => $param, 'service_ignore' => $ignore, 'service_disabled' => $disabled);
+ $update = array('service_desc' => $desc, 'service_ip' => $ip, 'service_param' => $param, 'service_ignore' => $ignore, 'service_disabled' => $disabled, 'service_template_id' => $service_template_id);
if (is_numeric(edit_service($update, $service_id))) {
$status = array('status' =>0, 'message' => 'Modified Service: '.$service_id.': '.$type.'');
} else {
@@ -35,7 +36,7 @@ if (is_numeric($service_id) && $service_id > 0) {
}
} else {
// Need to add.
- $service_id = add_service($device_id, $type, $desc, $ip, $param, $ignore, $disabled);
+ $service_id = add_service($device_id, $type, $desc, $ip, $param, $ignore, $disabled, $service_template_id);
if ($service_id == false) {
$status = array('status' =>1, 'message' => 'ERROR: Failed to add Service: '.$type.'');
} else {
diff --git a/includes/html/forms/parse-service-template.inc.php b/includes/html/forms/parse-service-template.inc.php
new file mode 100644
index 0000000000..41d2e89570
--- /dev/null
+++ b/includes/html/forms/parse-service-template.inc.php
@@ -0,0 +1,35 @@
+
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or (at your
+ * option) any later version. Please see LICENSE.txt at the top level of
+ * the source code distribution for details.
+ */
+
+if (!Auth::user()->hasGlobalAdmin()) {
+ die('ERROR: You need to be admin');
+}
+
+$service__template_id = $vars['service_template_id'];
+
+if (is_numeric($service_template_id) && $service_template_id > 0) {
+ $service_template = service_template_get(null, $service_template_id);
+
+ $output = array(
+ 'stype' => $service[0]['service_type'],
+ 'ip' => $service[0]['service_ip'],
+ 'desc' => $service[0]['service_desc'],
+ 'param' => $service[0]['service_param'],
+ 'ignore' => $service[0]['service_ignore'],
+ 'disabled' => $service[0]['service_disabled']
+ );
+
+ header('Content-Type: application/json');
+ echo _json_encode($output);
+}
diff --git a/includes/html/forms/parse-service.inc.php b/includes/html/forms/parse-service.inc.php
index 32ce6608ca..42b01b3998 100644
--- a/includes/html/forms/parse-service.inc.php
+++ b/includes/html/forms/parse-service.inc.php
@@ -27,7 +27,8 @@ if (is_numeric($service_id) && $service_id > 0) {
'desc' => $service[0]['service_desc'],
'param' => $service[0]['service_param'],
'ignore' => $service[0]['service_ignore'],
- 'disabled' => $service[0]['service_disabled']
+ 'disabled' => $service[0]['service_disabled'],
+ 'service_template_id' => $service[0]['service_template_id']
);
header('Content-Type: application/json');
diff --git a/includes/services.inc.php b/includes/services.inc.php
index 382d00acbc..be6fa8aca1 100644
--- a/includes/services.inc.php
+++ b/includes/services.inc.php
@@ -36,7 +36,7 @@ function get_service_status($device = null)
return $service_count;
}
-function add_service($device, $type, $desc, $ip = '', $param = "", $ignore = 0, $disabled = 0)
+function add_service($device, $type, $desc, $ip = '', $param = "", $ignore = 0, $disabled = 0, $service_template_id = "")
{
if (!is_array($device)) {
@@ -47,13 +47,13 @@ function add_service($device, $type, $desc, $ip = '', $param = "", $ignore = 0,
$ip = Device::pollerTarget($device['hostname']);
}
- $insert = array('device_id' => $device['device_id'], 'service_ip' => $ip, 'service_type' => $type, 'service_changed' => array('UNIX_TIMESTAMP(NOW())'), 'service_desc' => $desc, 'service_param' => $param, 'service_ignore' => $ignore, 'service_status' => 3, 'service_message' => 'Service not yet checked', 'service_ds' => '{}', 'service_disabled' => $disabled);
+ $insert = array('device_id' => $device['device_id'], 'service_ip' => $ip, 'service_type' => $type, 'service_changed' => array('UNIX_TIMESTAMP(NOW())'), 'service_desc' => $desc, 'service_param' => $param, 'service_ignore' => $ignore, 'service_status' => 3, 'service_message' => 'Service not yet checked', 'service_ds' => '{}', 'service_disabled' => $disabled, 'service_template_id' => $service_template_id);
return dbInsert($insert, 'services');
}
function service_get($device = null, $service = null)
{
- $sql_query = "SELECT `service_id`,`device_id`,`service_ip`,`service_type`,`service_desc`,`service_param`,`service_ignore`,`service_status`,`service_changed`,`service_message`,`service_disabled`,`service_ds` FROM `services` WHERE";
+ $sql_query = "SELECT `service_id`,`device_id`,`service_ip`,`service_type`,`service_desc`,`service_param`,`service_ignore`,`service_status`,`service_changed`,`service_message`,`service_disabled`,`service_ds`,`service_template_id` FROM `services` WHERE";
$sql_param = array();
$add = 0;
@@ -182,7 +182,7 @@ function delete_service_template($service_template = null)
function discover_service_template($device_group, $service_template)
{
- if (! dbFetchCell('SELECT COUNT(service_id) FROM `services` WHERE `service_type`= ? AND `device_id` = ?', array($service_template['service_template_id'], $device_group['device_group_id']))) {
+ if (! dbFetchCell('SELECT COUNT(service_id) FROM `services` WHERE `service_template_id`= ? AND `device_group_id` = ?', array($service_template['service_template_id'], $device_group['device_group_id']))) {
$service=service_template_get($device_group, $service_template);
$device_ids = dbFetchColumn("SELECT `device_id` FROM `device_group_device` WHERE `device_group_id`=" . $_POST['device_group_id']);
foreach ($device_ids as $device) {
diff --git a/misc/db_schema.yaml b/misc/db_schema.yaml
index f7626916f5..581649749b 100644
--- a/misc/db_schema.yaml
+++ b/misc/db_schema.yaml
@@ -1720,6 +1720,7 @@ services:
- { Field: service_message, Type: text, 'Null': false, Extra: '' }
- { Field: service_disabled, Type: tinyint, 'Null': false, Extra: '', Default: '0' }
- { Field: service_ds, Type: text, 'Null': false, Extra: '' }
+ - { Field: service_template_id, Type: 'int unsigned', 'Null': false, Extra: ''}
Indexes:
PRIMARY: { Name: PRIMARY, Columns: [service_id], Unique: true, Type: BTREE }
services_device_id_index: { Name: services_device_id_index, Columns: [device_id], Unique: false, Type: BTREE }