1<?php
2
3/**
4 * Observium Network Management and Monitoring System
5 * Copyright (C) 2006-2015, Adam Armstrong - http://www.observium.org
6 *
7 * @package    observium
8 * @subpackage webui
9 * @author     Adam Armstrong <adama@observium.org>
10 * @copyright  (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
11 *
12 */
13
14
15/// CONTACTS ACTIONS
16
17$readonly = $_SESSION['userlevel'] < 10;
18
19if (!$readonly)
20{
21  // FIXME: move all actions to separate include(s) with common options!
22  if (isset($vars['submit']) && !isset($vars['action']))
23  {
24    // Convert submit to action (for compatibility)
25    $vars['action'] = $vars['submit'];
26  }
27  if (isset($vars['action']) && isset($vars['contact_id']))
28  {
29    switch ($vars['action'])
30    {
31      case 'add_alert_checker_contact': // new ([action]_[type]_[action_target]_[param_to_change])
32      case 'associate_alert_check':     // old
33        if (is_numeric($vars['alert_checker_id']))
34        {
35          $vars['alert_test_id'] = $vars['alert_checker_id'];
36        }
37        else if (is_numeric($vars['alert_test_id']))
38        {
39          // ok
40        } else {
41          break;
42        }
43
44        //$vars['contact_id'] = (array)$vars['contact_id'];
45        foreach ((array)$vars['contact_id'] as $contact_id)
46        {
47          if (!is_numeric($contact_id)) { continue; }
48
49          $id = dbInsert('alert_contacts_assoc', array('aca_type'         => 'alert', // $vars['type']
50                                                       'contact_id'       => $contact_id,
51                                                       'alert_checker_id' => $vars['alert_test_id']));
52          if ($id) { $rows_updated++; }
53        }
54        break;
55
56      case 'add_alert_checker_contactall':
57        if (!is_numeric($vars['alert_test_id']) || !$vars['confirm_add_all'])
58        {
59          break;
60        }
61        $exist_contacts = dbFetchColumn('SELECT `contact_id` FROM `alert_contacts_assoc` WHERE `aca_type` = ? AND `alert_checker_id` = ?', array('alert', $vars['alert_test_id']));
62        //print_vars($exist_contacts);
63        $sql = 'SELECT `contact_id` FROM `alert_contacts` WHERE `contact_disabled` = 0' .
64               generate_query_values($exist_contacts, 'contact_id', '!='); // exclude exist contacts
65        //print_vars($sql);
66        foreach (dbFetchColumn($sql) as $contact_id)
67        {
68          $id = dbInsert('alert_contacts_assoc', array('aca_type'         => 'alert',
69                                                       'contact_id'       => $contact_id,
70                                                       'alert_checker_id' => $vars['alert_test_id']));
71          if ($id) { $rows_updated++; }
72        }
73        unset($exist_contacts);
74        break;
75
76      case 'delete_alert_checker_contact': // new
77      case 'delete_alert_contact_assoc':   // old
78        if (!is_numeric($vars['alert_test_id']))
79        {
80          break;
81        }
82        //$vars['contact_id'] = (array)$vars['contact_id'];
83        foreach ((array)$vars['contact_id'] as $contact_id)
84        {
85          if (!is_numeric($contact_id)) { continue; }
86
87          $rows_updated += dbDelete('alert_contacts_assoc', '`aca_type` = ? AND `contact_id` = ? AND `alert_checker_id` = ?', array('alert', $contact_id, $vars['alert_test_id']));
88        }
89        break;
90
91      case 'delete_alert_checker_contactall':
92        if (!is_numeric($vars['alert_test_id']) || !$vars['confirm_delete_all'])
93        {
94          break;
95        }
96        $rows_updated += dbDelete('alert_contacts_assoc', '`aca_type` = ? AND `alert_checker_id` = ?', array('alert', $vars['alert_test_id']));
97        break;
98
99      case 'associate_syslog_rule':
100        if (is_numeric($vars['la_id']))
101        {
102          //$vars['contact_id'] = (array)$vars['contact_id'];
103          foreach ((array)$vars['contact_id'] as $contact_id)
104          {
105            $id = dbInsert('alert_contacts_assoc', array('aca_type'         => 'syslog', // $vars['type']
106                                                         'contact_id'       => $vars['contact_id'],
107                                                         'alert_checker_id' => $vars['la_id']));
108            if ($id) { $rows_updated++; }
109          }
110
111          set_obs_attrib('syslog_rules_changed', time()); // Trigger reload syslog script
112
113        }
114        break;
115
116      case 'delete_syslog_checker_contact': // new
117        if (!is_numeric($vars['alert_test_id']))
118        {
119          break;
120        }
121        //$vars['contact_id'] = (array)$vars['contact_id'];
122        foreach ((array)$vars['contact_id'] as $contact_id)
123        {
124          if (!is_numeric($contact_id)) { continue; }
125
126          $rows_updated += dbDelete('alert_contacts_assoc', '`aca_type` = ? AND `contact_id` = ? AND `alert_checker_id` = ?', array('syslog', $contact_id, $vars['alert_test_id']));
127        }
128
129        set_obs_attrib('syslog_rules_changed', time()); // Trigger reload syslog script
130
131        break;
132
133      case 'update-contact-entry':
134        $update_state = array();
135        $contact = get_contact_by_id($vars['contact_id']);
136
137        foreach (json_decode($contact['contact_endpoint']) as $field => $value)
138        {
139          $contact['endpoint_parameters'][$field] = $value;
140        }
141
142        $update_state['contact_disabled'] = $vars['contact_enabled'] == '1' ? 0 : 1;
143
144        if (strlen($vars['contact_descr']) && $vars['contact_descr'] != $contact['contact_descr'])
145        {
146          $update_state['contact_descr'] = $vars['contact_descr'];
147        }
148
149        $data = $config['transports'][$contact['contact_method']];
150        if (!count($data['parameters']['global']))   { $data['parameters']['global'] = array(); } // Temporary until we separate "global" out.
151        if (!count($data['parameters']['optional'])) { $data['parameters']['optional'] = array(); }
152        // Plan: add defaults for transport types to global settings, which we use by default, then be able to override the settings via this GUI
153        // This needs supporting code in the transport to check for set variable and if not, use the global default
154
155        $update_endpoint = $contact['endpoint_parameters'];
156        foreach (array_merge($data['parameters']['required'], $data['parameters']['global'], $data['parameters']['optional']) as $parameter => $param_data)
157        {
158          if (strlen($vars['contact_endpoint_'.$parameter]) && $vars['contact_endpoint_'.$parameter] != $contact['endpoint_parameters'][$parameter])
159          {
160            $update_endpoint[$parameter] = $vars['contact_endpoint_'.$parameter];
161          }
162        }
163        $update_endpoint = json_encode($update_endpoint);
164        if ($update_endpoint != $contact['contact_endpoint'])
165        {
166          //r($update_endpoint);
167          //r($contact['contact_endpoint']);
168          $update_state['contact_endpoint'] = $update_endpoint;
169        }
170
171        $rows_updated = dbUpdate($update_state, 'alert_contacts', 'contact_id = ?', array($vars['contact_id']));
172        break;
173    }
174    // Clean common action vars
175    //unset($vars['submit'], $vars['action'], $vars['confirm']);
176  }
177}
178
179/// END CONTACTS ACTIONS
180
181
182if (!is_array($alert_rules)) { $alert_rules = cache_alert_rules(); }
183
184$navbar['class'] = 'navbar-narrow';
185$navbar['brand'] = 'Alerting';
186
187$pages = array('alerts'            => 'Alerts',
188               'alert_checks'      => 'Alert Checkers',
189               'alert_log'         => 'Alert Logging',
190               'alert_maintenance' => 'Scheduled Maintenance',
191               'syslog_alerts'     => 'Syslog Alerts',
192               'syslog_rules'      => 'Syslog Rules',
193               'contacts'          => 'Contacts');
194
195foreach ($pages as $page_name => $page_desc)
196{
197  if ($vars['page'] == $page_name)
198  {
199    $navbar['options'][$page_name]['class'] = "active";
200  }
201
202  $navbar['options'][$page_name]['url'] = generate_url(array('page' => $page_name));
203  $navbar['options'][$page_name]['text'] = escape_html($page_desc);
204
205  if (in_array($page_name, array('alert_checks', 'alert_maintenance', 'contacts', 'syslog_rules')))
206  {
207    $navbar['options'][$page_name]['userlevel'] = 5; // Minimum user level to display item
208  }
209}
210$navbar['options']['alert_maintenance']['community'] = FALSE; // Not exist in Community Edition
211
212$navbar['options']['update']['url']  = generate_url(array('page' => 'alert_regenerate', 'action' => 'update'));
213$navbar['options']['update']['text'] = 'Rebuild';
214$navbar['options']['update']['icon'] = $config['icon']['rebuild'];
215$navbar['options']['update']['right'] = TRUE;
216$navbar['options']['update']['userlevel'] = 10; // Minimum user level to display item
217// We don't really need to highlight Regenerate, as it's not a display option, but an action.
218// if ($vars['action'] == 'update') { $navbar['options']['update']['class'] = 'active'; }
219
220$navbar['options']['sadd']['url']  = generate_url(array('page' => 'add_syslog_rule'));
221$navbar['options']['sadd']['text'] = 'Add Syslog Rule';
222$navbar['options']['sadd']['icon'] = $config['icon']['syslog-rule-add'];
223$navbar['options']['sadd']['right'] = TRUE;
224$navbar['options']['sadd']['userlevel'] = 10; // Minimum user level to display item
225
226$navbar['options']['add']['url']  = generate_url(array('page' => 'add_alert_check'));
227$navbar['options']['add']['text'] = 'Add Checker';
228$navbar['options']['add']['icon'] = $config['icon']['alert-rule-add'];
229$navbar['options']['add']['right'] = TRUE;
230$navbar['options']['add']['userlevel'] = 10; // Minimum user level to display item
231
232
233// Print out the navbar defined above
234print_navbar($navbar);
235unset($navbar);
236
237
238// EOF
239