$id_report))) !== false; } /** * Deletes a report. * * @param int Report id to be deleted. * * @return bool True if deleted, false otherwise. */ function reports_delete_report ($id_report) { $id_report = safe_int ($id_report); if (empty ($id_report)) return false; $report = reports_get_report ($id_report); if ($report === false) return false; @db_process_sql_delete ('treport_content', array ('id_report' => $id_report)); return @db_process_sql_delete ('treport', array ('id_report' => $id_report)); } /** * Deletes a content from a report. * * @param int Report content id to be deleted. * * @return bool True if deleted, false otherwise. */ function reports_get_content ($id_report_content, $filter = false, $fields = false) { $id_report_content = safe_int ($id_report_content); if (empty ($id_report_content)) return false; if (! is_array ($filter)) $filter = array (); if (is_array ($fields)) $fields[] = 'id_report'; $filter['id_rc'] = $id_report_content; $content = @db_get_row_filter ('treport_content', $filter, $fields); if ($content === false) return false; $report = reports_get_report ($content['id_report']); if ($report === false) return false; return $content; } /** * Get all the contents of a report. * * @param int Report id to get contents. * @param array Extra filters for the contents. * @param array Fields to be fetched. All fields by default * * @return array All the contents of a report. */ function reports_create_content ($id_report, $values) { global $config; $id_report = safe_int ($id_report); if (empty ($id_report)) return false; $report = reports_get_report ($id_report); if ($report === false) return false; if (! is_array ($values)) return false; $values['id_report'] = $id_report; switch ($config["dbtype"]) { case "mysql": unset ($values['`order`']); $order = (int) db_get_value ('MAX(`order`)', 'treport_content', 'id_report', $id_report); $values['`order`'] = $order + 1; break; case "postgresql": case "oracle": unset ($values['"order"']); $order = (int) db_get_value ('MAX("order")', 'treport_content', 'id_report', $id_report); $values['"order"'] = $order + 1; break; } return @db_process_sql_insert ('treport_content', $values); } /** * Get all the contents of a report. * * @param int Report id to get contents. * @param array Extra filters for the contents. * @param array Fields to be fetched. All fields by default * * @return array All the contents of a report. */ function reports_get_contents ($id_report, $filter = false, $fields = false) { $id_report = safe_int ($id_report); if (empty ($id_report)) return array (); $report = reports_get_report ($id_report); if ($report === false) return array (); if (! is_array ($filter)) $filter = array (); $filter['id_report'] = $id_report; $filter['order'] = '`order`'; $contents = db_get_all_rows_filter ('treport_content', $filter, $fields); if ($contents === false) return array (); return $contents; } /** * Moves a content from a report up. * * @param int Report content id to be moved. * * @return bool True if moved, false otherwise. */ function reports_move_content_up ($id_report_content) { global $config; if (empty ($id_report_content)) return false; $content = reports_get_content ($id_report_content); if ($content === false) return false; switch ($config["dbtype"]) { case "mysql": $order = db_get_value ('`order`', 'treport_content', 'id_rc', $id_report_content); /* Set the previous element order to the current of the content we want to change */ db_process_sql_update ('treport_content', array ('`order` = `order` + 1'), array ('id_report' => $content['id_report'], '`order` = '.($order - 1))); return (@db_process_sql_update ('treport_content', array ('`order` = `order` - 1'), array ('id_rc' => $id_report_content))) !== false; break; case "postgresql": case "oracle": $order = db_get_value ('"order"', 'treport_content', 'id_rc', $id_report_content); /* Set the previous element order to the current of the content we want to change */ db_process_sql_update ('treport_content', array ('"order" = "order" + 1'), array ('id_report' => $content['id_report'], '"order" = '.($order - 1))); return (@db_process_sql_update ('treport_content', array ('"order" = "order" - 1'), array ('id_rc' => $id_report_content))) !== false; break; } } /** * Moves a content from a report up. * * @param int Report content id to be moved. * * @return bool True if moved, false otherwise. */ function reports_move_content_down ($id_report_content) { global $config; if (empty ($id_report_content)) return false; $content = reports_get_content ($id_report_content); if ($content === false) return false; switch ($config["dbtype"]) { case "mysql": $order = db_get_value ('`order`', 'treport_content', 'id_rc', $id_report_content); /* Set the previous element order to the current of the content we want to change */ db_process_sql_update ('treport_content', array ('`order` = `order` - 1'), array ('id_report' => (int) $content['id_report'], '`order` = '.($order + 1))); return (@db_process_sql_update ('treport_content', array ('`order` = `order` + 1'), array ('id_rc' => $id_report_content))) !== false; break; case "postgresql": case "oracle": $order = db_get_value ('"order"', 'treport_content', 'id_rc', $id_report_content); /* Set the previous element order to the current of the content we want to change */ db_process_sql_update ('treport_content', array ('"order" = "order" - 1'), array ('id_report' => (int) $content['id_report'], '"order" = '.($order + 1))); return (@db_process_sql_update ('treport_content', array ('"order" = "order" + 1'), array ('id_rc' => $id_report_content))) !== false; break; } } /** * Deletes a content from a report. * * @param int Report content id to be deleted. * * @return bool True if deleted, false otherwise. */ function reports_delete_content ($id_report_content) { if (empty ($id_report_content)) return false; $content = reports_get_content ($id_report_content); if ($content === false) return false; switch ($config["dbtype"]) { case "mysql": $order = db_get_value ('`order`', 'treport_content', 'id_rc', $id_report_content); db_process_sql_update ('treport_content', array ('`order` = `order` - 1'), array ('id_report' => (int) $content['id_report'], '`order` > '.$order)); break; case "postgresql": case "oracle": $order = db_get_value ('"order"', 'treport_content', 'id_rc', $id_report_content); db_process_sql_update ('treport_content', array ('"order" = "order" - 1'), array ('id_report' => (int) $content['id_report'], '"order" > '.$order)); break; } return (@db_process_sql_delete ('treport_content', array ('id_rc' => $id_report_content))) !== false; } /** * Get report type name from type id. * * @param int $type Type id of the report. * @param boolean $template Set true for to get types for templates. By default false. * * @return string Report type name. */ function get_report_name ($type, $template = false) { $types = reports_get_report_types ($template); if (! isset ($types[$type])) return __('Unknown'); if ($type == 'automatic_custom_graph') return __('Custom graph'); return $types[$type]['name']; } /** * Get report type data source from type id. * * TODO: Better documentation as to what this function does * * @param mixed $type Type id or type name of the report. * * @return string Report type name. */ function get_report_type_data_source ($type) { switch ($type) { case 1: case 'simple_graph': case 6: case 'monitor_report': case 7: case 'avg_value': case 8: case 'max_value': case 9: case 'min_value': case 10: case 'sumatory': case 'agent_detailed_event': return 'module'; break; case 2: case 'custom_graph': case 'automatic_custom_graph': return 'custom-graph'; break; case 3: case 'SLA': case 4: case 'event_report': case 5: case 'alert_report': case 11: case 'general_group_report': case 12: case 'monitor_health': case 13: case 'agents_detailed': return 'agent-group'; break; } return 'unknown'; } /** * Get report types in an array. * * @param boolean $template Set true for to get types for templates. By default false. * @param boolean $not_editor When this function is not used in item editors. * * @return array An array with all the possible reports in Pandora where the array index is the report id. */ function reports_get_report_types ($template = false, $not_editor = false) { global $config; $types = array (); $types['simple_graph'] = array('optgroup' => __('Graphs'), 'name' => __('Simple graph')); $types['simple_baseline_graph'] = array('optgroup' => __('Graphs'), 'name' => __('Simple baseline graph')); if ($not_editor == false) $types['automatic_custom_graph'] = array( 'optgroup' => __('Graphs'), 'name' => __('Custom graph')); $types['custom_graph'] = array('optgroup' => __('Graphs'), 'name' => __('Custom graph')); # Only pandora managers have access to the whole database if (check_acl ($config['id_user'], 0, "PM")) { $types['sql_graph_vbar'] = array('optgroup' => __('Graphs'), 'name' => __('SQL vertical bar graph')); $types['sql_graph_pie'] = array('optgroup' => __('Graphs'), 'name' => __('SQL pie graph')); $types['sql_graph_hbar'] = array('optgroup' => __('Graphs'), 'name' => __('SQL horizonal bar graph')); } if ($template) { $types['automatic_graph'] = array('optgroup' => __('Graphs'), 'name' => __('Automatic combined Graph')); } $types['availability_graph'] = array('optgroup' => __('Graphs'), 'name' => __('Availability graph')); $types['module_histogram_graph'] = array('optgroup' => __('Graphs'), 'name' => __('Module Histogram graph')); $types['TTRT'] = array('optgroup' => __('ITIL'), 'name' => __('TTRT')); $types['TTO'] = array('optgroup' => __('ITIL'), 'name' => __('TTO')); $types['MTBF'] = array('optgroup' => __('ITIL'), 'name' => __('MTBF')); $types['MTTR'] = array('optgroup' => __('ITIL'), 'name' => __('MTTR')); $types['SLA'] = array('optgroup' => __('SLA'), 'name' => __('S.L.A.')); if ($config['enterprise_installed']) { $types['SLA_monthly'] = array('optgroup' => __('SLA'), 'name' => __('Monthly S.L.A.')); $types['SLA_weekly'] = array('optgroup' => __('SLA'), 'name' => __('Weekly S.L.A.')); $types['SLA_hourly'] = array('optgroup' => __('SLA'), 'name' => __('Hourly S.L.A.')); if (!$config['metaconsole'] && !$template) { $types['SLA_services'] = array('optgroup' => __('SLA'), 'name' => __('Services S.L.A.')); } } $types['prediction_date'] = array('optgroup' => __('Forecasting'), 'name' => __('Prediction date')); $types['projection_graph'] = array('optgroup' => __('Forecasting'), 'name' => __('Projection graph')); $types['avg_value'] = array('optgroup' => __('Modules'), 'name' => __('Avg. Value')); $types['max_value'] = array('optgroup' => __('Modules'), 'name' => __('Max. Value')); $types['min_value'] = array('optgroup' => __('Modules'), 'name' => __('Min. Value')); $types['monitor_report'] = array('optgroup' => __('Modules'), 'name' => __('Monitor report')); $types['database_serialized'] = array('optgroup' => __('Modules'), 'name' => __('Serialize data')); $types['sumatory'] = array('optgroup' => __('Modules'), 'name' => __('Summatory')); $types['historical_data'] = array('optgroup' => __('Modules'), 'name' => __('Historical Data')); $types['increment'] = array('optgroup' => __('Modules'), 'name' => __('Increment')); $types['general'] = array('optgroup' => __('Grouped'), 'name' => __('General')); $types['group_report'] = array('optgroup' => __('Grouped'), 'name' => __('Group report')); $types['exception'] = array('optgroup' => __('Grouped'), 'name' => __('Exception')); if ($config['metaconsole'] != 1) $types['agent_module'] = array('optgroup' => __('Grouped'), 'name' => __('Agents/Modules')); # Only pandora managers have access to the whole database if (check_acl ($config['id_user'], 0, "PM")) { $types['sql'] = array('optgroup' => __('Grouped'), 'name' => __('SQL query')); } $types['top_n'] = array('optgroup' => __('Grouped'), 'name' => __('Top n')); $types['network_interfaces_report'] = array('optgroup' => __('Grouped'), 'name' => __('Network interfaces')); $types['availability'] = array('optgroup' => __('Grouped'), 'name' => __('Availability')); $types['text'] = array('optgroup' => __('Text/HTML '), 'name' => __ ('Text')); $types['url'] = array('optgroup' => __('Text/HTML '), 'name' => __('Import text from URL')); $types['alert_report_module'] = array('optgroup' => __('Alerts'), 'name' => __('Alert report module')); $types['alert_report_agent'] = array('optgroup' => __('Alerts'), 'name' => __('Alert report agent')); if (!$template) { $types['alert_report_group'] = array('optgroup' => __('Alerts'), 'name' => __('Alert report group')); } $types['event_report_agent'] = array('optgroup' => __('Events'), 'name' => __('Event report agent')); $types['event_report_module'] = array('optgroup' => __('Events'), 'name' => __('Event report module')); $types['event_report_group'] = array('optgroup' => __('Events'), 'name' => __('Event report group')); if ($config['enterprise_installed']) { $types['inventory'] = array('optgroup' => __('Inventory'), 'name' => __('Inventory')); if (!$template) { $types['inventory_changes'] = array('optgroup' => __('Inventory'), 'name' => __('Inventory changes')); } } if (!$template) { $types['agent_configuration'] = array('optgroup' => __('Configuration'), 'name' => __('Agent configuration')); $types['group_configuration'] = array('optgroup' => __('Configuration'), 'name' => __('Group configuration')); $types['netflow_area'] = array('optgroup' => __('Netflow'), 'name' => __('Netflow area chart')); $types['netflow_pie'] = array('optgroup' => __('Netflow'), 'name' => __('Netflow pie chart')); $types['netflow_data'] = array('optgroup' => __('Netflow'), 'name' => __('Netflow data table')); $types['netflow_statistics'] = array('optgroup' => __('Netflow'), 'name' => __('Netflow statistics table')); $types['netflow_summary'] = array('optgroup' => __('Netflow'), 'name' => __('Netflow summary table')); } if ($config['enterprise_installed']) { $types['event_report_log'] = array('optgroup' => __('Log'), 'name' => __('Log report')); } return $types; } ?>