2019-08-08 13:36:12 +02:00
< ? php
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2010 Artica Soluciones Tecnologicas
// Please see http://pandorafms.org for full contribution list
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation for version 2.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Load global vars
global $config ;
check_login ();
2019-09-20 12:37:47 +02:00
if ( ! ( check_acl ( $config [ 'id_user' ], 0 , 'IW' ) && check_acl ( $config [ 'id_user' ], 0 , 'IR' ))) {
2019-09-02 17:01:41 +02:00
// Doesn't have access to this page.
2019-08-08 13:36:12 +02:00
db_pandora_audit ( 'ACL Violation' , 'Trying to access IntegriaIMS ticket creation' );
include 'general/noaccess.php' ;
exit ;
}
2019-09-23 15:16:31 +02:00
require_once $config [ 'homedir' ] . '/include/functions_integriaims.php' ;
2019-09-20 12:37:47 +02:00
$update = ( isset ( $_GET [ 'incident_id' ]) === true );
2019-09-23 15:09:52 +02:00
// Header tabs.
$onheader = integriaims_tabs ( 'create_tab' , $_GET [ 'incident_id' ]);
2019-09-20 12:37:47 +02:00
if ( $update ) {
2019-09-23 13:14:20 +02:00
ui_print_page_header ( __ ( 'Update Integria IMS Incident' ), '' , false , '' , false , $onheader );
2019-09-20 12:37:47 +02:00
} else {
2019-09-23 13:14:20 +02:00
ui_print_page_header ( __ ( 'Create Integria IMS Incident' ), '' , false , '' , false , $onheader );
2019-09-20 12:37:47 +02:00
}
2019-08-08 13:36:12 +02:00
2019-09-02 17:01:41 +02:00
// Check if Integria integration enabled.
2019-08-08 13:36:12 +02:00
if ( $config [ 'integria_enabled' ] == 0 ) {
ui_print_error_message ( __ ( 'Integria integration must be enabled in Pandora setup' ));
return ;
}
2019-09-02 17:01:41 +02:00
// Check connection to Integria IMS API.
$has_connection = integria_api_call ( $config [ 'integria_hostname' ], $config [ 'integria_user' ], $config [ 'integria_pass' ], $config [ 'integria_api_pass' ], 'get_login' , []);
2019-08-08 13:36:12 +02:00
2019-09-02 17:01:41 +02:00
if ( $has_connection === false ) {
ui_print_error_message ( __ ( 'Integria IMS API is not reachable' ));
return ;
}
2019-09-23 12:48:20 +02:00
// Styles.
ui_require_css_file ( 'integriaims' );
2019-09-17 13:38:17 +02:00
// If everything OK, get parameters from Integria IMS API in order to populate combos.
$integria_group_values = [];
2019-09-02 17:01:41 +02:00
$integria_criticity_values = [];
$integria_users_values = [];
$integria_types_values = [];
2019-09-17 13:38:17 +02:00
$integria_status_values = [];
2019-09-02 17:01:41 +02:00
$integria_groups_csv = integria_api_call ( $config [ 'integria_hostname' ], $config [ 'integria_user' ], $config [ 'integria_pass' ], $config [ 'integria_api_pass' ], 'get_groups' , []);
2019-09-17 13:38:17 +02:00
get_array_from_csv_data_pair ( $integria_groups_csv , $integria_group_values );
$integria_status_csv = integria_api_call ( $config [ 'integria_hostname' ], $config [ 'integria_user' ], $config [ 'integria_pass' ], $config [ 'integria_api_pass' ], 'get_incidents_status' , []);
get_array_from_csv_data_pair ( $integria_status_csv , $integria_status_values );
2019-09-02 17:01:41 +02:00
$integria_criticity_levels_csv = integria_api_call ( $config [ 'integria_hostname' ], $config [ 'integria_user' ], $config [ 'integria_pass' ], $config [ 'integria_api_pass' ], 'get_incident_priorities' , []);
2019-09-17 13:38:17 +02:00
get_array_from_csv_data_pair ( $integria_criticity_levels_csv , $integria_criticity_values );
2019-09-02 17:01:41 +02:00
$integria_users_csv = integria_api_call ( $config [ 'integria_hostname' ], $config [ 'integria_user' ], $config [ 'integria_pass' ], $config [ 'integria_api_pass' ], 'get_users' , []);
$csv_array = explode ( " \n " , $integria_users_csv );
foreach ( $csv_array as $csv_line ) {
if ( ! empty ( $csv_line )) {
$integria_users_values [ $csv_line ] = $csv_line ;
}
}
$integria_types_csv = integria_api_call ( $config [ 'integria_hostname' ], $config [ 'integria_user' ], $config [ 'integria_pass' ], $config [ 'integria_api_pass' ], 'get_types' , []);
2019-09-17 13:38:17 +02:00
get_array_from_csv_data_pair ( $integria_types_csv , $integria_types_values );
2019-09-02 17:01:41 +02:00
$event_id = ( int ) get_parameter ( 'from_event' );
2019-09-17 13:38:17 +02:00
$incident_id_edit = ( int ) get_parameter ( 'incident_id' );
$create_incident = ( bool ) get_parameter ( 'create_incident' , 0 );
$update_incident = ( bool ) get_parameter ( 'update_incident' , 0 );
$incident_group_id = ( int ) get_parameter ( 'group' );
$incident_criticity_id = ( int ) get_parameter ( 'criticity' );
$incident_owner = get_parameter ( 'owner' );
$incident_type = ( int ) get_parameter ( 'type' );
$incident_creator = get_parameter ( 'creator' );
$incident_status = ( int ) get_parameter ( 'status' );
2019-09-02 17:01:41 +02:00
$incident_title = events_get_field_value_by_event_id ( $event_id , get_parameter ( 'incident_title' ));
$incident_content = events_get_field_value_by_event_id ( $event_id , get_parameter ( 'incident_content' ));
2019-09-23 16:59:16 +02:00
// Separator conversions.
$incident_title = str_replace ( ',' , ':::' , $incident_title );
$incident_content = str_replace ( ',' , ':::' , $incident_content );
2019-09-17 13:38:17 +02:00
// If incident id is specified, retrieve incident values from api to populate combos with such values.
if ( $update ) {
// Call Integria IMS API method to get details of an incident given its id.
$result_api_call = integria_api_call ( $config [ 'integria_hostname' ], $config [ 'integria_user' ], $config [ 'integria_pass' ], $config [ 'integria_api_pass' ], 'get_incident_details' , [ $incident_id_edit ]);
// API call does not return indexes, therefore future modifications of API function in Integria IMS may lead to inconsistencies when accessing resulting array in this file.
2019-09-23 16:59:16 +02:00
$incident_details_separator = explode ( ',' , $result_api_call );
$incident_details = array_map (
function ( $item ) {
return str_replace ( ':::' , ',' , $item );
},
$incident_details_separator
);
2019-09-17 13:38:17 +02:00
}
// Perform action.
if ( $create_incident === true ) {
2019-09-02 17:01:41 +02:00
// Call Integria IMS API method to create an incident.
2019-09-23 12:48:20 +02:00
$result_api_call = integria_api_call ( $config [ 'integria_hostname' ], $incident_creator , $config [ 'integria_pass' ], $config [ 'integria_api_pass' ], 'create_incident' , [ $incident_title , $incident_group_id , $incident_criticity_id , $incident_content , '' , $incident_type , '' , $incident_owner , '0' , $incident_status ]);
2019-08-08 13:36:12 +02:00
2019-09-19 10:24:43 +02:00
// Necessary to explicitly set true if not false because function returns api call result in case of success instead of true value.
2019-09-02 17:01:41 +02:00
$incident_created_ok = ( $result_api_call != false ) ? true : false ;
2019-08-08 13:36:12 +02:00
2019-09-02 17:01:41 +02:00
ui_print_result_message (
$incident_created_ok ,
2019-09-17 13:38:17 +02:00
__ ( 'Successfully created in Integria IMS' ),
__ ( 'Could not be created in Integria IMS' )
);
} else if ( $update_incident === true ) {
// Call Integria IMS API method to update an incident.
2019-09-23 12:48:20 +02:00
$result_api_call = integria_api_call ( $config [ 'integria_hostname' ], $config [ 'integria_user' ], $config [ 'integria_pass' ], $config [ 'integria_api_pass' ], 'update_incident' , [ $incident_id_edit , $incident_title , $incident_content , '' , $incident_group_id , $incident_criticity_id , 0 , $incident_status , $incident_owner , 0 , $incident_type ]);
2019-09-17 13:38:17 +02:00
2019-09-19 10:24:43 +02:00
// Necessary to explicitly set true if not false because function returns api call result in case of success instead of true value.
2019-09-17 13:38:17 +02:00
$incident_updated_ok = ( $result_api_call != false ) ? true : false ;
ui_print_result_message (
$incident_updated_ok ,
__ ( 'Successfully updated in Integria IMS' ),
__ ( 'Could not be updated in Integria IMS' )
2019-09-02 17:01:41 +02:00
);
}
2019-08-08 13:36:12 +02:00
2019-09-19 10:24:43 +02:00
// Main table.
2019-08-08 13:36:12 +02:00
$table = new stdClass ();
$table -> width = '100%' ;
$table -> id = 'add_alert_table' ;
2019-09-17 13:38:17 +02:00
$table -> class = 'databox filters integria_incidents_options' ;
2019-08-08 13:36:12 +02:00
$table -> head = [];
$table -> data = [];
$table -> size = [];
$table -> size = [];
2019-09-17 13:38:17 +02:00
$table -> style [ 0 ] = 'width: 33%; padding-right: 50px; padding-left: 100px;' ;
$table -> style [ 1 ] = 'width: 33%; padding-right: 50px; padding-left: 50px;' ;
$table -> style [ 2 ] = 'width: 33%; padding-right: 100px; padding-left: 50px;' ;
$table -> colspan [ 0 ][ 0 ] = 2 ;
$table -> colspan [ 3 ][ 0 ] = 3 ;
2019-09-23 12:48:20 +02:00
$help_macros = isset ( $_GET [ 'from_event' ]) ? ui_print_help_icon ( 'response_macros' , true ) : '' ;
$table -> data [ 0 ][ 0 ] = '<div class="label_select"><p class="input_label">' . __ ( 'Title' ) . ': ' . $help_macros . '</p>' ;
2019-09-17 13:38:17 +02:00
$table -> data [ 0 ][ 0 ] .= '<div class="label_select_parent">' . html_print_input_text (
'incident_title' ,
$update ? $incident_details [ 3 ] : $config [ 'incident_title' ],
__ ( 'Name' ),
50 ,
100 ,
true ,
false ,
2019-09-20 12:37:47 +02:00
true ,
'' ,
'w100p'
2019-09-17 13:38:17 +02:00
) . '</div>' ;
2019-09-23 12:48:20 +02:00
$table -> data [ 0 ][ 2 ] = html_print_image ( 'images/integria_logo_gray.png' , true , [ 'style' => 'width: 70%; float: right;' ], false );
2019-09-17 13:38:17 +02:00
$table -> data [ 1 ][ 0 ] = '<div class="label_select"><p class="input_label">' . __ ( 'Type' ) . ': </p>' ;
$table -> data [ 1 ][ 0 ] .= '<div class="label_select_parent">' . html_print_select (
$integria_types_values ,
'type' ,
$update ? $incident_details [ 17 ] : $config [ 'incident_type' ],
2019-08-08 13:36:12 +02:00
'' ,
__ ( 'Select' ),
0 ,
true ,
false ,
true ,
'' ,
2019-09-17 13:38:17 +02:00
false ,
'width: 100%;'
) . '</div>' ;
$table -> data [ 2 ][ 0 ] = '<div class="label_select"><p class="input_label">' . __ ( 'Status' ) . ': </p>' ;
$table -> data [ 2 ][ 0 ] .= '<div class="label_select_parent">' . html_print_select (
$integria_status_values ,
'status' ,
$update ? $incident_details [ 6 ] : $config [ 'incident_status' ],
2019-08-08 13:36:12 +02:00
'' ,
__ ( 'Select' ),
2019-09-20 12:37:47 +02:00
1 ,
2019-08-08 13:36:12 +02:00
true ,
false ,
true ,
'' ,
2019-09-17 13:38:17 +02:00
false ,
'width: 100%;'
) . '</div>' ;
$table -> data [ 1 ][ 1 ] = '<div class="label_select"><p class="input_label">' . __ ( 'Group' ) . ': </p>' ;
$table -> data [ 1 ][ 1 ] .= '<div class="label_select_parent">' . html_print_select (
$integria_group_values ,
'group' ,
$update ? $incident_details [ 8 ] : $config [ 'default_group' ],
2019-08-08 13:36:12 +02:00
'' ,
2019-09-23 12:48:20 +02:00
'' ,
2019-08-08 13:36:12 +02:00
0 ,
true ,
false ,
true ,
'' ,
2019-09-17 13:38:17 +02:00
false ,
'width: 100%;'
) . '</div>' ;
2019-08-08 13:36:12 +02:00
2019-09-17 13:38:17 +02:00
$table -> data [ 2 ][ 1 ] = '<div class="label_select"><p class="input_label">' . __ ( 'Creator' ) . ': </p>' ;
$table -> data [ 2 ][ 1 ] .= '<div class="label_select_parent">' . html_print_autocomplete_users_from_integria (
'creator' ,
$update ? $incident_details [ 10 ] : $config [ 'default_creator' ],
2019-09-23 12:48:20 +02:00
true ,
'30' ,
$update ,
2019-09-17 13:38:17 +02:00
true
) . '</div>' ;
$table -> data [ 1 ][ 2 ] = '<div class="label_select"><p class="input_label">' . __ ( 'Criticity' ) . ': </p>' ;
$table -> data [ 1 ][ 2 ] .= '<div class="label_select_parent">' . html_print_select (
$integria_criticity_values ,
'criticity' ,
$update ? $incident_details [ 7 ] : $config [ 'default_criticity' ],
2019-08-08 13:36:12 +02:00
'' ,
__ ( 'Select' ),
0 ,
true ,
false ,
true ,
'' ,
false ,
2019-09-17 13:38:17 +02:00
'width: 100%;'
) . '</div>' ;
$table -> data [ 2 ][ 2 ] = '<div class="label_select"><p class="input_label">' . __ ( 'Owner' ) . ': </p>' ;
$table -> data [ 2 ][ 2 ] .= '<div class="label_select_parent">' . html_print_autocomplete_users_from_integria (
'owner' ,
2019-09-23 12:48:20 +02:00
$update ? $incident_details [ 5 ] : $config [ 'default_owner' ],
2019-08-08 13:36:12 +02:00
true
2019-09-17 13:38:17 +02:00
) . '</div>' ;
2019-08-08 13:36:12 +02:00
2019-09-23 12:48:20 +02:00
$table -> data [ 3 ][ 0 ] = '<div class="label_select"><p class="input_label">' . __ ( 'Description' ) . ': ' . $help_macros . '</p>' ;
2019-09-17 13:38:17 +02:00
$table -> data [ 3 ][ 0 ] .= '<div class="label_select_parent">' . html_print_textarea (
2019-08-08 13:36:12 +02:00
'incident_content' ,
2019-09-17 13:38:17 +02:00
3 ,
20 ,
$update ? $incident_details [ 4 ] : $config [ 'incident_content' ],
2019-08-08 13:36:12 +02:00
'' ,
true
2019-09-17 13:38:17 +02:00
) . '</div>' ;
2019-08-08 13:36:12 +02:00
2019-09-19 10:24:43 +02:00
// Print forms and stuff.
echo '<form id="create_integria_incident_form" name="create_integria_incident_form" method="POST">' ;
2019-08-08 13:36:12 +02:00
html_print_table ( $table );
2019-09-17 13:38:17 +02:00
if ( ! $update ) {
html_print_input_hidden ( 'create_incident' , 1 );
} else {
html_print_input_hidden ( 'update_incident' , 1 );
}
2019-09-23 12:48:20 +02:00
echo '</form>' ;
2019-09-19 10:24:43 +02:00
2019-09-02 17:01:41 +02:00
echo '<div style="width: 100%; text-align:right;">' ;
2019-09-20 12:37:47 +02:00
if ( $update ) {
html_print_submit_button ( __ ( 'Update' ), 'accion' , false , 'form="create_integria_incident_form" class="sub wand"' );
} else {
html_print_submit_button ( __ ( 'Create' ), 'accion' , false , 'form="create_integria_incident_form" class="sub wand"' );
}
2019-09-02 17:01:41 +02:00
echo '</div>' ;