[ [ 'start' => '00:00:00', 'end' => '00:00:00', ], ], 'tuesday' => [ [ 'start' => '00:00:00', 'end' => '00:00:00', ], ], 'wednesday' => [ [ 'start' => '00:00:00', 'end' => '00:00:00', ], ], 'thursday' => [ [ 'start' => '00:00:00', 'end' => '00:00:00', ], ], 'friday' => [ [ 'start' => '00:00:00', 'end' => '00:00:00', ], ], 'saturday' => [ [ 'start' => '00:00:00', 'end' => '00:00:00', ], ], 'sunday' => [ [ 'start' => '00:00:00', 'end' => '00:00:00', ], ], ]; if ($duplicate_template === true) { $source_id = (int) get_parameter('source_id'); $a_template = alerts_get_alert_template($source_id); } else { $a_template = alerts_get_alert_template($id); } if (is_metaconsole() === true) { $sec = 'advanced'; } else { $sec = 'galertas'; } $can_edit_all = false; if (check_acl_restricted_all($config['id_user'], 0, 'LM')) { $can_edit_all = true; } if ($a_template !== false) { // If user tries to duplicate/edit a template with group=ALL. if ($a_template['id_group'] == 0) { if (is_metaconsole() === true) { alerts_meta_print_header(); } else { if ($step == 1) { $help_header = ''; } else if ($step == 2) { $help_header = 'configure_alert_template_step_2'; } else if ($step == 3) { $help_header = ''; } ui_print_page_header( __('Alerts').' » '.__('Configure alert template'), '', false, $help_header, true ); } } else { // If user tries to duplicate/edit a template of others groups. $own_info = get_user_info($config['id_user']); if ($own_info['is_admin'] || check_acl($config['id_user'], 0, 'PM')) { $own_groups = array_keys(users_get_groups($config['id_user'], 'LM')); } else { $own_groups = array_keys(users_get_groups($config['id_user'], 'LM', false)); } $is_in_group = in_array($a_template['id_group'], $own_groups); // Then template group have to be in his own groups. if ($is_in_group) { // Header. if (is_metaconsole() === true) { alerts_meta_print_header(); } else { ui_print_page_header( __('Alerts').' » '.__('Configure alert template'), 'images/gm_alerts.png', false, 'conf_alert_template', true ); } } else { db_pandora_audit( 'ACL Violation', 'Trying to access Alert Management' ); include 'general/noaccess.php'; exit; } } // This prevents to duplicate the header in case duplicate/edit_template action is performed. } else { // Header. if (is_metaconsole() === true) { alerts_meta_print_header(); } else { if ($step == 1) { $help_header = ''; } else if ($step == 2) { $help_header = 'configure_alert_template_step_2'; } else if ($step == 3) { $help_header = ''; } ui_print_page_header( __('Alerts').' » '.__('Configure alert template'), 'images/gm_alerts.png', false, $help_header, true ); } } if ($duplicate_template) { $source_id = (int) get_parameter('source_id'); // If user doesn't have the permission to access // All group and source template is All group, // then group is changed to the first group of user. if ($can_edit_all == false && $a_template['id_group'] == 0) { $a_template['id_group'] = users_get_first_group(false, 'LM', false); } $id = alerts_duplicate_alert_template($source_id, $a_template['id_group']); if ($id) { db_pandora_audit('Template alert management', 'Duplicate alert template '.$source_id.' clone to '.$id); } else { db_pandora_audit('Template alert management', 'Fail try to duplicate alert template '.$source_id); } ui_print_result_message( $id, __('Successfully created from %s', alerts_get_alert_template_name($source_id)), __('Could not be created') ); } function print_alert_template_steps($step, $id) { echo '
    '; if (is_metaconsole() === true) { $sec = 'advanced'; } else { $sec = 'galertas'; } $pure = get_parameter('pure', 0); // Step 1. if ($step == 1) { echo '
  1. '; } else if ($step > 1) { echo '
  2. '; } else { echo '
  3. '; } if ($id) { echo ''; echo __('Step').' 1 » '; echo ''.__('General').''; echo ''; } else { echo __('Step').' 1 » '; echo ''.__('General').''; } echo '
  4. '; // Step 2. if ($step == 2) { echo '
  5. '; } else if ($step > 2) { echo '
  6. '; } else { echo '
  7. '; } if ($id) { echo ''; echo __('Step').' 2 » '; echo ''.__('Conditions').''; echo ''; } else { echo __('Step').' 2 » '; echo ''.__('Conditions').''; } echo '
  8. '; // Step 3. if ($step == 3) { echo '
  9. '; } else if ($step > 3) { echo '
  10. '; } else { echo '
  11. '; } if ($id) { echo ''; echo __('Step').' 3 » '; echo ''.__('Advanced fields').''; echo ''; } else { echo __('Step').' 3 » '; echo ''.__('Advanced fields').''; } echo '
'; echo '
'; } function update_template($step) { global $config; $id = (int) get_parameter('id'); if (empty($id)) { return false; } if (is_metaconsole() === true) { $sec = 'advanced'; } else { $sec = 'galertas'; } if ($step == 1) { $name = (string) get_parameter('name'); $description = (string) get_parameter('description'); $wizard_level = (string) get_parameter('wizard_level'); $priority = (int) get_parameter('priority'); $id_group = get_parameter('id_group'); // Only for Metaconsole. Save the previous name for synchronizing. if (is_metaconsole()) { $previous_name = db_get_value('name', 'talert_templates', 'id', $id); } else { $previous_name = ''; } $values = [ 'name' => $name, 'description' => $description, 'id_group' => $id_group, 'priority' => $priority, 'wizard_level' => $wizard_level, 'previous_name' => $previous_name, ]; $result = alerts_update_alert_template($id, $values); } else if ($step == 2) { $schedule = get_parameter('schedule'); $special_day = (int) get_parameter('special_day'); $threshold = (int) get_parameter('threshold'); $max_alerts = (int) get_parameter('max_alerts'); $min_alerts = (int) get_parameter('min_alerts'); $min_alerts_reset_counter = (int) get_parameter('min_alerts_reset_counter'); $disable_event = (int) get_parameter('disable_event'); $type = (string) get_parameter('type'); $value = (string) html_entity_decode(get_parameter('value')); $max = (float) get_parameter('max'); $min = (float) get_parameter('min'); $matches = (bool) get_parameter('matches_value'); $default_action = (int) get_parameter('default_action'); if (empty($default_action) === true) { $default_action = null; } $values = [ 'schedule' => json_encode( json_decode( io_safe_output($schedule), true ) ), 'special_day' => $special_day, 'time_threshold' => $threshold, 'id_alert_action' => $default_action, 'max_alerts' => $max_alerts, 'min_alerts' => $min_alerts, 'min_alerts_reset_counter' => $min_alerts_reset_counter, 'type' => $type, 'value' => $value, 'max_value' => $max, 'min_value' => $min, 'matches_value' => $matches, 'disable_event' => $disable_event, ]; $result = alerts_update_alert_template($id, $values); } else if ($step == 3) { $recovery_notify = (bool) get_parameter('recovery_notify'); for ($i = 1; $i <= $config['max_macro_fields']; $i++) { $values['field'.$i] = (string) get_parameter('field'.$i); $values['field'.$i.'_recovery'] = $recovery_notify ? (string) get_parameter('field'.$i.'_recovery') : ''; } $values['recovery_notify'] = $recovery_notify; $result = alerts_update_alert_template($id, $values); } else { return false; } if ($result) { db_pandora_audit( 'Template alert management', 'Update alert template #'.$id, false, false, json_encode($values) ); } else { db_pandora_audit( 'Template alert management', 'Fail try to update alert template #'.$id, false, false, json_encode($values) ); } return $result; } $is_management_allowed = is_management_allowed(); if ($is_management_allowed === false) { if (is_metaconsole() === false) { $url = ''.__('metaconsole').''; } else { $url = __('any node'); } ui_print_warning_message( __( 'This node is configured with centralized mode. All alerts templates information is read only. Go to Go to %s to manage it.', $url ) ); } $step = (int) get_parameter('step', 1); $create_alert = (bool) get_parameter('create_alert'); $create_template = (bool) get_parameter('create_template'); $update_template = (bool) get_parameter('update_template'); $disabled = false; if (!$create_alert && !$create_template) { // When user edits a template with All group, user must have "LM" access privileges againt All group. if ($a_template['id_group'] == 0 && !$can_edit_all) { $disabled = true; } } $name = ''; $description = ''; $type = ''; $value = ''; $max = ''; $min = ''; $schedule = json_encode( $default_events_calendar ); $special_day = 0; $default_action = 0; $fields = []; for ($i = 1; $i <= $config['max_macro_fields']; $i++) { $fields[$i] = ''; } for ($i = 1; $i <= $config['max_macro_fields']; $i++) { $fields_recovery[$i] = ''; } $priority = 1; $min_alerts = 0; $min_alerts_reset_counter = 0; $max_alerts = 1; $threshold = SECONDS_1DAY; $recovery_notify = false; $field2_recovery = ''; $field3_recovery = ''; $matches = true; $id_group = 0; $wizard_level = 'nowizard'; if ($create_template) { $name = (string) get_parameter('name'); $description = (string) get_parameter('description'); $type = (string) get_parameter('type', 'critical'); $value = (string) get_parameter('value'); $max = (float) get_parameter('max'); $min = (float) get_parameter('min'); $matches = (bool) get_parameter('matches_value'); $priority = (int) get_parameter('priority'); $wizard_level = (string) get_parameter('wizard_level'); $id_group = get_parameter('id_group'); $name_check = db_get_value('name', 'talert_templates', 'name', $name); $values = [ 'description' => $description, 'value' => $value, 'max_value' => $max, 'min_value' => $min, 'id_group' => $id_group, 'matches_value' => $matches, 'priority' => $priority, 'wizard_level' => $wizard_level, 'schedule' => $schedule, ]; if ($config['dbtype'] == 'oracle') { $values['field3'] = ' '; $values['field3_recovery'] = ' '; } if (!$name_check) { $result = alerts_create_alert_template($name, $type, $values); } else { $result = ''; } if ($result) { db_pandora_audit( 'Template alert management', 'Create alert template #'.$result, false, false, json_encode($values) ); } else { db_pandora_audit( 'Template alert management', 'Fail try to create alert template', false, false, json_encode($values) ); } // Show errors. if (!isset($messageAction)) { $messageAction = __('Could not be created'); } if ($name == '') { $messageAction = __('No template name specified'); } $messageAction = ui_print_result_message( $result, __('Successfully created'), $messageAction ); // Go to previous step in case of error. if ($result === false) { $step--; } else { $id = $result; } } if ($update_template) { $result = update_template($step - 1); ui_print_result_message( $result, __('Successfully updated'), __('Could not be updated') ); // Go to previous step in case of error. if ($result === false) { $step--; } } if ($id && ! $create_template) { $template = alerts_get_alert_template($id); $name = $template['name']; $description = $template['description']; $type = $template['type']; $value = $template['value']; $max = $template['max_value']; $min = $template['min_value']; $matches = $template['matches_value']; $schedule = $template['schedule']; $special_day = (int) $template['special_day']; $max_alerts = $template['max_alerts']; $min_alerts = $template['min_alerts']; $min_alerts_reset_counter = $template['min_alerts_reset_counter']; $disable_event = $template['disable_event']; $threshold = $template['time_threshold']; $fields = []; for ($i = 1; $i <= $config['max_macro_fields']; $i++) { $fields[$i] = $template['field'.$i]; } $recovery_notify = $template['recovery_notify']; $fields_recovery = []; for ($i = 1; $i <= $config['max_macro_fields']; $i++) { $fields_recovery[$i] = $template['field'.$i.'_recovery']; } $default_action = $template['id_alert_action']; $priority = $template['priority']; $id_group = $template['id_group']; $wizard_level = $template['wizard_level']; } print_alert_template_steps($step, $id); $table = new stdClass(); $table->id = 'template'; $table->width = '100%'; $table->class = 'databox filters'; if (is_metaconsole() === true) { $table->head[0] = __('Create Template'); $table->head_colspan[0] = 4; $table->headstyle[0] = 'text-align: center'; } $table->style = []; $table->style[0] = 'font-weight: bold;'; $table->style[2] = 'font-weight: bold;'; $table->size = []; $table->size[0] = '20%'; $table->size[2] = '20%'; if ($step == 2) { if (!isset($show_matches)) { $show_matches = false; } $table->data[0][0] = __('Use special days list'); $data_special_days = Calendar::calendars( // Fields. [ '`talert_calendar`.*' ], // Filter. [], // Count. false, // Offset. null, // Limit. null, // Order. null, // Sort field. null, // Reduce to a select. true ); $table->data[0][1] = html_print_select( $data_special_days, 'special_day', $special_day, '', __('None'), 0, true, false, false, '', (!$is_management_allowed | $disabled) ); // Firing conditions and events. $table->colspan = []; $table->data[1][0] = __('Schedule'); $table->colspan[1][1] = 3; $table->data[1][1] = ui_print_warning_message( [ 'message' => __('No alert has been scheduled yet'), 'force_style' => 'display:none;', ], '', true ); $table->data[1][1] .= '
'; $table->data[1][1] .= html_print_input_hidden('schedule', $schedule, true); $table->colspan['threshold'][1] = 3; $table->data['threshold'][0] = __('Time threshold'); $table->data['threshold'][1] = html_print_extended_select_for_time( 'threshold', $threshold, '', '', '', false, true, false, true, '', (!$is_management_allowed | $disabled) ); $table->data[4][0] = __('Min. number of alerts'); $table->data[4][1] = html_print_input_text( 'min_alerts', $min_alerts, '', 5, 7, true, false, false, '', '', '', '', false, '', '', '', (!$is_management_allowed | $disabled) ); $table->data[4][2] = __('Reset counter for non-sustained alerts'); $table->data[4][2] .= ui_print_help_tip( __('Enable this option if you want the counter to be reset when the alert is not being fired consecutively, even if it\'s within the time threshold'), true ); $table->data[4][3] = html_print_checkbox( 'min_alerts_reset_counter', 1, $min_alerts_reset_counter, true, (!$is_management_allowed | $disabled), '', false, ($create_template == 1) ? 'checked=checked' : '' ); $table->data[5][0] = __('Max. number of alerts'); $table->data[5][1] = html_print_input_text( 'max_alerts', $max_alerts, '', 5, 7, true, false, false, '', '', '', '', false, '', '', '', (!$is_management_allowed | $disabled) ); $table->data[5][2] = __('Disable event'); $table->data[5][3] = html_print_checkbox( 'disable_event', 1, $disable_event, true, (!$is_management_allowed | $disabled) ); $table->data[6][0] = __('Default action'); $usr_groups = implode( ',', array_keys(users_get_groups($config['id_user'], 'LM', true)) ); $sql_query = sprintf( 'SELECT id, name FROM talert_actions WHERE id_group IN (%s) ORDER BY name', $usr_groups ); $table->data[6][1] = html_print_select_from_sql( $sql_query, 'default_action', $default_action, '', __('None'), 0, true, false, false, (!$is_management_allowed | $disabled), false, false, 0 ); $table->data[6][1] .= ui_print_help_tip( __('Unless they\'re left blank, the fields from the action will override those set on the template.'), true ); $table->data[7][0] = __('Condition type'); $table->data[7][1] = html_print_select( alerts_get_alert_templates_types(), 'type', $type, '', __('None'), 0, true, false, false, '', (!$is_management_allowed | $disabled) ); $table->data[7][1] .= ''; $table->data[7][1] .= ' '.html_print_checkbox('matches_value', 1, $matches, true); $table->data[7][1] .= html_print_label( __('Trigger when matches the value'), 'checkbox-matches_value', true ); $table->data[7][1] .= ''; $table->colspan[7][1] = 3; $table->data['value'][0] = __('Value'); $table->data['value'][1] = html_print_input_text( 'value', $value, '', 35, 255, true ); $table->data['value'][1] .= ' '; $table->data['value'][1] .= html_print_image( 'images/suc.png', true, [ 'style' => 'display:none', 'id' => 'regex_good', 'title' => __('The regular expression is valid'), 'width' => '20px', ] ); $table->data['value'][1] .= html_print_image( 'images/err.png', true, [ 'style' => 'display:none', 'id' => 'regex_bad', 'title' => __('The regular expression is not valid'), 'width' => '20px', ] ); $table->data['value'][1] .= ''; $table->colspan['value'][1] = 3; // Min first, then max, that's more logical. $table->data['min'][0] = __('Min.'); $table->data['min'][1] = html_print_input_text( 'min', $min, '', 5, 255, true, $disabled ); $table->colspan['min'][1] = 3; $table->data['max'][0] = __('Max.'); $table->data['max'][1] = html_print_input_text( 'max', $max, '', 5, 255, true, $disabled ); $table->colspan['max'][1] = 3; $table->data['example'][1] = ui_print_alert_template_example( $id, true, false ); $table->colspan['example'][1] = 4; } else if ($step == 3) { $table->style[0] = 'font-weight: bold; vertical-align: middle'; $table->style[1] = 'font-weight: bold; vertical-align: top'; $table->style[2] = 'font-weight: bold; vertical-align: top'; $table->size = []; $table->size[0] = '10%'; $table->size[1] = '45%'; $table->size[2] = '45%'; // Alert recover. if (! $recovery_notify) { $table->cellstyle['label_fields'][2] = 'display:none;'; for ($i = 1; $i <= $config['max_macro_fields']; $i++) { $table->cellstyle['field'.$i][2] = 'display:none;'; } } $table->data[0][0] = __('Alert recovery'); $values = [ false => __('Disabled'), true => __('Enabled'), ]; $table->data[0][1] = html_print_select( $values, 'recovery_notify', $recovery_notify, '', '', '', true, false, false, '', (!$is_management_allowed | $disabled) ); $table->colspan[0][1] = 2; $table->data['label_fields'][0] = ''; $table->data['label_fields'][1] = __('Firing fields'); $table->data['label_fields'][2] = __('Recovery fields'); for ($i = 1; $i <= $config['max_macro_fields']; $i++) { if (isset($template[$name]) === true) { $value = $template[$name]; } else { $value = ''; } $table->data['field'.$i][0] = sprintf(__('Field %s'), $i); // TinyMCE. // triggering fields. // Basic. $table->data['field'.$i][1] = '
'; $table->data['field'.$i][1] .= __('Basic').'  '; $table->data['field'.$i][1] .= html_print_radio_button_extended( 'editor_type_value_'.$i, 0, '', false, (!$is_management_allowed | $disabled), "removeTinyMCE('textarea_field".$i."')", '', true ); // Advanced. $table->data['field'.$i][1] .= '    '; $table->data['field'.$i][1] .= __('Advanced').'  '; $table->data['field'.$i][1] .= html_print_radio_button_extended( 'editor_type_value_'.$i, 0, '', true, (!$is_management_allowed | $disabled), "addTinyMCE('textarea_field".$i."')", '', true ); $table->data['field'.$i][1] .= '
'; // Texarea. $table->data['field'.$i][1] .= html_print_textarea( 'field'.$i, 1, 1, isset($fields[$i]) ? $fields[$i] : '', 'class="fields" min-height-40px', true, '', (!$is_management_allowed | $disabled) ); // Recovery. // Basic. $table->data['field'.$i][2] = '
'; $table->data['field'.$i][2] .= __('Basic').'  '; $table->data['field'.$i][2] .= html_print_radio_button_extended( 'editor_type_recovery_value_'.$i, 0, '', false, (!$is_management_allowed | $disabled), "removeTinyMCE('textarea_field".$i."_recovery')", '', true ); // Advanced. $table->data['field'.$i][2] .= '    '; $table->data['field'.$i][2] .= __('Advanced').'  '; $table->data['field'.$i][2] .= html_print_radio_button_extended( 'editor_type_recovery_value_'.$i, 0, '', true, (!$is_management_allowed | $disabled), "addTinyMCE('textarea_field".$i."_recovery')", '', true ); $table->data['field'.$i][2] .= '
'; // Texarea. $table->data['field'.$i][2] .= html_print_textarea( 'field'.$i.'_recovery', 1, 1, isset($fields_recovery[$i]) ? $fields_recovery[$i] : '', 'class="fields min-height-40px"', true, '', (!$is_management_allowed | $disabled) ); } } else { // Step 1 by default. $table->size = []; $table->size[0] = '20%'; $table->data = []; $table->rowstyle = []; $table->rowstyle['value'] = 'display: none'; $table->rowstyle['max'] = 'display: none'; $table->rowstyle['min'] = 'display: none'; $show_matches = false; switch ($type) { case 'equal': case 'not_equal': case 'regex': $show_matches = true; $table->rowstyle['value'] = ''; break; case 'max_min': $show_matches = true; case 'max': $table->rowstyle['max'] = ''; if ($type == 'max') { break; } case 'min': $table->rowstyle['min'] = ''; break; case 'onchange': $show_matches = true; break; default: // Not possible. break; } $table->data[0][0] = __('Name'); $table->data[0][1] = html_print_input_text( 'name', $name, '', 35, 255, true, false, false, '', '', '', '', false, '', '', '', (!$is_management_allowed | $disabled) ); $table->data[0][1] .= '  '.__('Group'); $groups = users_get_groups(); $own_info = get_user_info($config['id_user']); $return_all_group = false; if (users_can_manage_group_all('LM') === true || $disabled) { $return_all_group = true; } else { if ($id_group == 0) { $id_group = users_get_first_group(false, 'LM', false); } } $table->data[0][1] .= ' '; $table->data[0][1] .= '
'.html_print_select_groups( false, 'AR', $return_all_group, 'id_group', $id_group, '', '', 0, true, false, true, '', (!$is_management_allowed | $disabled) ).'
'; $table->data[1][0] = __('Description'); $table->data[1][1] = html_print_textarea( 'description', 10, 30, $description, '', true, '', (!$is_management_allowed | $disabled) ); $table->data[2][0] = __('Priority'); $table->data[2][1] = html_print_select( get_priorities(), 'priority', $priority, '', 0, 0, true, false, false, '', (!$is_management_allowed | $disabled) ); if (is_metaconsole() === true) { $table->data[3][0] = __('Wizard level'); $wizard_levels = [ 'nowizard' => __('No wizard'), 'basic' => __('Basic'), 'advanced' => __('Advanced'), ]; $table->data[3][1] = html_print_select($wizard_levels, 'wizard_level', $wizard_level, '', '', -1, true, false, false); } else { $table->data[2][1] .= html_print_input_hidden('wizard_level', $wizard_level, true); } } if ($step == 2) { echo ui_get_using_system_timezone_warning(); } // If it's the last step it will redirect to template lists. if ($step >= LAST_STEP) { echo '
'; } else { echo ''; } html_print_table($table); echo '
'; if ($id) { html_print_input_hidden('id', $id); html_print_input_hidden('update_template', 1); } else { html_print_input_hidden('create_template', 1); } if (!$disabled) { if ($is_management_allowed === true) { if ($step >= LAST_STEP) { html_print_submit_button( __('Finish'), 'finish', false, 'class="sub upd"' ); } else { html_print_input_hidden('step', ($step + 1)); if ($step == 2) { // Javascript onsubmit to avoid min = 0 and max = 0. html_print_submit_button( __('Next'), 'next', false, 'class="sub next" onclick="return check_fields_step2();"' ); } else { html_print_submit_button( __('Next'), 'next', false, 'class="sub next"' ); } } } } echo '
'; echo '
'; enterprise_hook('close_meta_frame'); ui_require_javascript_file('pandora_alerts'); ui_include_time_picker(); ui_require_jquery_file('ui.datepicker-'.get_user_language(), 'include/javascript/i18n/'); ui_require_javascript_file('tiny_mce', 'include/javascript/tiny_mce/'); ui_require_css_file('main.min', 'include/javascript/fullcalendar/'); ui_require_javascript_file('main.min', 'include/javascript/fullcalendar/'); ui_require_javascript_file('pandora_fullcalendar'); ?>