'.html_print_image('images/setup.png', true, ['title' => __('Configure Integria IMS')]).''; $list_tab['text'] = ''.html_print_image('images/list.png', true, ['title' => __('Ticket list')]).''; $create_tab['text'] = ''.html_print_image('images/pencil.png', true, ['title' => __('New ticket')]).''; switch ($active_tab) { case 'setup_tab': $setup_tab['active'] = true; $list_tab['active'] = false; $create_tab['active'] = false; break; case 'list_tab': $setup_tab['active'] = false; $list_tab['active'] = true; $create_tab['active'] = false; break; case 'create_tab': $setup_tab['active'] = false; $list_tab['active'] = false; $create_tab['active'] = true; break; default: $setup_tab['active'] = false; $list_tab['active'] = false; $create_tab['active'] = false; break; } if ($view) { $create_tab['text'] = ''.html_print_image('images/pencil.png', true, ['title' => __('Edit ticket')]).''; $view_tab['text'] = ''.html_print_image('images/operation.png', true, ['title' => __('View ticket')]).''; // When the current page is the View page. if (!$active_tab) { $view_tab['active'] = true; } } $onheader = []; if (check_acl($config['id_user'], 0, 'IR') && $view) { $onheader['view'] = $view_tab; } if (check_acl($config['id_user'], 0, 'PM')) { $onheader['configure'] = $setup_tab; } if (check_acl($config['id_user'], 0, 'IR')) { $onheader['list'] = $list_tab; } if (check_acl($config['id_user'], 0, 'IW')) { $onheader['create'] = $create_tab; } return $onheader; } /** * Gets all the details of Integria IMS API * * @param string $details Type of API call. * @param number $detail_index Send index if you want return the text. * * @return string or array with result of API call. */ function integriaims_get_details($details, $detail_index=false) { global $config; switch ($details) { case 'status': $operation = 'get_incidents_status'; break; case 'group': $operation = 'get_groups'; break; case 'priority': $operation = 'get_incident_priorities'; break; case 'resolution': $operation = 'get_incidents_resolutions'; break; case 'type': $operation = 'get_types'; break; default: // code... break; } $api_call = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], $operation); $result = []; get_array_from_csv_data_pair($api_call, $result); if ($detail_index !== false) { if ($result[$detail_index] == '' || $result[$detail_index] === null) { return __('None'); } else { return $result[$detail_index]; } } else { return $result; } } /** * Perform an API call to Integria IMS. * * @param string API host URL. * @param string User name. * @param string User password. * @param string API password. * @param string API Operation. * @param array Array with parameters required by the API function. * * @return boolean True if API request succeeded, false if API request failed. */ function integria_api_call($api_hostname, $user, $user_pass, $api_pass, $operation, $params_array=[], $show_credentials_error_msg=false) { $params_string = implode(',', $params_array); $url_data = [ 'user' => $user, 'user_pass' => $user_pass, 'pass' => $api_pass, 'op' => $operation, 'params' => html_entity_decode($params_string), ]; // Build URL for API request. $url = $api_hostname.'/integria/include/api.php'; // ob_start(); // $out = fopen('php://output', 'w'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $url_data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_STDERR, $out); $result = curl_exec($ch); // fclose($out); // $debug = ob_get_clean(); $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = false; if ($result === false) { $error = curl_error($ch); } curl_close($ch); if ($error === true || $http_status !== 200) { if ($show_credentials_error_msg === true) { ui_print_error_message(__('API request failed. Please check Integria IMS\' access credentials in Pandora setup.')); } return false; } else { return $result; } } // Parse CSV consisting of one or more lines of the form key-value pair into an array. function get_array_from_csv_data_pair($csv_data, &$array_values) { $csv_array = explode("\n", $csv_data); foreach ($csv_array as $csv_value) { if (empty($csv_value)) { continue; } $new_csv_value = str_getcsv($csv_value); $array_values[$new_csv_value[0]] = $new_csv_value[1]; } } /** * Parse CSV consisting of all lines into an array. * * @param string $csv_data Data returned of csv api call. * @param string $array_values Returned array. * @param array $index Array to create an associative index (opcional). */ function get_array_from_csv_data_all($csv_data, &$array_values, $index=false) { $csv_array = explode("\n", $csv_data); foreach ($csv_array as $csv_value) { if (empty($csv_value)) { continue; } $new_csv_value = str_getcsv($csv_value); if ($index !== false) { foreach ($new_csv_value as $key => $value) { $new_csv_value_index[$index[$key]] = str_replace(':::', ',', $value); ; } $array_values[$new_csv_value[0]] = $new_csv_value_index; } else { $new_csv_value_comma = array_map( function ($item) { return str_replace(':::', ',', $item); }, $new_csv_value ); $array_values[$new_csv_value[0]] = $new_csv_value_comma; } } } /** * Print priority for Integria IMS with colors. * * @param string $priority value of priority in Integria IMS. * @param string $priority_label text shown in color box. * * @return HTML code to print the color box. */ function ui_print_integria_incident_priority($priority, $priority_label) { global $config; $output = ''; switch ($priority) { case 0: $color = COL_UNKNOWN; break; case 1: $color = COL_NORMAL; break; case 10: $color = COL_NOTINIT; break; case 2: $color = COL_WARNING; break; case 3: $color = COL_ALERTFIRED; break; case 4: $color = COL_CRITICAL; break; } $output = '
'; $output .= $priority_label; $output .= '
'; return $output; } /** * Get tickets from Integria IMS. * * @param array $tickets_filters Filters to send to API. * * @return array Tickets returned by API call. */ function get_tickets_integriaims($tickets_filters) { global $config; // Filters. $incident_text = $tickets_filters['incident_text']; $incident_status = $tickets_filters['incident_status']; $incident_group = $tickets_filters['incident_group']; $incident_owner = $tickets_filters['incident_owner']; $incident_creator = $tickets_filters['incident_creator']; $incident_priority = $tickets_filters['incident_priority']; $incident_resolution = $tickets_filters['incident_resolution']; $created_from = $tickets_filters['created_from']; $created_to = $tickets_filters['created_to']; // API call. $result_api_call_list = integria_api_call( $config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_incidents', [ $incident_text, $incident_status, $incident_group, $incident_priority, '0', $incident_owner, $incident_creator, ] ); // Return array of api call 'get_incidents'. $array_get_incidents = []; get_array_from_csv_data_all($result_api_call_list, $array_get_incidents); // Modify $array_get_incidents if filter for resolution exists. $filter_resolution = []; foreach ($array_get_incidents as $key => $value) { if ($incident_resolution !== '' && ($array_get_incidents[$key][12] == $incident_resolution)) { $filter_resolution[$key] = $array_get_incidents[$key]; continue; } } if ($incident_resolution !== '') { $array_get_incidents = $filter_resolution; } // Modify $array_get_incidents if filter for date is selected. if ($created_from !== '' && $created_to !== '') { $date = []; $date_utimestamp = []; foreach ($array_get_incidents as $key => $value) { // Change format date / to -. $date[$key] = date('Y-m-d', strtotime($array_get_incidents[$key][9])); // Covert date to utimestamp. $date_utimestamp[$key] = strtotime($date[$key]); } // Change format date / to -. $created_from_date = date('Y-m-d', strtotime($created_from)); $created_to_date = date('Y-m-d', strtotime($created_to)); // Covert date to utimestamp. $created_from_timestamp = strtotime($created_from_date); $created_to_timestamp = strtotime($created_to_date); // Dates within the selected period. $selected_period = array_filter( $date_utimestamp, function ($value) use ($created_from_timestamp, $created_to_timestamp) { return ($value >= $created_from_timestamp && $value <= $created_to_timestamp); } ); // Return incidents with the correct dates. $filter_date = []; foreach ($array_get_incidents as $key => $value) { foreach ($selected_period as $index => $value) { if ($array_get_incidents[$key][0] == $index) { $filter_date[$key] = $array_get_incidents[$key]; continue; } } } $array_get_incidents = $filter_date; } return $array_get_incidents; }