($numChars)) {
$half_lenght = intval(($numChars - 3) / 2); // '/2' because [...] is in the middle of the word.
$truncateText2 = mb_strimwidth($text, (strlen($text) - $half_lenght), strlen($text));
// In case $numChars were an odd number.
$half_lenght = $numChars - $half_lenght - 3;
$truncateText = mb_strimwidth($text, 0, $half_lenght) . $suffix;
$truncateText=$truncateText . $truncateText2;
if ($showTextInTitle) {
$truncateText = ''.$truncateText.'';
}
if ($showTextInAToopTip) {
$truncateText = $truncateText . ' ' . $text . '';
}
}
else {
$truncateText = $text;
}
if ($return == true) {
return $truncateText;
}
else {
echo $truncateText;
}
}
/**
* Print a string with a smaller font depending on its size.
*
* @param string $string String to be display with a smaller font.
* @param boolean $return Flag to return as string or not.
*/
function printSmallFont ($string, $return = true) {
$str = str_replace (' ', ' ', $string);
$length = strlen($str);
if ($length >= 30) {
$size = 0.7;
} elseif ($length >= 20) {
$size = 0.8;
} elseif ($length >= 10) {
$size = 0.9;
} elseif ($length < 10) {
$size = 1;
}
$s = '';
$s .= $string;
$s .= '';
if ($return) {
return $s;
} else {
echo $s;
}
}
/**
* Prints a generic message between tags.
*
* @param string The message string to be displayed
* @param string the class to user
* @param string Any other attributes to be set for the tag.
* @param bool Whether to output the string or return it
* @param string What tag to use (you could specify something else than
* h3 like div or h2)
*
* @return string HTML code if return parameter is true.
*/
function ui_print_message ($message, $class = '', $attributes = '', $return = false, $tag = 'h3') {
$output = '<'.$tag.(empty ($class) ? '' : ' class="'.$class.'" ').$attributes.'>'.$message.''.$tag.'>';
if ($return)
return $output;
echo $output;
}
/**
* Prints an error message.
*
* @param string The error message to be displayed
* @param string Any other attributes to be set for the tag.
* @param bool Whether to output the string or return it
* @param string What tag to use (you could specify something else than
* h3 like div or h2)
*
* @return string HTML code if return parameter is true.
*/
function ui_print_error_message ($message, $attributes = '', $return = false, $tag = 'h3') {
return ui_print_message ($message, 'error', $attributes, $return, $tag);
}
/**
* Prints an operation success message.
*
* @param string The message to be displayed
* @param string Any other attributes to be set for the tag.
* @param bool Whether to output the string or return it
* @param string What tag to use (you could specify something else than
* h3 like div or h2)
*
* @return string HTML code if return parameter is true.
*/
function ui_print_success_message ($message, $attributes = '', $return = false, $tag = 'h3') {
return ui_print_message ($message, 'suc', $attributes, $return, $tag);
}
/**
* Evaluates a result using empty() and then prints an error or success message
*
* @param mixed The results to evaluate. 0, NULL, false, '' or
* array() is bad, the rest is good
* @param string The string to be displayed if the result was good
* @param string The string to be displayed if the result was bad
* @param string Any other attributes to be set for the h3
* @param bool Whether to output the string or return it
* @param string What tag to use (you could specify something else than
* h3 like div or h2)
*
* @return string HTML code if return parameter is true.
*/
function ui_print_result_message ($result, $good = '', $bad = '', $attributes = '', $return = false, $tag = 'h3') {
if ($good == '' || $good === false)
$good = __('Request successfully processed');
if ($bad == '' || $bad === false)
$bad = __('Error processing request');
if (empty ($result)) {
return ui_print_error_message ($bad, $attributes, $return, $tag);
}
return ui_print_success_message ($good, $attributes, $return, $tag);
}
/**
* Evaluates a unix timestamp and returns a span (or whatever tag specified)
* with as title the correctly formatted full timestamp and a time comparation
* in the tag
*
* @param int Any type of timestamp really, but we prefer unixtime
* @param bool Whether to output the string or return it
* @param array An array with different options for this function
* Key html_attr: which html attributes to add (defaults to none)
* Key tag: Which html tag to use (defaults to span)
* Key prominent: Overrides user preference and display "comparation" or "timestamp"
* key units: The type of units.
*
* @return string HTML code if return parameter is true.
*/
function ui_print_timestamp ($unixtime, $return = false, $option = array ()) {
global $config;
//TODO: Add/use a javascript timer for the seconds so it automatically updates as time passes by
if (isset ($option["html_attr"])) {
$attributes = $option["html_attr"];
} else {
$attributes = "";
}
if (isset ($option["tag"])) {
$tag = $option["tag"];
} else {
$tag = "span";
}
if (empty ($option["style"])) {
$style = 'style="white-space:nowrap;"';
} else {
$style = 'style="'.$option["style"].'"';
}
if (!empty ($option["prominent"])) {
$prominent = $option["prominent"];
} else {
$prominent = $config["prominent_time"];
}
if (!is_numeric ($unixtime)) {
$unixtime = strtotime ($unixtime);
}
//prominent_time is either timestamp or comparation
if ($unixtime <= 0) {
$title = __('Unknown').'/'.__('Never');
$data = __('Unknown');
}
elseif ($prominent == "timestamp") {
$title = human_time_comparation ($unixtime);
$data = date ($config["date_format"], $unixtime);
}
else {
$title = date ($config["date_format"], $unixtime);
$units = 'large';
if (isset($option['units'])) {
$units = $option['units'];
}
$data = human_time_comparation ($unixtime, $units);
}
$output = '<'.$tag;
switch ($tag) {
default:
//Usually tags have title attributes, so by default we add, then fall through to add attributes and data
$output .= ' title="'.$title.'"';
case "h1":
case "h2":
case "h3":
//Above tags don't have title attributes
$output .= ' '.$attributes.' '.$style.'>'.$data.''.$tag.'>';
}
if ($return)
return $output;
echo $output;
}
/**
* Prints a username with real name, link to the user_edit page etc.
*
* @param string The username to render
* @param bool Whether to return or print
*
* @return string HTML code if return parameter is true.
*/
function ui_print_username ($username, $return = false) {
$string = ''.get_user_fullname ($username).'';
if ($return)
return $string;
echo $string;
}
/**
* Print group icon within a link
*
* @param int Group id
* @param bool Whether to return or print
* @param string What path to use (relative to images/). Defaults to groups_small
*
* @return string HTML code if return parameter is true.
*/
function ui_print_group_icon ($id_group, $return = false, $path = "groups_small", $style='', $link = true) {
if($id_group > 0)
$icon = (string) get_db_value ('icon', 'tgrupo', 'id_grupo', (int) $id_group);
else
$icon = "world";
if($style == '')
$style = 'width: 16px; height: 16px;';
$output = '';
if ($link)
$output = '';
if (empty ($icon))
$output .= ' - ';
else
$output .= print_image("images/" . $path . "/" . $icon . ".png", true, array("style" => $style, "class" => "bot", "alt" => get_group_name($id_group, true), "title" => get_group_name ($id_group, true)));
if ($link)
$output .= '';
if (!$return)
echo $output;
return $output;
}
/**
* Print group icon within a link. Other version.
*
* @param int Group id
* @param bool Whether to return or print
* @param string What path to use (relative to images/). Defaults to groups_small
*
* @return string HTML code if return parameter is true.
*/
function ui_print_group_icon_path ($id_group, $return = false, $path = "images/groups_small", $style='', $link = true) {
if($id_group > 0)
$icon = (string) get_db_value ('icon', 'tgrupo', 'id_grupo', (int) $id_group);
else
$icon = "world";
if($style == '')
$style = 'width: 16px; height: 16px;';
$output = '';
if ($link)
$output = '';
if (empty ($icon))
$output .= ' - ';
else
$output .= '';
if ($link)
$output .= '';
if (!$return)
echo $output;
return $output;
}
/**
* Get the icon of an operating system.
*
* @param int Operating system id
* @param bool Whether to also append the name of the OS after the icon
* @param bool Whether to return or echo the result
*
* @return string HTML with icon of the OS
*/
function ui_print_os_icon ($id_os, $name = true, $return = false) {
$icon = (string) get_db_value ('icon_name', 'tconfig_os', 'id_os', (int) $id_os);
$os_name = get_os_name ($id_os);
if (empty ($icon)) {
return "-";
}
$output = print_image("images/os_icons/".$icon, true, array("alt" => $os_name, "title" => $os_name));
if ($name === true) {
$output .= ' - '.$os_name;
}
if (!$return)
echo $output;
return $output;
}
/**
* Prints an agent name with the correct link
*
* @param int Agent id
* @param bool Whether to return the string or echo it too
* @param int Now uses styles to accomplish this
* @param string Style of name in css.
*
* @return string HTML with agent name and link
*/
function ui_print_agent_name ($id_agent, $return = false, $cutoff = 0, $style = '', $cutname = false) {
$agent_name = (string) get_agent_name ($id_agent);
$agent_name_full = $agent_name;
if ($cutname) {
$agent_name = ui_print_truncate_text($agent_name, $cutoff);
}
$output = ''.$agent_name.'';
//TODO: Add a pretty javascript (using jQuery) popup-box with agent details
if ($return)
return $output;
echo $output;
}
/**
* Formats a row from the alert table and returns an array usable in the table function
*
* @param array A valid (non empty) row from the alert table
* @param bool Whether or not this is a combined alert
* @param bool Whether to print the agent information with the module information
* @param string Tab where the function was called from (used for urls)
*
* @return array A formatted array with proper html for use in $table->data (6 columns)
*/
function ui_format_alert_row ($alert, $compound = false, $agent = true, $url = '') {
$actionText = "";
require_once ("include/functions_alerts.php");
$isFunctionPolicies = enterprise_include_once ('include/functions_policies.php');
if ($isFunctionPolicies !== ENTERPRISE_NOT_HOOK) {
if ($agent) {
$index = array('policy' => 0, 'standby' => 1, 'force_execution' => 2, 'agent_name' => 3, 'module_name' => 4,
'description' => 5, 'template' => 5, 'action' => 6, 'last_fired' => 7, 'status' => 8,
'validate' => 9);
}
else {
$index = array('policy' => 0, 'standby' => 1, 'force_execution' => 2, 'agent_name' => 3, 'module_name' => 3,
'description' => 4, 'template' => 4, 'action' => 5, 'last_fired' => 6, 'status' => 7,
'validate' => 8);
}
}
else {
if ($agent) {
$index = array('standby' => 0, 'force_execution' => 1, 'agent_name' => 2, 'module_name' => 3,
'description' => 4, 'template' => 4, 'action' => 5, 'last_fired' => 6, 'status' => 7,
'validate' => 7);
}
else {
$index = array('standby' => 0, 'force_execution' => 1, 'agent_name' => 2, 'module_name' => 2,
'description' => 3, 'template' => 3, 'action' => 4, 'last_fired' => 5, 'status' => 6,
'validate' => 7);
}
}
if ($alert['disabled']) {
$disabledHtmlStart = '';
$disabledHtmlEnd = '';
$styleDisabled = "font-style: italic; color: #aaaaaa;";
}
else {
$disabledHtmlStart = '';
$disabledHtmlEnd = '';
$styleDisabled = "";
}
if (empty ($alert))
{
if ($isFunctionPolicies !== ENTERPRISE_NOT_HOOK)
return array ("", "", "", "", "", "", "", "");
else
return array ("", "", "", "", "", "", "");
}
// Get agent id
if ($compound) {
$id_agent = $alert['id_agent'];
$description = $alert['description'];
}
else {
$id_agent = get_agentmodule_agent ($alert['id_agent_module']);
$template = alerts_get_alert_template ($alert['id_alert_template']);
$description = safe_output($template['name']);
}
$data = array ();
if (($isFunctionPolicies !== ENTERPRISE_NOT_HOOK) && (!$compound)) {
$policyInfo = isAlertInPolicy2($alert['id'], false);
if ($policyInfo === false)
$data[$index['policy']] = '';
else {
$img = 'images/policies.png';
$data[$index['policy']] = '' .
print_image($img,true, array('title' => $policyInfo['name'])) .
'';
}
}
else if (($isFunctionPolicies !== ENTERPRISE_NOT_HOOK) && ($compound))
$data[$index['policy']] = '';
// Standby
$data[$index['standby']] = '';
if (isset ($alert["standby"]) && $alert["standby"] == 1) {
$data[$index['standby']] = print_image ('images/bell_pause.png', true, array('title' => __('Standby on')));
}
// Force alert execution
$data[$index['force_execution']] = '';
if (! $compound) {
if ($alert["force_execution"] == 0) {
$data[$index['force_execution']] =
'' . print_image("images/target.png", true) . '';
}
else {
$data[$index['force_execution']] =
'' . print_image("images/refresh.png", true) . '';
}
}
$data[$index['agent_name']] = $disabledHtmlStart;
if ($compound) {
$data[$index['agent_name']] .= ui_print_agent_name ($id_agent, true, 20, $styleDisabled);
}
elseif ($agent == 0) {
$data[$index['module_name']] .= mb_substr (get_agentmodule_name ($alert["id_agent_module"]), 0, 20);
}
else {
$data[$index['agent_name']] .= ui_print_agent_name (get_agentmodule_agent ($alert["id_agent_module"]), true, 20, $styleDisabled);
$data[$index['module_name']] = mb_substr (get_agentmodule_name ($alert["id_agent_module"]), 0, 20);
}
$data[$index['agent_name']] .= $disabledHtmlEnd;
$data[$index['description']] = '';
if (! $compound) {
$data[$index['template']] .= '';
$data[$index['template']] .= print_image ('images/zoom.png', true);
$data[$index['template']] .= ' ';
$actionDefault = get_db_value_sql("SELECT id_alert_action
FROM talert_templates WHERE id = " . $alert['id_alert_template']);
}
else {
$actionDefault = get_db_value_sql("SELECT id_alert_action FROM talert_compound_actions WHERE id_alert_compound = " . $alert['id']);
}
$data[$index['description']] .= $disabledHtmlStart . mb_substr (safe_input ($description), 0, 35) . $disabledHtmlEnd;
$actions = alerts_get_alert_agent_module_actions ($alert['id'], false, $compound);
if (!empty($actions)) {
$actionText = '
* ui_require_css_file ('pandora');
* // Would include include/styles/pandora.js
*
*
* @return bool True if the file was added. False if the file doesn't exist.
*/
function ui_require_css_file ($name, $path = 'include/styles/') {
global $config;
$filename = $path.$name.'.css';
if (! isset ($config['css']))
$config['css'] = array ();
if (isset ($config['css'][$name]))
return true;
if (! file_exists ($filename) && ! file_exists ($config['homedir'].'/'.$filename))
return false;
$config['css'][$name] = $filename;
return true;
}
/**
* Add a javascript file to the HTML head tag.
*
* To make a javascript file available just put it in include/javascript. The
* file name should be like "name.js". The "name" would be the value
* needed to pass to this function.
*
* @param string Script name to add without the "jquery." prefix and the ".js"
* suffix. Example:
*
* ui_require_javascript_file ('pandora');
* // Would include include/javascript/pandora.js
*
*
* @return bool True if the file was added. False if the file doesn't exist.
*/
function ui_require_javascript_file ($name, $path = 'include/javascript/') {
global $config;
$filename = $path.$name.'.js';
if (! isset ($config['js']))
$config['js'] = array ();
if (isset ($config['js'][$name]))
return true;
/* We checks two paths because it may fails on enterprise */
if (! file_exists ($filename) && ! file_exists ($config['homedir'].'/'.$filename))
return false;
$config['js'][$name] = $filename;
return true;
}
/**
* Add a jQuery file to the HTML head tag.
*
* To make a jQuery script available just put it in include/javascript. The
* file name should be like "jquery.name.js". The "name" would be the value
* needed to pass to this function. Notice that this function does not manage
* jQuery denpendencies.
*
* @param string Script name to add without the "jquery." prefix and the ".js"
* suffix. Example:
*
* ui_require_jquery_file ('form');
* // Would include include/javascript/jquery.form.js
*
*
* @return bool True if the file was added. False if the file doesn't exist.
*/
function ui_require_jquery_file ($name, $path = 'include/javascript/') {
global $config;
$filename = $path.'jquery.'.$name.'.js';
if (! isset ($config['jquery']))
$config['jquery'] = array ();
if (isset ($config['jquery'][$name]))
return true;
/* We checks two paths because it may fails on enterprise */
if (! file_exists ($filename) && ! file_exists ($config['homedir'].'/'.$filename))
return false;
$config['jquery'][$name] = $filename;
return true;
}
/**
* Callback function to add stuff to the head. This allows us to add scripts
* to the header after the fact as well as extensive validation.
*
* DO NOT CALL print_f, echo, ob_start, ob_flush, ob_end functions here.
*
* To add css just put them in include/styles and then add them to the
* $config['css'] array
*
* @param string Callback will fill this with the current buffer.
* @param bitfield Callback will fill this with a bitfield (see ob_start)
*
* @return string String to return to the browser
*/
function ui_process_page_head ($string, $bitfield) {
global $config;
if (isset ($config['ignore_callback']) && $config['ignore_callback'] == true) {
return;
}
$output = '';
if ($config["refr"] > 0) {
$query = ui_get_url_refresh (false);
$output .= '';
}
$output .= "\n\t";
$output .= ''; echo ''; echo 'Parameter values:'; echo ''; foreach ($trace['args'] as $arg) { echo '
'; echo '- '; print_r ($arg); echo '
'; } echo '
'; print_r ($var); echo ''; return true; } /** * Prints icon of a module type * * @param int Module Type ID * @param bool Whether to return or print * * @return string An HTML string with the icon. Printed if return is false */ function ui_print_moduletype_icon ($id_moduletype, $return = false) { global $config; $type = get_db_row ("ttipo_modulo", "id_tipo", (int) $id_moduletype, array ("descripcion", "icon")); if ($type === false) { $type = array (); $type["descripcion"] = __('Unknown type'); $type["icon"] = 'b_down.png'; } $imagepath = 'images/'.$type["icon"]; if (! file_exists ($config['homedir'].'/'.$imagepath)) $imagepath = ENTERPRISE_DIR.'/'.$imagepath; return print_image ($imagepath, $return, array ("border" => 0, "title" => $type["descripcion"])); } /** * Format a file size from bytes to a human readable meassure. * * @param int File size in bytes * @return string Bytes converted to a human readable meassure. */ function ui_format_filesize ($bytes) { $bytes = (int) $bytes; $strs = array ('B', 'kB', 'MB', 'GB', 'TB'); if ($bytes <= 0) { return "0 ".$strs[0]; } $con = 1024; $log = (int) (log ($bytes, $con)); return format_numeric ($bytes / pow ($con, $log), 1).' '.$strs[$log]; } /** * Returns the current path to the selected image set to show the * status of agents and alerts. * * @return array An array with the image path, image width and image height. */ function ui_get_status_images_path () { global $config; $imageset = $config["status_images_set"]; if (strpos ($imageset, ",") === false) $imageset .= ",40x18"; list ($imageset, $sizes) = preg_split ("/\,/", $imageset); if (strpos ($sizes, "x") === false) $sizes .= "x18"; list ($imagewidth, $imageheight) = preg_split ("/x/", $sizes); $imagespath = 'images/status_sets/'.$imageset; return array ($imagespath); } define ('STATUS_MODULE_OK', 'module_ok.png'); define ('STATUS_MODULE_CRITICAL', 'module_critical.png'); define ('STATUS_MODULE_WARNING', 'module_warning.png'); define ('STATUS_MODULE_NO_DATA', 'module_no_data.png'); define ('STATUS_AGENT_CRITICAL', 'agent_critical.png'); define ('STATUS_AGENT_WARNING', 'agent_warning.png'); define ('STATUS_AGENT_DOWN', 'agent_down.png'); define ('STATUS_AGENT_OK', 'agent_ok.png'); define ('STATUS_AGENT_NO_DATA', 'agent_no_data.png'); define ('STATUS_ALERT_FIRED', 'alert_fired.png'); define ('STATUS_ALERT_NOT_FIRED', 'alert_not_fired.png'); define ('STATUS_ALERT_DISABLED', 'alert_disabled.png'); define ('STATUS_SERVER_OK', 'server_ok.png'); define ('STATUS_SERVER_DOWN', 'server_down.png'); /** * Prints an image representing a status. * * @param string * @param string * @param bool Whether to return an output string or echo now (optional, echo by default). * * @return string HTML code if return parameter is true. */ function ui_print_status_image ($type, $title = "", $return = false, $options = false) { list ($imagepath) = ui_get_status_images_path (); $imagepath .= "/".$type; if($options === false) { $options = array(); } $options['title'] = $title; return print_image ($imagepath, $return, $options); } /** * Prints a form to search agents. * * @param array Extra options for the function. To be documented. * @param array Extra and hidden filter for the agent search. */ function ui_print_ui_agents_list ($options = false, $filter = false, $return = false) { global $config; $output = ''; $group_filter = true; $text_filter = true; $access = 'AR'; $table_heads = array (__('Name'), __('Group'), __('Status')); $table_renders = array ('view_link', 'group', 'status'); $table_align = array ('', '', 'center'); $table_size = array ('50%', '45%', '5%'); $fields = false; $show_filter_form = true; if (is_array ($options)) { if (isset ($options['group_filter'])) $group_filter = (bool) $options['group_filter']; if (isset ($options['text_filter'])) $text_filter = (bool) $options['text_filter']; if (isset ($options['access'])) $access = (string) $options['access']; if (isset ($options['table_heads'])) $table_heads = (array) $options['table_heads']; if (isset ($options['table_renders'])) $table_renders = (array) $options['table_renders']; if (isset ($options['table_align'])) $table_align = (array) $options['table_align']; if (isset ($options['table_size'])) $table_size = (array) $options['table_size']; if (isset ($options['fields'])) $fields = (array) $options['fields']; if (isset ($options['show_filter_form'])) $show_filter_form = (bool) $options['show_filter_form']; if (count ($table_renders) != count ($table_heads)) trigger_error ('Different count for table_renders and table_heads options'); unset ($options); } if ($return) return ui_get_include_contents ($config['homedir'].'/general/ui/agents_list.php', get_defined_vars ()); include ($config['homedir'].'/general/ui/agents_list.php'); } /** * Get the content of a PHP file instead of dumping to the output. * * Picked from PHP official doc. * * @param string File name to include and get content. * @param array Extra parameters in an indexed array to be passed to the file. * * @return string Content of the file after being processed. False if the file * could not be included. */ function ui_get_include_contents ($filename, $params = false) { global $config; ob_start (); if (is_array ($params)) { extract ($params); } $filename = realpath ($filename); if (strncmp ($config["homedir"], $filename, strlen ($config["homedir"])) != 0) { return false; } $result = include ($filename); if ($result === false) { ob_end_clean (); return false; } $contents = ob_get_contents (); ob_end_clean (); return $contents; } /** * Print a code into a DIV and enable a toggle to show and hide it * * @param string html code * @param string name of the link * @param string title of the link * @param bool if the div will be hidden by default (default: true) * */ function ui_toggle($code, $name, $title = '', $hidde_default = true) { // Generate unique Id $uniqid = uniqid(''); // Options if($hidde_default) { $style = 'display:none'; $toggle_a = "$('#tgl_div_".$uniqid."').show();"; $toggle_b = "$('#tgl_div_".$uniqid."').hide();"; $image_a = "images/go.png"; $image_b = "images/down.png"; }else { $style = ''; $toggle_a = "$('#tgl_div_".$uniqid."').hide();"; $toggle_b = "$('#tgl_div_".$uniqid."').show();"; $image_a = "images/down.png"; $image_b = "images/go.png"; } // Link to toggle echo ''.$name.' '.print_image ($image_b, true, array ("title" => $title, "id" => "image_".$uniqid)).'