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