"" . html_print_image ("images/list.png", true, array ("title" =>__('List'))) . "" ); // Header ui_print_page_header( __("Planned Downtime"), "images/gm_monitoring.png", false, "planned_downtime", true, $buttons); //Initialize data $id_group = (int) get_parameter ('id_group'); $name = (string) get_parameter ('name'); $description = (string) get_parameter ('description'); $type_downtime = (string) get_parameter('type_downtime', 'quiet'); $type_execution = (string) get_parameter('type_execution', 'once'); $type_periodicity = (string) get_parameter('type_periodicity', 'weekly'); $once_date_from = (string) get_parameter ('once_date_from', date(DATE_FORMAT)); $once_time_from = (string) get_parameter ('once_time_from', date(TIME_FORMAT)); $once_date_to = (string) get_parameter ('once_date_to', date(DATE_FORMAT)); $once_time_to = (string) get_parameter ('once_time_to', date(TIME_FORMAT, time() + SECONDS_1HOUR)); $periodically_day_from = (int) get_parameter ('periodically_day_from', 1); $periodically_day_to = (int) get_parameter ('periodically_day_to', 31); $periodically_time_from = (string) get_parameter ('periodically_time_from', date(TIME_FORMAT)); $periodically_time_to = (string) get_parameter ('periodically_time_to', date(TIME_FORMAT, time() + SECONDS_1HOUR)); $monday = (bool) get_parameter ('monday'); $tuesday = (bool) get_parameter ('tuesday'); $wednesday = (bool) get_parameter ('wednesday'); $thursday = (bool) get_parameter ('thursday'); $friday = (bool) get_parameter ('friday'); $saturday = (bool) get_parameter ('saturday'); $sunday = (bool) get_parameter ('sunday'); $first_create = (int) get_parameter ('first_create'); $create_downtime = (int) get_parameter ('create_downtime'); $update_downtime = (int) get_parameter ('update_downtime'); $edit_downtime = (int) get_parameter ('edit_downtime'); $id_downtime = (int) get_parameter ('id_downtime'); $id_agent = (int) get_parameter ('id_agent'); $insert_downtime_agent = (int) get_parameter ('insert_downtime_agent'); $delete_downtime_agent = (int) get_parameter ('delete_downtime_agent'); $groups = users_get_groups (); // INSERT A NEW DOWNTIME_AGENT ASSOCIATION if ($insert_downtime_agent === 1) { $agents = (array) get_parameter ('id_agents'); $module_names = (array) get_parameter ('module'); $all_modules = false; if (empty($module_names)) { $all_modules = true; } else { //It is empty. if ($module_names[0] == "0") $all_modules = true; } $num_agents = count($agents); for ($a = 0; $a < $num_agents; $a++) { $id_agente_dt = $agents[$a]; $values = array( 'id_downtime' => $id_downtime, 'id_agent' => $id_agente_dt, 'all_modules' => $all_modules ); $result = db_process_sql_insert('tplanned_downtime_agents', $values); if ($result && !$all_modules) { foreach ($module_names as $module_name) { $module = modules_get_agentmodule_id($module_name, $id_agente_dt); $values = array( 'id_downtime' => $id_downtime, 'id_agent' => $id_agente_dt, 'id_agent_module' => $module["id_agente_modulo"] ); $result = db_process_sql_insert('tplanned_downtime_modules', $values); if ($result) { $values = array('id_user' => $config['id_user']); $result = db_process_sql_update('tplanned_downtime', $values, array('id' => $id_downtime)); } } } } } // DELETE A DOWNTIME_AGENT ASSOCIATION if ($delete_downtime_agent === 1) { $id_da = (int) get_parameter ('id_downtime_agent'); $row_to_delete = db_get_row('tplanned_downtime_agents', 'id', $id_da); $result = db_process_sql_delete('tplanned_downtime_agents', array('id' => $id_da)); if ($result) { //Delete modules in downtime db_process_sql_delete('tplanned_downtime_modules', array('id_downtime' => $row_to_delete['id_downtime'], 'id_agent' => $id_agent)); } } // UPDATE OR CREATE A DOWNTIME (MAIN DATA, NOT AGENT ASSOCIATION) if ($create_downtime || $update_downtime) { $check = db_get_value ('name', 'tplanned_downtime', 'name', $name); $datetime_from = strtotime ($once_date_from . ' ' . $once_time_from); $datetime_to = strtotime ($once_date_to . ' ' . $once_time_to); $now = strtotime(date(DATE_FORMAT). ' ' . date(TIME_FORMAT)); if ($type_execution == 'once' && !$config["past_planned_downtimes"] && $datetime_from < $now) { ui_print_error_message(__('Not created. Error inserting data. Start time must be higher than the current time' )); } else if ($type_execution == 'once' && $datetime_from >= $datetime_to) { ui_print_error_message(__('Not created. Error inserting data') . ". " .__('The end date must be higher than the start date')); } else if ($type_execution == 'once' && $datetime_to <= $now) { ui_print_error_message(__('Not created. Error inserting data') . ". " .__('The end date must be higher than the current time')); } else if ($type_execution == 'periodically' && (($type_periodicity == 'weekly' && $periodically_time_from >= $periodically_time_to) || ($type_periodicity == 'monthly' && $periodically_day_from == $periodically_day_to && $periodically_time_from >= $periodically_time_to))) { ui_print_error_message(__('Not created. Error inserting data') . ". " .__('The end time must be higher than the start time')); } else if ($type_execution == 'periodically' && $type_periodicity == 'monthly' && $periodically_day_from > $periodically_day_to) { ui_print_error_message(__('Not created. Error inserting data') . ". " .__('The end day must be higher than the start day')); } else { $sql = ''; if ($create_downtime) { if (trim(io_safe_output($name)) != '') { if (!$check) { $values = array( 'name' => $name, 'description' => $description, 'date_from' => $datetime_from, 'date_to' => $datetime_to, 'executed' => 0, 'id_group' => $id_group, 'only_alerts' => 0, 'monday' => $monday, 'tuesday' => $tuesday, 'wednesday' => $wednesday, 'thursday' => $thursday, 'friday' => $friday, 'saturday' => $saturday, 'sunday' => $sunday, 'periodically_time_from' => $periodically_time_from, 'periodically_time_to' => $periodically_time_to, 'periodically_day_from' => $periodically_day_from, 'periodically_day_to' => $periodically_day_to, 'type_downtime' => $type_downtime, 'type_execution' => $type_execution, 'type_periodicity' => $type_periodicity, 'id_user' => $config['id_user'] ); if ($config["dbtype"] == 'oracle') { $values['periodically_time_from'] = '1970/01/01 ' . $values['periodically_time_from']; $values['periodically_time_to'] = '1970/01/01 ' . $values['periodically_time_to']; } $result = db_process_sql_insert('tplanned_downtime', $values); } else { ui_print_error_message( __('Each planned downtime must have a different name')); } } else { ui_print_error_message( __('Planned downtime must have a name')); } } else if ($update_downtime) { if (trim(io_safe_output($name)) != '') { $values = array( 'name' => $name, 'description' => $description, 'date_from' => $datetime_from, 'date_to' => $datetime_to, 'id_group' => $id_group, 'only_alerts' => 0, 'monday' => $monday, 'tuesday' => $tuesday, 'wednesday' => $wednesday, 'thursday' => $thursday, 'friday' => $friday, 'saturday' => $saturday, 'sunday' => $sunday, 'periodically_time_from' => $periodically_time_from, 'periodically_time_to' => $periodically_time_to, 'periodically_day_from' => $periodically_day_from, 'periodically_day_to' => $periodically_day_to, 'type_downtime' => $type_downtime, 'type_execution' => $type_execution, 'type_periodicity' => $type_periodicity, 'id_user' => $config['id_user'] ); if ($config["dbtype"] == 'oracle') { $values['periodically_time_from'] = '1970/01/01 ' . $values['periodically_time_from']; $values['periodically_time_to'] = '1970/01/01 ' . $values['periodically_time_to']; } $result = db_process_sql_update('tplanned_downtime', $values, array('id' => $id_downtime)); } else { ui_print_error_message( __('Planned downtime must have a name')); } } if ($result === false) { if ($create_downtime) { ui_print_error_message(__('Could not be created')); } else { ui_print_error_message(__('Could not be updated')); } } else { if ($create_downtime && $name && !$check) { $id_downtime = $result; ui_print_success_message(__('Successfully created')); } else if ($update_downtime && $name) { ui_print_success_message(__('Successfully updated')); } } } } // Have any data to show ? if ($id_downtime > 0) { // Columns of the table tplanned_downtime $columns = array( 'id', 'name', 'description', 'date_from', 'date_to', 'executed', 'id_group', 'only_alerts', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday', 'periodically_time_from', 'periodically_time_to', 'periodically_day_from', 'periodically_day_to', 'type_downtime', 'type_execution', 'type_periodicity', 'id_user', ); switch ($config["dbtype"]) { case "mysql": case "postgresql": $columns_str = implode(',', $columns); $sql = "SELECT $columns_str FROM tplanned_downtime WHERE id = $id_downtime"; break; case "oracle": // Oracle doesn't have TIME type, so we should transform the DATE value $new_time_from = "TO_CHAR(periodically_time_from, 'HH24:MI:SS') AS periodically_time_from"; $new_time_to = "TO_CHAR(periodically_time_to, 'HH24:MI:SS') AS periodically_time_to"; $time_from_key = array_search('periodically_time_from', $columns); $time_to_key = array_search('periodically_time_to', $columns); if ($time_from_key !== false) $columns[$time_from_key] = $new_time_from; if ($time_to_key !== false) $columns[$time_to_key] = $new_time_to; $columns_str = implode(',', $columns); $sql = "SELECT $columns_str FROM tplanned_downtime WHERE id = $id_downtime"; break; } $result = db_get_row_sql ($sql); $name = (string) $result["name"]; $id_group = (int) $result['id_group']; $description = (string) $result["description"]; $type_downtime = (string) $result['type_downtime']; $type_execution = (string) $result['type_execution']; $type_periodicity = (string) $result['type_periodicity']; $once_date_from = date(DATE_FORMAT, $result["date_from"]); $once_date_to = date(DATE_FORMAT, $result["date_to"]); $once_time_from = date(TIME_FORMAT, $result["date_from"]); $once_time_to = date(TIME_FORMAT, $result["date_to"]); $periodically_time_from = (string) $result['periodically_time_from']; $periodically_time_to = (string) $result['periodically_time_to']; $periodically_day_from = (int) $result['periodically_day_from']; $periodically_day_to = (int) $result['periodically_day_to']; $monday = (bool) $result['monday']; $tuesday = (bool) $result['tuesday']; $wednesday = (bool) $result['wednesday']; $thursday = (bool) $result['thursday']; $friday = (bool) $result['friday']; $saturday = (bool) $result['saturday']; $sunday = (bool) $result['sunday']; $executed = (bool) $result['executed']; } // when the planned down time is in execution, only action to postpone on once type is enabled and the other are disabled. $disabled_in_execution = $executed ? 1 : 0; $table = new StdClass(); $table->class = 'databox filters'; $table->width = '100%'; $table->data = array (); $table->data[0][0] = __('Name'); $table->data[0][1] = html_print_input_text ('name', $name, '', 25, 40, true, $disabled_in_execution); $table->data[1][0] = __('Group'); $table->data[1][1] = html_print_select_groups(false, "AW", true, 'id_group', $id_group, '', '', 0, true, false, true, '', $disabled_in_execution); $table->data[2][0] = __('Description'); $table->data[2][1] = html_print_textarea ('description', 3, 35, $description, '', true); $table->data[3][0] = __('Type').ui_print_help_tip(__("Quiet: Disable modules that we indicate below.").'
'. __("Disable Agents: Disables the selected agents.").'
'. __("Disable Alerts: Disable alerts for the selected agents."), true); $table->data[3][1] = html_print_select(array('quiet' => __('Quiet'), 'disable_agents' => __('Disabled Agents'), 'disable_agents_alerts' => __('Disabled only Alerts')), 'type_downtime', $type_downtime, 'change_type_downtime()', '', 0, true, false, true, '', $disabled_in_execution); $table->data[4][0] = __('Execution'); $table->data[4][1] = html_print_select(array('once' => __('Once'), 'periodically' => __('Periodically')), 'type_execution', $type_execution, 'change_type_execution();', '', 0, true, false, true, '', $disabled_in_execution); $days = array_combine(range(1, 31), range(1, 31)); $table->data[5][0] = __('Configure the time') . " " . ui_print_help_icon ('planned_downtime_time', true);; $table->data[5][1] = " "; echo '
'; if ($id_downtime > 0) { echo ""; echo "
"; } //Editor form html_print_table ($table); html_print_input_hidden ('id_agent', $id_agent); echo '
'; if ($id_downtime > 0) { html_print_input_hidden ('update_downtime', 1); html_print_input_hidden ('id_downtime', $id_downtime); html_print_submit_button (__('Update'), 'updbutton', false, 'class="sub upd"'); } else { html_print_input_hidden ('create_downtime', 1); html_print_submit_button (__('Add'), 'crtbutton', false, 'class="sub wand"'); } echo '
'; echo ''; if ($id_downtime > 0) { echo "
"; // Show available agents to include into downtime echo '

' . __('Available agents') . ':

'; $filter_group = get_parameter("filter_group", 0); $filter_cond = ''; if ($filter_group > 0) $filter_cond = " AND id_grupo = $filter_group "; $sql = sprintf ("SELECT tagente.id_agente, tagente.nombre, tagente.id_grupo FROM tagente WHERE tagente.id_agente NOT IN ( SELECT tagente.id_agente FROM tagente, tplanned_downtime_agents WHERE tplanned_downtime_agents.id_agent = tagente.id_agente AND tplanned_downtime_agents.id_downtime = %d ) AND disabled = 0 $filter_cond ORDER by tagente.nombre", $id_downtime); $downtimes = db_get_all_rows_sql ($sql); $data = array (); if ($downtimes) { foreach ($downtimes as $downtime) { if (check_acl ($config["id_user"], $downtime['id_grupo'], "AW")) { $data[$downtime['id_agente']] = $downtime['nombre']; } } } $disabled_add_button = false; if (empty($data) || $disabled_in_execution) { $disabled_add_button = true; } echo "
"; html_print_select_groups(false, "AW", true, 'filter_group', $filter_group, '', '', '', false, false, true, '', false, 'width:180px'); echo "

"; html_print_submit_button (__('Filter by group'), '', false, 'class="sub next"',false); echo "
"; echo "
"; echo html_print_select ($data, "id_agents[]", '', '', '', 0, false, true, true, '', false, 'width: 180px;'); echo '

' . __('Available modules:') . ui_print_help_tip (__('Only for type Quiet for downtimes.'), true) . '

'; if ($type_downtime != 'quiet') echo '
"; //Start Overview of existing planned downtime echo '

'.__('Agents planned for this downtime').':

'; $sql = sprintf ("SELECT tagente.nombre, tplanned_downtime_agents.id, tagente.id_os, tagente.id_agente, tagente.id_grupo, tagente.ultimo_contacto, tplanned_downtime_agents.all_modules FROM tagente, tplanned_downtime_agents WHERE tplanned_downtime_agents.id_agent = tagente.id_agente AND tplanned_downtime_agents.id_downtime = %d ", $id_downtime); $downtimes = db_get_all_rows_sql ($sql); if ($downtimes === false) { echo '
' . __('There are no scheduled downtimes') . '
'; } else { $table = new stdClass(); $table->id = 'list'; $table->class = 'databox data'; $table->width = '100%'; $table->data = array (); $table->head = array (); $table->head[0] = __('Name'); $table->head[1] = __('Group'); $table->head[2] = __('OS'); $table->head[3] = __('Last contact'); $table->head['count_modules'] = __('Modules'); if (!$executed) { $table->head[5] = __('Actions'); $table->align[5] = "center"; $table->size[5] = "5%"; } foreach ($downtimes as $downtime) { $data = array (); $data[0] = $downtime['nombre']; $data[1] = db_get_sql ("SELECT nombre FROM tgrupo WHERE id_grupo = " . $downtime["id_grupo"]); $data[2] = ui_print_os_icon($downtime["id_os"], true, true); $data[3] = $downtime["ultimo_contacto"]; if ($type_downtime == 'disable_agents_alerts') { $data['count_modules'] = __("All alerts"); } elseif ($type_downtime == 'disable_agents') { $data['count_modules'] = __("Entire agent"); } else { if ($downtime["all_modules"]) { $data['count_modules'] = __("All modules"); } else { $data['count_modules'] = __("Some modules"); } } if (!$executed) { $data[5] = ''; if ($type_downtime != 'disable_agents_alerts' && $type_downtime != 'disable_agents') { $data[5] = '' . html_print_image("images/config.png", true, array("border" => '0', "alt" => __('Delete'))) . ""; } $data[5] .= '' . html_print_image("images/cross.png", true, array("border" => '0', "alt" => __('Delete'))) . ""; } $table->data['agent_' . $downtime["id_agente"]] = $data; } html_print_table ($table); } } $table = new stdClass(); $table->id = 'loading'; $table->width = '100%'; $table->colspan['loading'][0] = '6'; $table->style[0] = 'text-align: center;'; $table->data = array(); $table->data['loading'] = array(); $table->data['loading'][0] = html_print_image("images/spinner.gif", true); echo "
"; html_print_table ($table); echo "
"; $table = new stdClass(); $table->id = 'editor'; $table->width = '100%'; $table->colspan['module'][1] = '5'; $table->data = array(); $table->data['module'] = array(); $table->data['module'][0] = ''; $table->data['module'][1] = "

" . __('Modules') . "

"; //List of modules, empty, it is populated by javascript. $table->data['module'][1] = "
" . __('Module') . " " . __('Action') . "
" . __("Add Module:") . ' ' . html_print_select(array(), 'modules', '', '', '', 0, true) . " " . '' . "" . "
"; echo "
"; html_print_table ($table); echo "
"; echo "
"; echo "
"; html_print_image("images/spinner.gif"); echo "
"; echo "
"; echo ""; echo ""; echo ""; ui_include_time_picker(); ui_require_jquery_file("ui.datepicker-" . get_user_language(), "include/javascript/i18n/"); ?>