mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-09-26 03:19:05 +02:00
Merge remote-tracking branch 'origin/develop' into ent-5524-backups-de-la-base-de-datos-desde-la-consola
This commit is contained in:
commit
13b78ae450
@ -1,5 +1,5 @@
|
|||||||
package: pandorafms-agent-unix
|
package: pandorafms-agent-unix
|
||||||
Version: 7.0NG.745-200518
|
Version: 7.0NG.745-200519
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Section: admin
|
Section: admin
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
pandora_version="7.0NG.745-200518"
|
pandora_version="7.0NG.745-200519"
|
||||||
|
|
||||||
echo "Test if you has the tools for to make the packages."
|
echo "Test if you has the tools for to make the packages."
|
||||||
whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null
|
whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null
|
||||||
|
@ -55,7 +55,7 @@ my $Sem = undef;
|
|||||||
my $ThreadSem = undef;
|
my $ThreadSem = undef;
|
||||||
|
|
||||||
use constant AGENT_VERSION => '7.0NG.745';
|
use constant AGENT_VERSION => '7.0NG.745';
|
||||||
use constant AGENT_BUILD => '200518';
|
use constant AGENT_BUILD => '200519';
|
||||||
|
|
||||||
# Agent log default file size maximum and instances
|
# Agent log default file size maximum and instances
|
||||||
use constant DEFAULT_MAX_LOG_SIZE => 600000;
|
use constant DEFAULT_MAX_LOG_SIZE => 600000;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_agent_unix
|
%define name pandorafms_agent_unix
|
||||||
%define version 7.0NG.745
|
%define version 7.0NG.745
|
||||||
%define release 200518
|
%define release 200519
|
||||||
|
|
||||||
Summary: Pandora FMS Linux agent, PERL version
|
Summary: Pandora FMS Linux agent, PERL version
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_agent_unix
|
%define name pandorafms_agent_unix
|
||||||
%define version 7.0NG.745
|
%define version 7.0NG.745
|
||||||
%define release 200518
|
%define release 200519
|
||||||
|
|
||||||
Summary: Pandora FMS Linux agent, PERL version
|
Summary: Pandora FMS Linux agent, PERL version
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
# **********************************************************************
|
# **********************************************************************
|
||||||
|
|
||||||
PI_VERSION="7.0NG.745"
|
PI_VERSION="7.0NG.745"
|
||||||
PI_BUILD="200518"
|
PI_BUILD="200519"
|
||||||
OS_NAME=`uname -s`
|
OS_NAME=`uname -s`
|
||||||
|
|
||||||
FORCE=0
|
FORCE=0
|
||||||
|
@ -33,9 +33,16 @@ my $freemem=`cat /proc/meminfo | grep 'MemFree' | awk '{ print \$2 } '`;
|
|||||||
my $cached=`cat /proc/meminfo | grep '^Cached:' | awk '{ print \$2 } '`;
|
my $cached=`cat /proc/meminfo | grep '^Cached:' | awk '{ print \$2 } '`;
|
||||||
my $cachedswap=`cat /proc/meminfo | grep '^SwapCached:' | awk '{ print \$2 }'`;
|
my $cachedswap=`cat /proc/meminfo | grep '^SwapCached:' | awk '{ print \$2 }'`;
|
||||||
my $total_meminfo=`cat /proc/meminfo | grep 'MemTotal:' | awk '{ print \$2 }'`;
|
my $total_meminfo=`cat /proc/meminfo | grep 'MemTotal:' | awk '{ print \$2 }'`;
|
||||||
my $available=$freemem+$cached+$cachedswap;
|
my $available_new=`cat /proc/meminfo | grep 'MemAvailable:' | awk '{ print \$2 }'`;
|
||||||
|
my $available;
|
||||||
|
if ($available_new == 0){
|
||||||
|
$available=$freemem+$cached+$cachedswap;
|
||||||
|
}else{
|
||||||
|
$available=$available_new;
|
||||||
|
}
|
||||||
my $available_percent = floor(($available / $total_meminfo)*100);
|
my $available_percent = floor(($available / $total_meminfo)*100);
|
||||||
|
|
||||||
|
my $USED = 100 - $available_percent;
|
||||||
|
|
||||||
print "<module>\n";
|
print "<module>\n";
|
||||||
print "<name><![CDATA[FreeMemory]]></name>\n";
|
print "<name><![CDATA[FreeMemory]]></name>\n";
|
||||||
|
@ -23,7 +23,13 @@ my $freemem=`cat /proc/meminfo | grep 'MemFree' | awk '{ print \$2 } '`;
|
|||||||
my $cached=`cat /proc/meminfo | grep '^Cached:' | awk '{ print \$2 } '`;
|
my $cached=`cat /proc/meminfo | grep '^Cached:' | awk '{ print \$2 } '`;
|
||||||
my $cachedswap=`cat /proc/meminfo | grep '^SwapCached:' | awk '{ print \$2 }'`;
|
my $cachedswap=`cat /proc/meminfo | grep '^SwapCached:' | awk '{ print \$2 }'`;
|
||||||
my $total_meminfo=`cat /proc/meminfo | grep 'MemTotal:' | awk '{ print \$2 }'`;
|
my $total_meminfo=`cat /proc/meminfo | grep 'MemTotal:' | awk '{ print \$2 }'`;
|
||||||
my $available=$freemem+$cached+$cachedswap;
|
my $available_new=`cat /proc/meminfo | grep 'MemAvailable:' | awk '{ print \$2 }'`;
|
||||||
|
my $available;
|
||||||
|
if ($available_new == 0){
|
||||||
|
$available=$freemem+$cached+$cachedswap;
|
||||||
|
}else{
|
||||||
|
$available=$available_new;
|
||||||
|
}
|
||||||
my $available_percent = floor(($available / $total_meminfo)*100);
|
my $available_percent = floor(($available / $total_meminfo)*100);
|
||||||
|
|
||||||
my $USED = 100 - $available_percent;
|
my $USED = 100 - $available_percent;
|
||||||
|
@ -186,7 +186,7 @@ UpgradeApplicationID
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
Version
|
Version
|
||||||
{200518}
|
{200519}
|
||||||
|
|
||||||
ViewReadme
|
ViewReadme
|
||||||
{Yes}
|
{Yes}
|
||||||
|
@ -30,7 +30,7 @@ using namespace Pandora;
|
|||||||
using namespace Pandora_Strutils;
|
using namespace Pandora_Strutils;
|
||||||
|
|
||||||
#define PATH_SIZE _MAX_PATH+1
|
#define PATH_SIZE _MAX_PATH+1
|
||||||
#define PANDORA_VERSION ("7.0NG.745(Build 200518)")
|
#define PANDORA_VERSION ("7.0NG.745(Build 200519)")
|
||||||
|
|
||||||
string pandora_path;
|
string pandora_path;
|
||||||
string pandora_dir;
|
string pandora_dir;
|
||||||
|
@ -11,7 +11,7 @@ BEGIN
|
|||||||
VALUE "LegalCopyright", "Artica ST"
|
VALUE "LegalCopyright", "Artica ST"
|
||||||
VALUE "OriginalFilename", "PandoraAgent.exe"
|
VALUE "OriginalFilename", "PandoraAgent.exe"
|
||||||
VALUE "ProductName", "Pandora FMS Windows Agent"
|
VALUE "ProductName", "Pandora FMS Windows Agent"
|
||||||
VALUE "ProductVersion", "(7.0NG.745(Build 200518))"
|
VALUE "ProductVersion", "(7.0NG.745(Build 200519))"
|
||||||
VALUE "FileVersion", "1.0.0.0"
|
VALUE "FileVersion", "1.0.0.0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
package: pandorafms-console
|
package: pandorafms-console
|
||||||
Version: 7.0NG.745-200518
|
Version: 7.0NG.745-200519
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Section: admin
|
Section: admin
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
pandora_version="7.0NG.745-200518"
|
pandora_version="7.0NG.745-200519"
|
||||||
|
|
||||||
package_pear=0
|
package_pear=0
|
||||||
package_pandora=1
|
package_pandora=1
|
||||||
|
@ -523,15 +523,34 @@ if ($config['menu_type'] == 'classic') {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function print_toast(title, subtitle, severity, url, id, onclick) {
|
function closeToast(event) {
|
||||||
|
var match = /notification-(.*)-id-([0-9]+)/.exec(event.target.id);
|
||||||
|
var div_id = document.getElementById(match.input);
|
||||||
|
$(div_id).attr("hidden",true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function print_toast(title, subtitle, severity, url, id, onclick, closeToast) {
|
||||||
// TODO severity.
|
// TODO severity.
|
||||||
severity = '';
|
severity = '';
|
||||||
|
|
||||||
// Start the toast.
|
// Start the toast.
|
||||||
|
|
||||||
|
var parent_div = document.createElement('div');
|
||||||
|
|
||||||
|
// Print close image
|
||||||
|
var img = document.createElement('img');
|
||||||
|
img.setAttribute('id', id);
|
||||||
|
img.setAttribute("src", './images/close_button_dialog.png');
|
||||||
|
img.setAttribute('onclick', closeToast);
|
||||||
|
img.setAttribute('style', 'margin-left: 95%;');
|
||||||
|
parent_div.appendChild(img);
|
||||||
|
|
||||||
|
// Print a element
|
||||||
var toast = document.createElement('a');
|
var toast = document.createElement('a');
|
||||||
toast.setAttribute('onclick', onclick);
|
|
||||||
toast.setAttribute('href', url);
|
|
||||||
toast.setAttribute('target', '_blank');
|
toast.setAttribute('target', '_blank');
|
||||||
|
toast.setAttribute('href', url);
|
||||||
|
toast.setAttribute('onclick', onclick);
|
||||||
|
|
||||||
|
var link_div = document.createElement('div');
|
||||||
|
|
||||||
// Fill toast.
|
// Fill toast.
|
||||||
var toast_div = document.createElement('div');
|
var toast_div = document.createElement('div');
|
||||||
@ -541,9 +560,13 @@ if ($config['menu_type'] == 'classic') {
|
|||||||
var toast_text = document.createElement('p');
|
var toast_text = document.createElement('p');
|
||||||
toast_title.innerHTML = title;
|
toast_title.innerHTML = title;
|
||||||
toast_text.innerHTML = subtitle;
|
toast_text.innerHTML = subtitle;
|
||||||
toast_div.appendChild(toast_title);
|
|
||||||
|
// Append Elements
|
||||||
|
toast_div.appendChild(img);
|
||||||
|
link_div.appendChild(toast_title);
|
||||||
|
toast.appendChild(link_div);
|
||||||
|
toast_div.appendChild(toast);
|
||||||
toast_div.appendChild(toast_text);
|
toast_div.appendChild(toast_text);
|
||||||
toast.appendChild(toast_div);
|
|
||||||
|
|
||||||
// Show and program the hide event.
|
// Show and program the hide event.
|
||||||
toast_div.className = toast_div.className + ' show';
|
toast_div.className = toast_div.className + ' show';
|
||||||
@ -551,7 +574,9 @@ if ($config['menu_type'] == 'classic') {
|
|||||||
toast_div.className = toast_div.className.replace("show", "");
|
toast_div.className = toast_div.className.replace("show", "");
|
||||||
}, 8000);
|
}, 8000);
|
||||||
|
|
||||||
return toast;
|
toast_div.appendChild(parent_div);
|
||||||
|
|
||||||
|
return toast_div;
|
||||||
}
|
}
|
||||||
|
|
||||||
function check_new_notifications() {
|
function check_new_notifications() {
|
||||||
@ -610,9 +635,11 @@ if ($config['menu_type'] == 'classic') {
|
|||||||
ele.criticity,
|
ele.criticity,
|
||||||
ele.full_url,
|
ele.full_url,
|
||||||
'notification-toast-id-' + ele.id_mensaje,
|
'notification-toast-id-' + ele.id_mensaje,
|
||||||
'click_on_notification_toast(event)'
|
'click_on_notification_toast(event)',
|
||||||
|
'closeToast(event)'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -46,6 +46,54 @@ if ($enterprise_include) {
|
|||||||
enterprise_include_once('meta/include/functions_users_meta.php');
|
enterprise_include_once('meta/include/functions_users_meta.php');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!is_metaconsole()) {
|
||||||
|
date_default_timezone_set('UTC');
|
||||||
|
include 'include/javascript/timezonepicker/includes/parser.inc';
|
||||||
|
|
||||||
|
// Read in options for map builder.
|
||||||
|
$bases = [
|
||||||
|
'gray' => 'Gray',
|
||||||
|
'blue-marble' => 'Blue marble',
|
||||||
|
'night-electric' => 'Night Electric',
|
||||||
|
'living' => 'Living Earth',
|
||||||
|
];
|
||||||
|
|
||||||
|
$local_file = 'include/javascript/timezonepicker/images/gray-400.png';
|
||||||
|
|
||||||
|
// Dimensions must always be exact since the imagemap does not scale.
|
||||||
|
$array_size = getimagesize($local_file);
|
||||||
|
|
||||||
|
$map_width = $array_size[0];
|
||||||
|
$map_height = $array_size[1];
|
||||||
|
|
||||||
|
$timezones = timezone_picker_parse_files(
|
||||||
|
$map_width,
|
||||||
|
$map_height,
|
||||||
|
'include/javascript/timezonepicker/tz_world.txt',
|
||||||
|
'include/javascript/timezonepicker/tz_islands.txt'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
foreach ($timezones as $timezone_name => $tz) {
|
||||||
|
if ($timezone_name == 'America/Montreal') {
|
||||||
|
$timezone_name = 'America/Toronto';
|
||||||
|
} else if ($timezone_name == 'Asia/Chongqing') {
|
||||||
|
$timezone_name = 'Asia/Shanghai';
|
||||||
|
}
|
||||||
|
|
||||||
|
$area_data_timezone_polys .= '';
|
||||||
|
foreach ($tz['polys'] as $coords) {
|
||||||
|
$area_data_timezone_polys .= '<area data-timezone="'.$timezone_name.'" data-country="'.$tz['country'].'" data-pin="'.implode(',', $tz['pin']).'" data-offset="'.$tz['offset'].'" shape="poly" coords="'.implode(',', $coords).'" />';
|
||||||
|
}
|
||||||
|
|
||||||
|
$area_data_timezone_rects .= '';
|
||||||
|
foreach ($tz['rects'] as $coords) {
|
||||||
|
$area_data_timezone_rects .= '<area data-timezone="'.$timezone_name.'" data-country="'.$tz['country'].'" data-pin="'.implode(',', $tz['pin']).'" data-offset="'.$tz['offset'].'" shape="rect" coords="'.implode(',', $coords).'" />';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// This defines the working user. Beware with this, old code get confusses
|
// This defines the working user. Beware with this, old code get confusses
|
||||||
// and operates with current logged user (dangerous).
|
// and operates with current logged user (dangerous).
|
||||||
$id = get_parameter('id', get_parameter('id_user', ''));
|
$id = get_parameter('id', get_parameter('id_user', ''));
|
||||||
@ -75,6 +123,12 @@ if (! check_acl($config['id_user'], 0, 'UM')) {
|
|||||||
|
|
||||||
$tab = get_parameter('tab', 'user');
|
$tab = get_parameter('tab', 'user');
|
||||||
|
|
||||||
|
if ($id) {
|
||||||
|
$header_title = ' » '.__('Update user');
|
||||||
|
} else {
|
||||||
|
$header_title = ' » '.__('Create user');
|
||||||
|
}
|
||||||
|
|
||||||
// Header
|
// Header
|
||||||
if ($meta) {
|
if ($meta) {
|
||||||
user_meta_print_header();
|
user_meta_print_header();
|
||||||
@ -94,7 +148,7 @@ if ($meta) {
|
|||||||
$buttons[$tab]['active'] = true;
|
$buttons[$tab]['active'] = true;
|
||||||
|
|
||||||
ui_print_page_header(
|
ui_print_page_header(
|
||||||
__('User detail editor'),
|
__('User detail editor').$header_title,
|
||||||
'images/gm_users.png',
|
'images/gm_users.png',
|
||||||
false,
|
false,
|
||||||
'profile_tab',
|
'profile_tab',
|
||||||
@ -625,59 +679,61 @@ if ($values) {
|
|||||||
$user_info = $values;
|
$user_info = $values;
|
||||||
}
|
}
|
||||||
|
|
||||||
$table = new stdClass();
|
|
||||||
$table->id = 'user_configuration_table';
|
|
||||||
$table->width = '100%';
|
|
||||||
$table->class = 'databox filters';
|
|
||||||
if (defined('METACONSOLE')) {
|
if (defined('METACONSOLE')) {
|
||||||
if ($id) {
|
if ($id) {
|
||||||
$table->head[0] = __('Update User');
|
echo '<div class="user_form_title">'.__('Update User').'</div>';
|
||||||
} else {
|
} else {
|
||||||
$table->head[0] = __('Create User');
|
echo '<div class="user_form_title">'.__('Create User').'</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$table->head_colspan[0] = 5;
|
|
||||||
$table->headstyle[0] = 'text-align: center';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$table->data = [];
|
if (!$new_user) {
|
||||||
$table->colspan = [];
|
$user_id = '<div class="label_select_simple"><p class="edit_user_labels">'.__('User ID').': </p>';
|
||||||
$table->size = [];
|
$user_id .= '<span>'.$id.'</span>';
|
||||||
$table->size[0] = '35%';
|
$user_id .= html_print_input_hidden('id_user', $id, true);
|
||||||
$table->size[1] = '65%';
|
$user_id .= '</div>';
|
||||||
$table->style = [];
|
} else {
|
||||||
$table->style[0] = 'font-weight: bold;';
|
$user_id = '<div class="label_select_simple">'.html_print_input_text_extended(
|
||||||
|
'id_user',
|
||||||
|
$id,
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
20,
|
||||||
|
100,
|
||||||
|
!$new_user || $view_mode,
|
||||||
|
'',
|
||||||
|
[
|
||||||
|
'class' => 'input_line user_icon_input',
|
||||||
|
'placeholder' => __('User ID'),
|
||||||
|
],
|
||||||
|
true
|
||||||
|
).'</div>';
|
||||||
|
}
|
||||||
|
|
||||||
$table->data[0][0] = __('User ID');
|
if (is_user_admin($id)) {
|
||||||
$table->data[0][1] = html_print_input_text_extended(
|
$avatar = html_print_image('images/people_1.png', true, ['class' => 'user_avatar']);
|
||||||
'id_user',
|
} else {
|
||||||
$id,
|
$avatar = html_print_image('images/people_2.png', true, ['class' => 'user_avatar']);
|
||||||
'',
|
}
|
||||||
'',
|
|
||||||
20,
|
|
||||||
60,
|
|
||||||
!$new_user || $view_mode,
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
true
|
|
||||||
);
|
|
||||||
|
|
||||||
$table->data[1][0] = __('Full (display) name');
|
$full_name = ' <div class="label_select_simple">'.html_print_input_text_extended(
|
||||||
$table->data[1][1] = html_print_input_text_extended(
|
|
||||||
'fullname',
|
'fullname',
|
||||||
$user_info['fullname'],
|
$user_info['fullname'],
|
||||||
|
'fullname',
|
||||||
'',
|
'',
|
||||||
'',
|
20,
|
||||||
30,
|
100,
|
||||||
125,
|
|
||||||
$view_mode,
|
$view_mode,
|
||||||
'',
|
'',
|
||||||
'',
|
[
|
||||||
|
'class' => 'input',
|
||||||
|
'placeholder' => __('Full (display) name'),
|
||||||
|
],
|
||||||
true
|
true
|
||||||
);
|
).'</div>';
|
||||||
|
|
||||||
$table->data[2][0] = __('Language');
|
$language = '<div class="label_select"><p class="edit_user_labels">'.__('Language').': </p>';
|
||||||
$table->data[2][1] = html_print_select_from_sql(
|
$language .= html_print_select_from_sql(
|
||||||
'SELECT id_language, name FROM tlanguage',
|
'SELECT id_language, name FROM tlanguage',
|
||||||
'language',
|
'language',
|
||||||
$user_info['language'],
|
$user_info['language'],
|
||||||
@ -685,88 +741,112 @@ $table->data[2][1] = html_print_select_from_sql(
|
|||||||
__('Default'),
|
__('Default'),
|
||||||
'default',
|
'default',
|
||||||
true
|
true
|
||||||
);
|
).'</div>';
|
||||||
|
|
||||||
$table->data[3][0] = __('Timezone');
|
|
||||||
$table->data[3][1] = html_print_timezone_select('timezone', $user_info['timezone']);
|
$timezone = '<div class="label_select"><p class="edit_user_labels">'.__('Timezone').': </p>';
|
||||||
|
$timezone .= html_print_timezone_select('timezone', $user_info['timezone']).'</div>';
|
||||||
|
|
||||||
if ($config['user_can_update_password']) {
|
if ($config['user_can_update_password']) {
|
||||||
$table->data[4][0] = __('Password');
|
$new_pass = '<div class="label_select_simple"><span>'.html_print_input_text_extended(
|
||||||
$table->data[4][1] = html_print_input_text_extended(
|
|
||||||
'password_new',
|
'password_new',
|
||||||
'',
|
'',
|
||||||
|
'password_new',
|
||||||
'',
|
'',
|
||||||
'',
|
'25',
|
||||||
15,
|
'45',
|
||||||
45,
|
|
||||||
$view_mode,
|
$view_mode,
|
||||||
'',
|
'',
|
||||||
'',
|
[
|
||||||
|
'class' => 'input',
|
||||||
|
'placeholder' => __('Password'),
|
||||||
|
],
|
||||||
true,
|
true,
|
||||||
true
|
true
|
||||||
);
|
).'</span></div>';
|
||||||
$table->data[5][0] = __('Password confirmation');
|
$new_pass_confirm = '<div class="label_select_simple"><span>'.html_print_input_text_extended(
|
||||||
$table->data[5][1] = html_print_input_text_extended(
|
|
||||||
'password_confirm',
|
'password_confirm',
|
||||||
'',
|
'',
|
||||||
|
'password_conf',
|
||||||
'',
|
'',
|
||||||
'',
|
'20',
|
||||||
15,
|
'45',
|
||||||
45,
|
|
||||||
$view_mode,
|
$view_mode,
|
||||||
'',
|
'',
|
||||||
'',
|
[
|
||||||
|
'class' => 'input',
|
||||||
|
'placeholder' => __('Password confirmation'),
|
||||||
|
],
|
||||||
true,
|
true,
|
||||||
true
|
true
|
||||||
);
|
).'</span></div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$own_info = get_user_info($config['id_user']);
|
$own_info = get_user_info($config['id_user']);
|
||||||
if ($config['admin_can_make_admin']) {
|
$global_profile = '<div class="label_select_simple user_global_profile" ><span class="input_label" style="margin:0;">'.__('Global Profile').': </span>';
|
||||||
$table->data[6][0] = __('Global Profile');
|
$global_profile .= '<div class="switch_radio_button">';
|
||||||
$table->data[6][1] = '';
|
$global_profile .= html_print_radio_button_extended(
|
||||||
if ($own_info['is_admin'] || $user_info['is_admin']) {
|
'is_admin',
|
||||||
$table->data[6][1] = html_print_radio_button('is_admin', 1, '', $user_info['is_admin'], true);
|
1,
|
||||||
$table->data[6][1] .= __('Administrator');
|
[
|
||||||
$table->data[6][1] .= ui_print_help_tip(__('This user has permissions to manage all. An admin user should not requiere additional group permissions, except for using Enterprise ACL.'), true);
|
'label' => __('Administrator'),
|
||||||
$table->data[6][1] .= '<br />';
|
'help_tip' => __('This user has permissions to manage all. An admin user should not requiere additional group permissions, except for using Enterprise ACL.'),
|
||||||
}
|
],
|
||||||
|
$user_info['is_admin'],
|
||||||
|
false,
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
$global_profile .= html_print_radio_button_extended(
|
||||||
|
'is_admin',
|
||||||
|
0,
|
||||||
|
[
|
||||||
|
'label' => __('Standard User'),
|
||||||
|
'help_tip' => __('This user has separated permissions to view data in his group agents, create incidents belong to his groups, add notes in another incidents, create personal assignments or reviews and other tasks, on different profiles'),
|
||||||
|
],
|
||||||
|
$user_info['is_admin'],
|
||||||
|
false,
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
$global_profile .= '</div></div>';
|
||||||
|
|
||||||
$table->data[6][1] .= html_print_radio_button('is_admin', 0, '', $user_info['is_admin'], true);
|
$email = '<div class="label_select_simple">'.html_print_input_text_extended(
|
||||||
$table->data[6][1] .= __('Standard User');
|
|
||||||
$table->data[6][1] .= ui_print_help_tip(__('This user has separated permissions to view data in his group agents, create incidents belong to his groups, add notes in another incidents, create personal assignments or reviews and other tasks, on different profiles'), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
$table->data[7][0] = __('E-mail');
|
|
||||||
$table->data[7][1] = html_print_input_text_extended(
|
|
||||||
'email',
|
'email',
|
||||||
$user_info['email'],
|
$user_info['email'],
|
||||||
|
'email',
|
||||||
'',
|
'',
|
||||||
'',
|
'25',
|
||||||
20,
|
'100',
|
||||||
100,
|
|
||||||
$view_mode,
|
$view_mode,
|
||||||
'',
|
'',
|
||||||
'',
|
[
|
||||||
|
'class' => 'input input_line email_icon_input',
|
||||||
|
'placeholder' => __('E-mail'),
|
||||||
|
],
|
||||||
true
|
true
|
||||||
);
|
).'</div>';
|
||||||
|
|
||||||
$table->data[8][0] = __('Phone number');
|
$phone = '<div class="label_select_simple">'.html_print_input_text_extended(
|
||||||
$table->data[8][1] = html_print_input_text_extended(
|
|
||||||
'phone',
|
'phone',
|
||||||
$user_info['phone'],
|
$user_info['phone'],
|
||||||
|
'phone',
|
||||||
'',
|
'',
|
||||||
'',
|
'20',
|
||||||
10,
|
'30',
|
||||||
30,
|
|
||||||
$view_mode,
|
$view_mode,
|
||||||
'',
|
'',
|
||||||
'',
|
[
|
||||||
|
'class' => 'input input_line phone_icon_input',
|
||||||
|
'placeholder' => __('Phone number'),
|
||||||
|
],
|
||||||
true
|
true
|
||||||
);
|
).'</div>';
|
||||||
|
|
||||||
$table->data[9][0] = __('Comments');
|
$comments = '<p class="edit_user_labels">'.__('Comments').': </p>';
|
||||||
$table->data[9][1] = html_print_textarea(
|
$comments .= html_print_textarea(
|
||||||
'comments',
|
'comments',
|
||||||
2,
|
2,
|
||||||
65,
|
65,
|
||||||
@ -795,16 +875,17 @@ if (!$meta) {
|
|||||||
// User only can change skins if has more than one group
|
// User only can change skins if has more than one group
|
||||||
if (count($usr_groups) > 1) {
|
if (count($usr_groups) > 1) {
|
||||||
if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) {
|
if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) {
|
||||||
$table->data[10][0] = __('Skin');
|
$skin = '<div class="label_select"><p class="edit_user_labels">'.__('Skin').': </p>';
|
||||||
$table->data[10][1] = skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true);
|
$skin .= skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true).'</div>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($meta) {
|
if ($meta) {
|
||||||
$array_filters = get_filters_custom_fields_view(0, true);
|
$array_filters = get_filters_custom_fields_view(0, true);
|
||||||
$table->data[11][0] = __('Search custom field view').' '.ui_print_help_tip(__('Load by default the selected view in custom field view'), true);
|
|
||||||
$table->data[11][1] = html_print_select(
|
$search_custom_fields_view = '<div class="label_select"><p class="edit_user_labels">'.__('Search custom field view').' '.ui_print_help_tip(__('Load by default the selected view in custom field view'), true).'</p>';
|
||||||
|
$search_custom_fields_view .= html_print_select(
|
||||||
$array_filters,
|
$array_filters,
|
||||||
'default_custom_view',
|
'default_custom_view',
|
||||||
$user_info['default_custom_view'],
|
$user_info['default_custom_view'],
|
||||||
@ -816,7 +897,7 @@ if ($meta) {
|
|||||||
true,
|
true,
|
||||||
'',
|
'',
|
||||||
false
|
false
|
||||||
);
|
).'</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$values = [
|
$values = [
|
||||||
@ -825,7 +906,8 @@ $values = [
|
|||||||
0 => __('No'),
|
0 => __('No'),
|
||||||
];
|
];
|
||||||
|
|
||||||
$table->data[12][0] = __('Home screen').ui_print_help_tip(__('User can customize the home page. By default, will display \'Agent Detail\'. Example: Select \'Other\' and type index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=1 to show agent detail view'), true);
|
$home_screen = '<div class="label_select"><p class="edit_user_labels">'.__('Home screen').ui_print_help_tip(__('User can customize the home page. By default, will display \'Agent Detail\'. Example: Select \'Other\' and type index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=1 to show agent detail view'), true).'</p>';
|
||||||
|
;
|
||||||
$values = [
|
$values = [
|
||||||
'Default' => __('Default'),
|
'Default' => __('Default'),
|
||||||
'Visual console' => __('Visual console'),
|
'Visual console' => __('Visual console'),
|
||||||
@ -841,7 +923,7 @@ if (!is_metaconsole()) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$table->data[12][1] = html_print_select($values, 'section', io_safe_output($user_info['section']), 'show_data_section();', '', -1, true, false, false);
|
$home_screen .= html_print_select($values, 'section', io_safe_output($user_info['section']), 'show_data_section();', '', -1, true, false, false).'</div>';
|
||||||
|
|
||||||
|
|
||||||
$dashboards = Manager::getDashboards(-1, -1);
|
$dashboards = Manager::getDashboards(-1, -1);
|
||||||
@ -854,7 +936,7 @@ if ($dashboards === false) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$table->data[12][1] .= html_print_select($dashboards_aux, 'dashboard', $user_info['data_section'], '', '', '', true);
|
$home_screen .= html_print_select($dashboards_aux, 'dashboard', $user_info['data_section'], '', '', '', true);
|
||||||
|
|
||||||
|
|
||||||
$layouts = visual_map_get_user_layouts($config['id_user'], true);
|
$layouts = visual_map_get_user_layouts($config['id_user'], true);
|
||||||
@ -867,14 +949,14 @@ if ($layouts === false) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$table->data[12][1] .= html_print_select($layouts_aux, 'visual_console', $user_info['data_section'], '', '', '', true);
|
$home_screen .= html_print_select($layouts_aux, 'visual_console', $user_info['data_section'], '', '', '', true);
|
||||||
$table->data[12][1] .= html_print_input_text('data_section', $user_info['data_section'], '', 60, 255, true, false);
|
$home_screen .= html_print_input_text('data_section', $user_info['data_section'], '', 60, 255, true, false);
|
||||||
|
|
||||||
$table->data[13][0] = __('Block size for pagination');
|
$size_pagination = '<div class="label_select_simple"><p class="edit_user_labels">'.__('Block size for pagination').'</p>';
|
||||||
$table->data[13][1] = html_print_input_text('block_size', $user_info['block_size'], '', 5, 5, true);
|
$size_pagination .= html_print_input_text('block_size', $user_info['block_size'], '', 5, 5, true).'</div>';
|
||||||
|
|
||||||
if ($id == $config['id_user']) {
|
if ($id == $config['id_user']) {
|
||||||
$table->data[13][1] .= html_print_input_hidden('quick_language_change', 1, true);
|
$language .= html_print_input_hidden('quick_language_change', 1, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enterprise_installed() && defined('METACONSOLE')) {
|
if (enterprise_installed() && defined('METACONSOLE')) {
|
||||||
@ -883,12 +965,12 @@ if (enterprise_installed() && defined('METACONSOLE')) {
|
|||||||
$user_info_metaconsole_access = $user_info['metaconsole_access'];
|
$user_info_metaconsole_access = $user_info['metaconsole_access'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$table->data[13][0] = __('Metaconsole access').' '.ui_print_help_icon('meta_access', true);
|
$meta_access = '<div class="label_select"><p class="edit_user_labels">'.__('Metaconsole access').' '.ui_print_help_icon('meta_access', true).'</p>';
|
||||||
$metaconsole_accesses = [
|
$metaconsole_accesses = [
|
||||||
'basic' => __('Basic'),
|
'basic' => __('Basic'),
|
||||||
'advanced' => __('Advanced'),
|
'advanced' => __('Advanced'),
|
||||||
];
|
];
|
||||||
$table->data[13][1] = html_print_select(
|
$meta_access .= html_print_select(
|
||||||
$metaconsole_accesses,
|
$metaconsole_accesses,
|
||||||
'metaconsole_access',
|
'metaconsole_access',
|
||||||
$user_info_metaconsole_access,
|
$user_info_metaconsole_access,
|
||||||
@ -898,16 +980,16 @@ if (enterprise_installed() && defined('METACONSOLE')) {
|
|||||||
true,
|
true,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
);
|
).'</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$table->data[14][0] = __('Not Login');
|
$not_login = '<div class="label_select_simple"><p class="edit_user_labels">'.__('Not Login').'</p>';
|
||||||
$table->data[14][0] .= ui_print_help_tip(__('The user with not login set only can access to API.'), true);
|
$not_login .= ui_print_help_tip(__('The user with not login set only can access to API.'), true);
|
||||||
$table->data[14][1] = html_print_checkbox('not_login', 1, $user_info['not_login'], true);
|
$not_login .= html_print_checkbox_switch('not_login', 1, $user_info['not_login'], true).'</div>';
|
||||||
|
|
||||||
$table->data[15][0] = __('Session Time');
|
$session_time = '<div class="label_select_simple"><p class="edit_user_labels">'.__('Session Time');
|
||||||
$table->data[15][0] .= ui_print_help_tip(__('This is defined in minutes, If you wish a permanent session should putting -1 in this field.'), true);
|
$session_time .= ui_print_help_tip(__('This is defined in minutes, If you wish a permanent session should putting -1 in this field.'), true).'</p>';
|
||||||
$table->data[15][1] = html_print_input_text('session_time', $user_info['session_time'], '', 5, 5, true);
|
$session_time .= html_print_input_text('session_time', $user_info['session_time'], '', 5, 5, true.false, false, '', 'class="input_line_small"').'</div>';
|
||||||
|
|
||||||
$event_filter_data = db_get_all_rows_sql('SELECT id_name, id_filter FROM tevent_filter');
|
$event_filter_data = db_get_all_rows_sql('SELECT id_name, id_filter FROM tevent_filter');
|
||||||
if ($event_filter_data === false) {
|
if ($event_filter_data === false) {
|
||||||
@ -920,69 +1002,104 @@ foreach ($event_filter_data as $filter) {
|
|||||||
$event_filter[$filter['id_filter']] = $filter['id_name'];
|
$event_filter[$filter['id_filter']] = $filter['id_name'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$table->data[16][0] = __('Default event filter');
|
$default_event_filter = '<div class="label_select"><p class="edit_user_labels">'.__('Default event filter').'</p>';
|
||||||
$table->data[16][1] = html_print_select($event_filter, 'default_event_filter', $user_info['default_event_filter'], '', '', __('None'), true, false, false);
|
$default_event_filter .= html_print_select($event_filter, 'default_event_filter', $user_info['default_event_filter'], '', '', __('None'), true, false, false).'</div>';
|
||||||
|
|
||||||
$table->data[17][0] = __('Disabled newsletter');
|
$newsletter = '<div class="label_select_simple"><p class="edit_user_labels">'.__('Disabled newsletter').'</p>';
|
||||||
if ($user_info['middlename'] >= 0) {
|
if ($user_info['middlename'] >= 0) {
|
||||||
$middlename = false;
|
$middlename = false;
|
||||||
} else {
|
} else {
|
||||||
$middlename = true;
|
$middlename = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$table->data[17][1] = html_print_checkbox(
|
$newsletter .= html_print_checkbox_switch(
|
||||||
'middlename',
|
'middlename',
|
||||||
-1,
|
-1,
|
||||||
$middlename,
|
$middlename,
|
||||||
true
|
true
|
||||||
);
|
).'</div>';
|
||||||
|
|
||||||
if ($config['ehorus_user_level_conf']) {
|
if ($config['ehorus_user_level_conf']) {
|
||||||
$table->data[18][0] = __('eHorus user acces enabled');
|
$ehorus = '<div class="label_select_simple"><p class="edit_user_labels">'.__('eHorus user access enabled').'</p>';
|
||||||
$table->data[18][1] = html_print_checkbox('ehorus_user_level_enabled', 1, $user_info['ehorus_user_level_enabled'], true);
|
$ehorus .= html_print_checkbox_switch('ehorus_user_level_enabled', 1, $user_info['ehorus_user_level_enabled'], true).'</div>';
|
||||||
$table->data[19][0] = __('eHorus user');
|
$ehorus .= '<div class="user_edit_ehorus_outer">';
|
||||||
$table->data[20][0] = __('eHorus password');
|
$ehorus .= '<div class="label_select_simple user_edit_ehorus_inner"><p class="edit_user_labels">'.__('eHorus user').'</p>';
|
||||||
$table->data[19][1] = html_print_input_text('ehorus_user_level_user', $user_info['ehorus_user_level_user'], '', 15, 45, true);
|
$ehorus .= html_print_input_text('ehorus_user_level_user', $user_info['ehorus_user_level_user'], '', 15, 45, true).'</div>';
|
||||||
$table->data[20][1] = html_print_input_password('ehorus_user_level_pass', io_output_password($user_info['ehorus_user_level_pass']), '', 15, 45, true);
|
$ehorus .= '<div class="label_select_simple user_edit_ehorus_inner"><p class="edit_user_labels">'.__('eHorus password').'</p>';
|
||||||
|
$ehorus .= html_print_input_password('ehorus_user_level_pass', io_output_password($user_info['ehorus_user_level_pass']), '', 15, 45, true).'</div>';
|
||||||
|
$ehorus .= '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($meta) {
|
if ($meta) {
|
||||||
enterprise_include_once('include/functions_metaconsole.php');
|
enterprise_include_once('include/functions_metaconsole.php');
|
||||||
|
|
||||||
$data = [];
|
$metaconsole_agents_manager = '<div class="label_select_simple" id="metaconsole_agents_manager_div"><p class="edit_user_labels">'.__('Enable agents managment').'</p>';
|
||||||
$data[0] = __('Enable agents managment');
|
$metaconsole_agents_manager .= html_print_checkbox_switch('metaconsole_agents_manager', 1, $user_info['metaconsole_agents_manager'], true).'</div>';
|
||||||
$data[1] = html_print_checkbox('metaconsole_agents_manager', 1, $user_info['metaconsole_agents_manager'], true);
|
|
||||||
$table->rowclass[] = '';
|
|
||||||
$table->rowstyle[] = 'font-weight: bold;';
|
|
||||||
$table->data['metaconsole_agents_manager'] = $data;
|
|
||||||
|
|
||||||
$data = [];
|
$metaconsole_assigned_server = '<div class="label_select" id="metaconsole_assigned_server_div"><p class="edit_user_labels">'.__('Assigned node').ui_print_help_tip(__('Server where the agents created of this user will be placed'), true).'</p>';
|
||||||
$data[0] = __('Assigned node').ui_print_help_tip(__('Server where the agents created of this user will be placed'), true);
|
|
||||||
$servers = metaconsole_get_servers();
|
$servers = metaconsole_get_servers();
|
||||||
$servers_for_select = [];
|
$servers_for_select = [];
|
||||||
foreach ($servers as $server) {
|
foreach ($servers as $server) {
|
||||||
$servers_for_select[$server['id']] = $server['server_name'];
|
$servers_for_select[$server['id']] = $server['server_name'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$data[1] = html_print_select($servers_for_select, 'metaconsole_assigned_server', $user_info['metaconsole_assigned_server'], '', '', -1, true, false, false);
|
$metaconsole_assigned_server .= html_print_select($servers_for_select, 'metaconsole_assigned_server', $user_info['metaconsole_assigned_server'], '', '', -1, true, false, false).'</div>';
|
||||||
$table->rowclass[] = '';
|
|
||||||
$table->rowstyle[] = 'font-weight: bold;';
|
|
||||||
$table->data['metaconsole_assigned_server'] = $data;
|
|
||||||
|
|
||||||
$data = [];
|
$metaconsole_access_node = '<div class="label_select_simple" id="metaconsole_access_node_div"><p class="edit_user_labels">'.__('Enable node access').ui_print_help_tip(__('With this option enabled, the user will can access to nodes console'), true).'</p>';
|
||||||
$data[0] = __('Enable node access').ui_print_help_tip(__('With this option enabled, the user will can access to nodes console'), true);
|
$metaconsole_access_node .= html_print_checkbox('metaconsole_access_node', 1, $user_info['metaconsole_access_node'], true).'</div>';
|
||||||
$data[2] = html_print_checkbox('metaconsole_access_node', 1, $user_info['metaconsole_access_node'], true);
|
|
||||||
$table->rowclass[] = '';
|
|
||||||
$table->rowstyle[] = '';
|
|
||||||
$table->data['metaconsole_access_node'] = $data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '<form method="post" autocomplete="off">';
|
echo '<form method="post" autocomplete="off">';
|
||||||
|
|
||||||
html_print_table($table);
|
|
||||||
|
|
||||||
echo '<div style="width: '.$table->width.'" class="action-buttons">';
|
if (!$id) {
|
||||||
|
$user_id_update_view = $user_id;
|
||||||
|
$user_id_create = '';
|
||||||
|
} else {
|
||||||
|
$user_id_update_view = '';
|
||||||
|
$user_id_create = $user_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_metaconsole()) {
|
||||||
|
$access_or_pagination = $meta_access;
|
||||||
|
} else {
|
||||||
|
$access_or_pagination = $size_pagination;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
echo '<div id="user_form">
|
||||||
|
<div class="user_edit_first_row">
|
||||||
|
<div class="edit_user_info white_box">
|
||||||
|
<div class="edit_user_info_left">'.$avatar.$user_id_create.'</div>
|
||||||
|
<div class="edit_user_info_right">'.$user_id_update_view.$full_name.$new_pass.$new_pass_confirm.$global_profile.'</div>
|
||||||
|
</div>
|
||||||
|
<div class="edit_user_autorefresh white_box"><p style="font-weight:bold;">Extra info:</p>'.$email.$phone.$not_login.$session_time.'</div>
|
||||||
|
</div>
|
||||||
|
<div class="user_edit_second_row white_box">
|
||||||
|
<div class="edit_user_options">'.$language.$access_or_pagination.$skin.$home_screen.$default_event_filter.$newsletter.'</div>
|
||||||
|
|
||||||
|
<div class="edit_user_timezone">'.$timezone;
|
||||||
|
if (!is_metaconsole()) {
|
||||||
|
echo '<div id="timezone-picker">
|
||||||
|
<img id="timezone-image" src="'.$local_file.'" width="'.$map_width.'" height="'.$map_height.'" usemap="#timezone-map" />
|
||||||
|
<img class="timezone-pin" src="include/javascript/timezonepicker/images/pin.png" style="padding-top: 4px;" />
|
||||||
|
<map name="timezone-map" id="timezone-map">'.$area_data_timezone_polys.$area_data_timezone_rects.'</map>
|
||||||
|
</div>';
|
||||||
|
} else {
|
||||||
|
echo $search_custom_fields_view.$metaconsole_agents_manager.$metaconsole_assigned_server.$metaconsole_access_node;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="user_edit_third_row white_box">
|
||||||
|
<div class="edit_user_comments">'.$comments.'</div>
|
||||||
|
</div>
|
||||||
|
<div class="user_edit_third_row white_box">'.$ehorus.'</div>
|
||||||
|
</div>';
|
||||||
|
|
||||||
|
echo '<div style="width: 100%" class="action-buttons">';
|
||||||
if ($config['admin_can_add_user']) {
|
if ($config['admin_can_add_user']) {
|
||||||
html_print_csrf_hidden();
|
html_print_csrf_hidden();
|
||||||
if ($new_user) {
|
if ($new_user) {
|
||||||
@ -1005,6 +1122,36 @@ if (!empty($id) && !$new_user) {
|
|||||||
|
|
||||||
enterprise_hook('close_meta_frame');
|
enterprise_hook('close_meta_frame');
|
||||||
|
|
||||||
|
if (!is_metaconsole()) {
|
||||||
|
?>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
/* Styles for timezone map */
|
||||||
|
#timezone-picker div.timezone-picker {
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script language="javascript" type="text/javascript">
|
||||||
|
$(document).ready (function () {
|
||||||
|
// Set up the picker to update target timezone and country select lists.
|
||||||
|
$('#timezone-image').timezonePicker({
|
||||||
|
target: '#timezone',
|
||||||
|
});
|
||||||
|
|
||||||
|
// Optionally an auto-detect button to trigger JavaScript geolocation.
|
||||||
|
$('#timezone-detect').click(function() {
|
||||||
|
$('#timezone-image').timezonePicker('detectLocation');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<?php
|
||||||
|
// Include OpenLayers and timezone user map library.
|
||||||
|
echo '<script type="text/javascript" src="'.ui_get_full_url('include/javascript/timezonepicker/lib/jquery.timezone-picker.min.js').'"></script>'."\n\t";
|
||||||
|
echo '<script type="text/javascript" src="'.ui_get_full_url('include/javascript/timezonepicker/lib/jquery.maphilight.min.js').'"></script>'."\n\t";
|
||||||
|
// Closes no meta condition.
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
@ -1012,25 +1159,25 @@ enterprise_hook('close_meta_frame');
|
|||||||
$(document).ready (function () {
|
$(document).ready (function () {
|
||||||
$('input:radio[name="is_admin"]').change(function() {
|
$('input:radio[name="is_admin"]').change(function() {
|
||||||
if($('#radiobtn0002').prop('checked')) {
|
if($('#radiobtn0002').prop('checked')) {
|
||||||
$('#user_configuration_table-metaconsole_agents_manager').show();
|
$('#metaconsole_agents_manager_div').show();
|
||||||
$('#user_configuration_table-metaconsole_access_node').show();
|
$('#metaconsole_access_node_div').show();
|
||||||
if($('#checkbox-metaconsole_agents_manager').prop('checked')) {
|
if($('#checkbox-metaconsole_agents_manager').prop('checked')) {
|
||||||
$('#user_configuration_table-metaconsole_assigned_server').show();
|
$('#metaconsole_assigned_server_div').show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$('#user_configuration_table-metaconsole_agents_manager').hide();
|
$('#metaconsole_agents_manager_div').hide();
|
||||||
$('#user_configuration_table-metaconsole_access_node').hide();
|
$('#metaconsole_access_node_div').hide();
|
||||||
$('#user_configuration_table-metaconsole_assigned_server').hide();
|
$('#metaconsole_assigned_server_div').hide();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#checkbox-metaconsole_agents_manager').change(function() {
|
$('#checkbox-metaconsole_agents_manager').change(function() {
|
||||||
if($('#checkbox-metaconsole_agents_manager').prop('checked')) {
|
if($('#checkbox-metaconsole_agents_manager').prop('checked')) {
|
||||||
$('#user_configuration_table-metaconsole_assigned_server').show();
|
$('#metaconsole_assigned_server_div').show();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$('#user_configuration_table-metaconsole_assigned_server').hide();
|
$('#metaconsole_assigned_server_div').hide();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1101,13 +1248,11 @@ function switch_ehorus_conf()
|
|||||||
{
|
{
|
||||||
if(!$('#checkbox-ehorus_user_level_enabled').prop('checked'))
|
if(!$('#checkbox-ehorus_user_level_enabled').prop('checked'))
|
||||||
{
|
{
|
||||||
$("#user_configuration_table-18").hide();
|
$(".user_edit_ehorus_outer").hide();
|
||||||
$("#user_configuration_table-19").hide();
|
|
||||||
|
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
$("#user_configuration_table-18").show();
|
$(".user_edit_ehorus_outer").show();
|
||||||
$("#user_configuration_table-19").show()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
/**
|
/**
|
||||||
* Pandora build version and version
|
* Pandora build version and version
|
||||||
*/
|
*/
|
||||||
$build_version = 'PC200518';
|
$build_version = 'PC200519';
|
||||||
$pandora_version = 'v7.0NG.745';
|
$pandora_version = 'v7.0NG.745';
|
||||||
|
|
||||||
// Do not overwrite default timezone set if defined.
|
// Do not overwrite default timezone set if defined.
|
||||||
|
@ -2526,8 +2526,14 @@ function html_print_radio_button_extended(
|
|||||||
$output .= ' '.$attributes;
|
$output .= ' '.$attributes;
|
||||||
$output .= ' />';
|
$output .= ' />';
|
||||||
|
|
||||||
if ($label != '') {
|
if (is_array($label)) {
|
||||||
$output .= '<label for="'.$htmlid.'">'.$label.'</label>'."\n";
|
if (!empty($label)) {
|
||||||
|
$output .= '<label for="'.$htmlid.'" title="'.$label['help_tip'].'">'.$label['label'].'</label>'."\n";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ($label != '') {
|
||||||
|
$output .= '<label for="'.$htmlid.'">'.$label.'</label>'."\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($modal && !enterprise_installed()) {
|
if ($modal && !enterprise_installed()) {
|
||||||
|
@ -189,14 +189,15 @@ function profile_print_profile_table($id)
|
|||||||
|
|
||||||
$table = new stdClass();
|
$table = new stdClass();
|
||||||
$table->width = '100%';
|
$table->width = '100%';
|
||||||
$table->class = 'databox data';
|
$table->class = 'info_table';
|
||||||
if (defined('METACONSOLE')) {
|
if (defined('METACONSOLE')) {
|
||||||
$table->head_colspan[0] = 0;
|
$table->head_colspan[0] = 0;
|
||||||
$table->width = '100%';
|
$table->width = '100%';
|
||||||
$table->class = 'databox_tactical data';
|
$table->class = 'databox_tactical data';
|
||||||
$table->title = $title;
|
$table->title = $title;
|
||||||
} else {
|
} else {
|
||||||
echo '<h4>'.$title.'</h4>';
|
echo '<div id="edit_user_profiles" class="white_box">';
|
||||||
|
echo '<h4><p class="edit_user_labels">'.$title.'</p></h4>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$table->data = [];
|
$table->data = [];
|
||||||
@ -204,8 +205,8 @@ function profile_print_profile_table($id)
|
|||||||
$table->align = [];
|
$table->align = [];
|
||||||
$table->style = [];
|
$table->style = [];
|
||||||
if (!defined('METACONSOLE')) {
|
if (!defined('METACONSOLE')) {
|
||||||
$table->style[0] = 'font-weight: bold';
|
$table->style['name'] = 'font-weight: bold';
|
||||||
$table->style[1] = 'font-weight: bold';
|
$table->style['group'] = 'font-weight: bold';
|
||||||
}
|
}
|
||||||
|
|
||||||
$table->head['name'] = __('Profile name');
|
$table->head['name'] = __('Profile name');
|
||||||
@ -324,5 +325,9 @@ function profile_print_profile_table($id)
|
|||||||
array_push($table->data, $data);
|
array_push($table->data, $data);
|
||||||
|
|
||||||
html_print_table($table);
|
html_print_table($table);
|
||||||
|
if (!is_metaconsole()) {
|
||||||
|
echo '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
unset($table);
|
unset($table);
|
||||||
}
|
}
|
||||||
|
@ -41,9 +41,12 @@ if ($file === '' || $hash === '' || $hash !== md5($file_raw.$config['dbpass']) |
|
|||||||
$downloadable_file = '';
|
$downloadable_file = '';
|
||||||
$parse_all_queries = explode('&', parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY));
|
$parse_all_queries = explode('&', parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY));
|
||||||
$parse_sec2_query = explode('=', $parse_all_queries[1]);
|
$parse_sec2_query = explode('=', $parse_all_queries[1]);
|
||||||
|
// Metaconsole have a route distinct than node.
|
||||||
|
$main_file_manager = (is_metaconsole() === true) ? 'advanced/metasetup' : 'godmode/setup/file_manager';
|
||||||
|
$main_collections = (is_metaconsole() === true) ? 'advanced/collections' : 'enterprise/godmode/agentes/collections';
|
||||||
if ($parse_sec2_query[0] === 'sec2') {
|
if ($parse_sec2_query[0] === 'sec2') {
|
||||||
switch ($parse_sec2_query[1]) {
|
switch ($parse_sec2_query[1]) {
|
||||||
case 'godmode/setup/file_manager':
|
case $main_file_manager:
|
||||||
$downloadable_file = $_SERVER['DOCUMENT_ROOT'].'/pandora_console/'.$file;
|
$downloadable_file = $_SERVER['DOCUMENT_ROOT'].'/pandora_console/'.$file;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -51,6 +54,10 @@ if ($file === '' || $hash === '' || $hash !== md5($file_raw.$config['dbpass']) |
|
|||||||
$downloadable_file = $_SERVER['DOCUMENT_ROOT'].'/pandora_console/attachment/files_repo/'.$file;
|
$downloadable_file = $_SERVER['DOCUMENT_ROOT'].'/pandora_console/attachment/files_repo/'.$file;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case $main_collections:
|
||||||
|
$downloadable_file = $_SERVER['DOCUMENT_ROOT'].'/pandora_console/attachment/collection/'.$file;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
$downloadable_file = '';
|
$downloadable_file = '';
|
||||||
// Do nothing
|
// Do nothing
|
||||||
|
@ -667,8 +667,19 @@ function initialiceLayout(data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$("#delete-widget-" + cellId).click(function(event) {
|
$("#delete-widget-" + cellId).click(function(event) {
|
||||||
var nodo = event.target.offsetParent;
|
// eslint-disable-next-line no-undef
|
||||||
deleteCell(cellId, nodo.parentNode);
|
confirmDialog({
|
||||||
|
title: "Are you sure?",
|
||||||
|
message:
|
||||||
|
"<h4 style='text-align: center;padding-top: 20px;'>All changes made to this widget will be lost</h4>",
|
||||||
|
cancel: "Cancel",
|
||||||
|
ok: "Ok",
|
||||||
|
onAccept: function() {
|
||||||
|
// Continue execution.
|
||||||
|
var nodo = event.target.offsetParent;
|
||||||
|
deleteCell(cellId, nodo.parentNode);
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#configure-widget-" + cellId).click(function() {
|
$("#configure-widget-" + cellId).click(function() {
|
||||||
|
@ -477,14 +477,14 @@ div#main_pure {
|
|||||||
margin-top: 30px;
|
margin-top: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.info_box {
|
.content-widget .info_box {
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
width: 90%;
|
width: 90%;
|
||||||
}
|
}
|
||||||
.info_box tbody tr td {
|
.content-widget .info_box tbody tr td {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
.info_box tbody tr td.icon {
|
.content-widget .info_box tbody tr td.icon {
|
||||||
padding-right: 10px !important;
|
padding-right: 10px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4788,7 +4788,8 @@ input:checked + .p-slider:before {
|
|||||||
width: 75%;
|
width: 75%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.edit_user_info_right input {
|
.edit_user_info_right input,
|
||||||
|
.input_line {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
@ -4805,15 +4806,18 @@ input:checked + .p-slider:before {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.edit_user_info_right #fullname {
|
.edit_user_info_right #fullname,
|
||||||
|
.user_icon_input {
|
||||||
background-image: url("../../images/user_name.png");
|
background-image: url("../../images/user_name.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
.edit_user_info_right #email {
|
.edit_user_info_right #email,
|
||||||
|
.email_icon_input {
|
||||||
background-image: url("../../images/user_email.png");
|
background-image: url("../../images/user_email.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
.edit_user_info_right #phone {
|
.edit_user_info_right #phone,
|
||||||
|
.phone_icon_input {
|
||||||
background-image: url("../../images/user_phone.png");
|
background-image: url("../../images/user_phone.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4831,7 +4835,8 @@ input:checked + .p-slider:before {
|
|||||||
padding-right: 50px;
|
padding-right: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.edit_user_options #text-block_size {
|
.edit_user_options #text-block_size,
|
||||||
|
.input_line_small {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
@ -4875,12 +4880,14 @@ input:checked + .p-slider:before {
|
|||||||
display: inline;
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
.edit_user_options .label_select_simple {
|
.edit_user_options .label_select_simple,
|
||||||
|
.edit_user_autorefresh .label_select_simple {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.edit_user_options .label_select_simple .p-switch {
|
.edit_user_options .label_select_simple .p-switch,
|
||||||
|
.edit_user_autorefresh .label_select_simple .p-switch {
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
@ -4936,6 +4943,24 @@ input:checked + .p-slider:before {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: 1200px) {
|
||||||
|
.user_global_profile {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.user_edit_ehorus_outer {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
width: 280px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user_edit_ehorus_inner {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
.edit_user_button {
|
.edit_user_button {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -5405,7 +5430,7 @@ table.info_table.policy_sub_table {
|
|||||||
.switch_radio_button input:checked + label {
|
.switch_radio_button input:checked + label {
|
||||||
background-color: #82b92e;
|
background-color: #82b92e;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
color: #fff;
|
color: #fff !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.switch_radio_button label:last-child {
|
.switch_radio_button label:last-child {
|
||||||
|
@ -129,7 +129,7 @@
|
|||||||
<div style='height: 10px'>
|
<div style='height: 10px'>
|
||||||
<?php
|
<?php
|
||||||
$version = '7.0NG.745';
|
$version = '7.0NG.745';
|
||||||
$build = '200518';
|
$build = '200519';
|
||||||
$banner = "v$version Build $build";
|
$banner = "v$version Build $build";
|
||||||
|
|
||||||
error_reporting(0);
|
error_reporting(0);
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_console
|
%define name pandorafms_console
|
||||||
%define version 7.0NG.745
|
%define version 7.0NG.745
|
||||||
%define release 200518
|
%define release 200519
|
||||||
|
|
||||||
# User and Group under which Apache is running
|
# User and Group under which Apache is running
|
||||||
%define httpd_name httpd
|
%define httpd_name httpd
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_console
|
%define name pandorafms_console
|
||||||
%define version 7.0NG.745
|
%define version 7.0NG.745
|
||||||
%define release 200518
|
%define release 200519
|
||||||
|
|
||||||
# User and Group under which Apache is running
|
# User and Group under which Apache is running
|
||||||
%define httpd_name httpd
|
%define httpd_name httpd
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_console
|
%define name pandorafms_console
|
||||||
%define version 7.0NG.745
|
%define version 7.0NG.745
|
||||||
%define release 200518
|
%define release 200519
|
||||||
%define httpd_name httpd
|
%define httpd_name httpd
|
||||||
# User and Group under which Apache is running
|
# User and Group under which Apache is running
|
||||||
%define httpd_name apache2
|
%define httpd_name apache2
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
package: pandorafms-server
|
package: pandorafms-server
|
||||||
Version: 7.0NG.745-200518
|
Version: 7.0NG.745-200519
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Section: admin
|
Section: admin
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
pandora_version="7.0NG.745-200518"
|
pandora_version="7.0NG.745-200519"
|
||||||
|
|
||||||
package_cpan=0
|
package_cpan=0
|
||||||
package_pandora=1
|
package_pandora=1
|
||||||
|
@ -45,7 +45,7 @@ our @EXPORT = qw(
|
|||||||
|
|
||||||
# version: Defines actual version of Pandora Server for this module only
|
# version: Defines actual version of Pandora Server for this module only
|
||||||
my $pandora_version = "7.0NG.745";
|
my $pandora_version = "7.0NG.745";
|
||||||
my $pandora_build = "200518";
|
my $pandora_build = "200519";
|
||||||
our $VERSION = $pandora_version." ".$pandora_build;
|
our $VERSION = $pandora_version." ".$pandora_build;
|
||||||
|
|
||||||
# Setup hash
|
# Setup hash
|
||||||
|
@ -33,7 +33,7 @@ our @ISA = qw(Exporter);
|
|||||||
|
|
||||||
# version: Defines actual version of Pandora Server for this module only
|
# version: Defines actual version of Pandora Server for this module only
|
||||||
my $pandora_version = "7.0NG.745";
|
my $pandora_version = "7.0NG.745";
|
||||||
my $pandora_build = "200518";
|
my $pandora_build = "200519";
|
||||||
our $VERSION = $pandora_version." ".$pandora_build;
|
our $VERSION = $pandora_version." ".$pandora_build;
|
||||||
|
|
||||||
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
|
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_server
|
%define name pandorafms_server
|
||||||
%define version 7.0NG.745
|
%define version 7.0NG.745
|
||||||
%define release 200518
|
%define release 200519
|
||||||
|
|
||||||
Summary: Pandora FMS Server
|
Summary: Pandora FMS Server
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_server
|
%define name pandorafms_server
|
||||||
%define version 7.0NG.745
|
%define version 7.0NG.745
|
||||||
%define release 200518
|
%define release 200519
|
||||||
|
|
||||||
Summary: Pandora FMS Server
|
Summary: Pandora FMS Server
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
# **********************************************************************
|
# **********************************************************************
|
||||||
|
|
||||||
PI_VERSION="7.0NG.745"
|
PI_VERSION="7.0NG.745"
|
||||||
PI_BUILD="200518"
|
PI_BUILD="200519"
|
||||||
|
|
||||||
MODE=$1
|
MODE=$1
|
||||||
if [ $# -gt 1 ]; then
|
if [ $# -gt 1 ]; then
|
||||||
|
@ -35,7 +35,7 @@ use PandoraFMS::Config;
|
|||||||
use PandoraFMS::DB;
|
use PandoraFMS::DB;
|
||||||
|
|
||||||
# version: define current version
|
# version: define current version
|
||||||
my $version = "7.0NG.745 PS200518";
|
my $version = "7.0NG.745 PS200519";
|
||||||
|
|
||||||
# Pandora server configuration
|
# Pandora server configuration
|
||||||
my %conf;
|
my %conf;
|
||||||
|
@ -36,7 +36,7 @@ use Encode::Locale;
|
|||||||
Encode::Locale::decode_argv;
|
Encode::Locale::decode_argv;
|
||||||
|
|
||||||
# version: define current version
|
# version: define current version
|
||||||
my $version = "7.0NG.745 PS200518";
|
my $version = "7.0NG.745 PS200519";
|
||||||
|
|
||||||
# save program name for logging
|
# save program name for logging
|
||||||
my $progname = basename($0);
|
my $progname = basename($0);
|
||||||
|
@ -10,12 +10,12 @@ RUN { \
|
|||||||
|
|
||||||
# Pandora FMS dependencies.
|
# Pandora FMS dependencies.
|
||||||
RUN yum install -y epel-release vim wget bzip2 curl && \
|
RUN yum install -y epel-release vim wget bzip2 curl && \
|
||||||
yum install yum-utils && \
|
yum install -y yum-utils && \
|
||||||
yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm && \
|
yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm && \
|
||||||
yum-config-manager --disable mysql80-community && \
|
yum-config-manager --disable mysql80-community && \
|
||||||
yum-config-manager --enable mysql57-community && \
|
yum-config-manager --enable mysql57-community && \
|
||||||
yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm && \
|
yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm && \
|
||||||
yum-config-manager --enable remi-php74 && \
|
yum-config-manager --enable remi-php72 && \
|
||||||
yum install -y gtk3 python-pip \
|
yum install -y gtk3 python-pip \
|
||||||
python-pip \
|
python-pip \
|
||||||
firefox \
|
firefox \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user