Merge branch 'develop' into ent-12745-falta-un-campo-en-la-tabla-tncm_agent_data
This commit is contained in:
commit
30e0ed912a
|
@ -1,5 +1,5 @@
|
||||||
package: pandorafms-agent-unix
|
package: pandorafms-agent-unix
|
||||||
Version: 7.0NG.775-240117
|
Version: 7.0NG.775-240119
|
||||||
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.775-240117"
|
pandora_version="7.0NG.775-240119"
|
||||||
|
|
||||||
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
|
||||||
|
|
|
@ -1039,7 +1039,7 @@ my $Sem = undef;
|
||||||
my $ThreadSem = undef;
|
my $ThreadSem = undef;
|
||||||
|
|
||||||
use constant AGENT_VERSION => '7.0NG.775';
|
use constant AGENT_VERSION => '7.0NG.775';
|
||||||
use constant AGENT_BUILD => '240117';
|
use constant AGENT_BUILD => '240119';
|
||||||
|
|
||||||
# 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;
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
%global __os_install_post %{nil}
|
%global __os_install_post %{nil}
|
||||||
%define name pandorafms_agent_linux
|
%define name pandorafms_agent_linux
|
||||||
%define version 7.0NG.775
|
%define version 7.0NG.775
|
||||||
%define release 240117
|
%define release 240119
|
||||||
|
|
||||||
Summary: Pandora FMS Linux agent, PERL version
|
Summary: Pandora FMS Linux agent, PERL version
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
%define name pandorafms_agent_linux_bin
|
%define name pandorafms_agent_linux_bin
|
||||||
%define source_name pandorafms_agent_linux
|
%define source_name pandorafms_agent_linux
|
||||||
%define version 7.0NG.775
|
%define version 7.0NG.775
|
||||||
%define release 240117
|
%define release 240119
|
||||||
%define debug_package %{nil}
|
%define debug_package %{nil}
|
||||||
|
|
||||||
Summary: Pandora FMS Linux agent, binary version
|
Summary: Pandora FMS Linux agent, binary version
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
%define name pandorafms_agent_linux_bin
|
%define name pandorafms_agent_linux_bin
|
||||||
%define source_name pandorafms_agent_linux
|
%define source_name pandorafms_agent_linux
|
||||||
%define version 7.0NG.775
|
%define version 7.0NG.775
|
||||||
%define release 240117
|
%define release 240119
|
||||||
%define debug_package %{nil}
|
%define debug_package %{nil}
|
||||||
|
|
||||||
Summary: Pandora FMS Linux agent, binary version
|
Summary: Pandora FMS Linux agent, binary version
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
%define name pandorafms_agent_linux_bin
|
%define name pandorafms_agent_linux_bin
|
||||||
%define source_name pandorafms_agent_linux
|
%define source_name pandorafms_agent_linux
|
||||||
%define version 7.0NG.775
|
%define version 7.0NG.775
|
||||||
%define release 240117
|
%define release 240119
|
||||||
|
|
||||||
Summary: Pandora FMS Linux agent, binary version
|
Summary: Pandora FMS Linux agent, binary version
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
%global __os_install_post %{nil}
|
%global __os_install_post %{nil}
|
||||||
%define name pandorafms_agent_linux
|
%define name pandorafms_agent_linux
|
||||||
%define version 7.0NG.775
|
%define version 7.0NG.775
|
||||||
%define release 240117
|
%define release 240119
|
||||||
|
|
||||||
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.775"
|
PI_VERSION="7.0NG.775"
|
||||||
PI_BUILD="240117"
|
PI_BUILD="240119"
|
||||||
OS_NAME=`uname -s`
|
OS_NAME=`uname -s`
|
||||||
|
|
||||||
FORCE=0
|
FORCE=0
|
||||||
|
|
|
@ -186,7 +186,7 @@ UpgradeApplicationID
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Version
|
Version
|
||||||
{240117}
|
{240119}
|
||||||
|
|
||||||
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.775 Build 240117")
|
#define PANDORA_VERSION ("7.0NG.775 Build 240119")
|
||||||
|
|
||||||
string pandora_path;
|
string pandora_path;
|
||||||
string pandora_dir;
|
string pandora_dir;
|
||||||
|
|
|
@ -11,7 +11,7 @@ BEGIN
|
||||||
VALUE "LegalCopyright", "Pandora FMS"
|
VALUE "LegalCopyright", "Pandora FMS"
|
||||||
VALUE "OriginalFilename", "PandoraAgent.exe"
|
VALUE "OriginalFilename", "PandoraAgent.exe"
|
||||||
VALUE "ProductName", "Pandora FMS Windows Agent"
|
VALUE "ProductName", "Pandora FMS Windows Agent"
|
||||||
VALUE "ProductVersion", "(7.0NG.775(Build 240117))"
|
VALUE "ProductVersion", "(7.0NG.775(Build 240119))"
|
||||||
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.775-240117
|
Version: 7.0NG.775-240119
|
||||||
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.775-240117"
|
pandora_version="7.0NG.775-240119"
|
||||||
|
|
||||||
package_pear=0
|
package_pear=0
|
||||||
package_pandora=1
|
package_pandora=1
|
||||||
|
|
|
@ -3,4 +3,6 @@ START TRANSACTION;
|
||||||
ALTER TABLE `tncm_agent_data`
|
ALTER TABLE `tncm_agent_data`
|
||||||
ADD COLUMN `id_agent_data` int not null default 0 AFTER `script_type`;
|
ADD COLUMN `id_agent_data` int not null default 0 AFTER `script_type`;
|
||||||
|
|
||||||
|
ALTER TABLE `tusuario` CHANGE COLUMN `metaconsole_data_section` `metaconsole_data_section` TEXT NOT NULL DEFAULT '' ;
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
|
@ -397,21 +397,23 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass);
|
||||||
$modal_box .= '<a href="https://discord.com/invite/xVt2ruSxmr" target="_blank">'.__('Join discord community').'</a>';
|
$modal_box .= '<a href="https://discord.com/invite/xVt2ruSxmr" target="_blank">'.__('Join discord community').'</a>';
|
||||||
$modal_box .= '</div>';
|
$modal_box .= '</div>';
|
||||||
|
|
||||||
$modal_help = html_print_div(
|
if ($config['activate_feedback'] === '1') {
|
||||||
[
|
$modal_help = html_print_div(
|
||||||
'id' => 'modal-help-content',
|
[
|
||||||
'content' => html_print_image(
|
'id' => 'modal-help-content',
|
||||||
'images/help@header.svg',
|
'content' => html_print_image(
|
||||||
true,
|
'images/help@header.svg',
|
||||||
[
|
true,
|
||||||
'title' => __('Help'),
|
[
|
||||||
'class' => 'main_menu_icon bot invert_filter',
|
'title' => __('Help'),
|
||||||
'alt' => 'user',
|
'class' => 'main_menu_icon bot invert_filter',
|
||||||
]
|
'alt' => 'user',
|
||||||
).$modal_box,
|
]
|
||||||
],
|
).$modal_box,
|
||||||
true,
|
],
|
||||||
);
|
true,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// User.
|
// User.
|
||||||
|
|
|
@ -399,12 +399,12 @@ if ($new_agent === true) {
|
||||||
|
|
||||||
// Ip adress.
|
// Ip adress.
|
||||||
$tableAgent->data['caption_ip_address'] = __('IP Address');
|
$tableAgent->data['caption_ip_address'] = __('IP Address');
|
||||||
$tableAgent->rowclass['ip_address'] = 'w540px';
|
$tableAgent->rowclass['ip_address'] = 'w400px';
|
||||||
$tableAgent->data['ip_address'][0] = html_print_input_text('direccion', $direccion_agente, '', 16, 100, true, false, false, '', 'w540px');
|
$tableAgent->data['ip_address'][0] = html_print_input_text('direccion', $direccion_agente, '', 16, 100, true, false, false, '', 'w540px');
|
||||||
|
$tableAgent->data['ip_address'][1] = html_print_button(__('Check unique IP'), 'check_unique_ip', false, '', ['class' => 'secondary w130px'], true);
|
||||||
|
$tableAgent->data['message_check_ip'][0] = html_print_div(['id' => 'message_check_ip'], true);
|
||||||
|
|
||||||
$tableAgent->rowclass['additional_ip_address'] = 'subinput';
|
$tableAgent->rowclass['additional_ip_address'] = 'subinput';
|
||||||
$tableAgent->data['additional_ip_address'][0] = html_print_checkbox_switch('unique_ip', 1, $config['unique_ip'], true);
|
|
||||||
$tableAgent->data['additional_ip_address'][1] = __('Unique IP');
|
|
||||||
$tableAgent->cellclass['additional_ip_address'][1] = 'w120px';
|
$tableAgent->cellclass['additional_ip_address'][1] = 'w120px';
|
||||||
$tableAgent->data['additional_ip_address'][2] = html_print_input(
|
$tableAgent->data['additional_ip_address'][2] = html_print_input(
|
||||||
[
|
[
|
||||||
|
@ -1130,17 +1130,12 @@ foreach ($fields as $field) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((bool) $field['is_password_type'] === true) {
|
if ((bool) $field['is_password_type'] === true) {
|
||||||
$customContent = html_print_input_text_extended(
|
$customContent = html_print_input_password(
|
||||||
'customvalue_'.$field['id_field'],
|
'customvalue_'.$field['id_field'],
|
||||||
$custom_value,
|
$custom_value,
|
||||||
'customvalue_'.$field['id_field'],
|
|
||||||
'',
|
'',
|
||||||
30,
|
45,
|
||||||
100,
|
255,
|
||||||
$view_mode,
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
true,
|
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
} else if ($field['is_link_enabled']) {
|
} else if ($field['is_link_enabled']) {
|
||||||
|
@ -1301,6 +1296,7 @@ ui_require_jquery_file('bgiframe');
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
let unique_ip_trigger = false;
|
||||||
// Show/Hide custom field row.
|
// Show/Hide custom field row.
|
||||||
function show_custom_field_row(id){
|
function show_custom_field_row(id){
|
||||||
if( $('#field-'+id).css('display') == 'none'){
|
if( $('#field-'+id).css('display') == 'none'){
|
||||||
|
@ -1464,23 +1460,40 @@ ui_require_jquery_file('bgiframe');
|
||||||
$("#text-agente").prop('readonly', true);
|
$("#text-agente").prop('readonly', true);
|
||||||
|
|
||||||
|
|
||||||
// Disable fixed ip button if empty.
|
$("#text-direccion").on('change',function(e){
|
||||||
if($("#text-direccion").val() == '') {
|
const unique_ip_token = '<?php echo $config['unique_ip']; ?>';
|
||||||
$("#fixed_ip").prop('disabled',true);
|
unique_ip_trigger = false;
|
||||||
}
|
if (unique_ip_token == 1) {
|
||||||
|
check_unique_ip();
|
||||||
$("#text-direccion").on('input',function(e){
|
|
||||||
if($("#text-direccion").val() == '') {
|
|
||||||
$("#fixed_ip").prop('disabled',true);
|
|
||||||
} else {
|
|
||||||
$("#fixed_ip").prop('disabled',false);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
check_basic_options();
|
check_basic_options();
|
||||||
$('#id_os').on('change', function(){
|
$('#id_os').on('change', function(){
|
||||||
check_basic_options();
|
check_basic_options();
|
||||||
})
|
});
|
||||||
|
|
||||||
|
$('#button-check_unique_ip').on('click', function() {
|
||||||
|
check_unique_ip();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#form_agent').on('submit', function(e) {
|
||||||
|
if (unique_ip_trigger) {
|
||||||
|
e.preventDefault();
|
||||||
|
const form = this;
|
||||||
|
confirmDialog(
|
||||||
|
{
|
||||||
|
title: '<?php echo __('Are you sure?'); ?>',
|
||||||
|
message: '<?php echo __('This IP address is in use. Are you sure you want to save it?'); ?>',
|
||||||
|
ok: '<?php echo __('Yes'); ?>',
|
||||||
|
cancel: '<?php echo __('Cancel'); ?>',
|
||||||
|
onAccept: function() {
|
||||||
|
form.submit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function check_basic_options(){
|
function check_basic_options(){
|
||||||
|
@ -1490,4 +1503,40 @@ ui_require_jquery_file('bgiframe');
|
||||||
$('#basic_options').addClass('invisible');
|
$('#basic_options').addClass('invisible');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function check_unique_ip() {
|
||||||
|
const direccion = $('#text-direccion').val();
|
||||||
|
let ip_all = <?php echo json_encode($ip_all); ?>;
|
||||||
|
if (ip_all) {
|
||||||
|
ip_all = Object.keys(ip_all);
|
||||||
|
}
|
||||||
|
$.ajax({
|
||||||
|
method: "POST",
|
||||||
|
url: "<?php echo ui_get_full_url('ajax.php'); ?>",
|
||||||
|
dataType: 'json',
|
||||||
|
data: {
|
||||||
|
page: "include/ajax/agent",
|
||||||
|
check_unique_ip: 1,
|
||||||
|
direccion,
|
||||||
|
ip_all
|
||||||
|
},
|
||||||
|
success: function(data) {
|
||||||
|
if (data.success) {
|
||||||
|
$('#message_check_ip').attr('class', 'success');
|
||||||
|
} else {
|
||||||
|
$('#message_check_ip').attr('class', 'error');
|
||||||
|
}
|
||||||
|
|
||||||
|
if(data.exist_ip) {
|
||||||
|
unique_ip_trigger = true;
|
||||||
|
} else {
|
||||||
|
unique_ip_trigger = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#message_check_ip').html(data.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -102,7 +102,6 @@ $alias_as_name = 0;
|
||||||
$direccion_agente = get_parameter('direccion', '');
|
$direccion_agente = get_parameter('direccion', '');
|
||||||
$direccion_agente = trim(io_safe_output($direccion_agente));
|
$direccion_agente = trim(io_safe_output($direccion_agente));
|
||||||
$direccion_agente = io_safe_input($direccion_agente);
|
$direccion_agente = io_safe_input($direccion_agente);
|
||||||
$unique_ip = 0;
|
|
||||||
$intervalo = SECONDS_5MINUTES;
|
$intervalo = SECONDS_5MINUTES;
|
||||||
$ff_interval = 0;
|
$ff_interval = 0;
|
||||||
$quiet_module = 0;
|
$quiet_module = 0;
|
||||||
|
@ -186,7 +185,6 @@ if ($create_agent) {
|
||||||
$alias = io_safe_input(trim(preg_replace('/[\/\\\|%#&$]/', '', $alias_safe_output)));
|
$alias = io_safe_input(trim(preg_replace('/[\/\\\|%#&$]/', '', $alias_safe_output)));
|
||||||
$alias_as_name = (int) get_parameter_post('alias_as_name', 0);
|
$alias_as_name = (int) get_parameter_post('alias_as_name', 0);
|
||||||
$direccion_agente = (string) get_parameter_post('direccion', '');
|
$direccion_agente = (string) get_parameter_post('direccion', '');
|
||||||
$unique_ip = (int) get_parameter_post('unique_ip', 0);
|
|
||||||
|
|
||||||
// Safe_output only validate ip.
|
// Safe_output only validate ip.
|
||||||
$direccion_agente = trim(io_safe_output($direccion_agente));
|
$direccion_agente = trim(io_safe_output($direccion_agente));
|
||||||
|
@ -269,12 +267,7 @@ if ($create_agent) {
|
||||||
$nombre_agente = $alias;
|
$nombre_agente = $alias;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($unique_ip && $direccion_agente != '') {
|
if (!$exists_alias) {
|
||||||
$sql = 'SELECT direccion FROM tagente WHERE direccion = "'.$direccion_agente.'"';
|
|
||||||
$exists_ip = db_get_row_sql($sql);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$exists_alias && !$exists_ip) {
|
|
||||||
$id_agente = db_process_sql_insert(
|
$id_agente = db_process_sql_insert(
|
||||||
'tagente',
|
'tagente',
|
||||||
[
|
[
|
||||||
|
@ -371,8 +364,6 @@ if ($create_agent) {
|
||||||
$agent_creation_error = __('Could not be created');
|
$agent_creation_error = __('Could not be created');
|
||||||
if ($exists_alias) {
|
if ($exists_alias) {
|
||||||
$agent_creation_error = __('Could not be created, because name already exists');
|
$agent_creation_error = __('Could not be created, because name already exists');
|
||||||
} else if ($exists_ip) {
|
|
||||||
$agent_creation_error = __('Could not be created, because IP already exists');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -962,7 +953,6 @@ if ($update_agent) {
|
||||||
$alias = io_safe_input(trim(preg_replace('/[\/\\\|%#&$]/', '', $alias_safe_output)));
|
$alias = io_safe_input(trim(preg_replace('/[\/\\\|%#&$]/', '', $alias_safe_output)));
|
||||||
$alias_as_name = (int) get_parameter_post('alias_as_name', 0);
|
$alias_as_name = (int) get_parameter_post('alias_as_name', 0);
|
||||||
$direccion_agente = (string) get_parameter_post('direccion', '');
|
$direccion_agente = (string) get_parameter_post('direccion', '');
|
||||||
$unique_ip = (int) get_parameter_post('unique_ip', 0);
|
|
||||||
// Safe_output only validate ip.
|
// Safe_output only validate ip.
|
||||||
$direccion_agente = trim(io_safe_output($direccion_agente));
|
$direccion_agente = trim(io_safe_output($direccion_agente));
|
||||||
|
|
||||||
|
@ -1097,18 +1087,11 @@ if ($update_agent) {
|
||||||
// If there is an agent with the same name, but a different ID.
|
// If there is an agent with the same name, but a different ID.
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($direccion_agente !== $address_list && (bool) $unique_ip === true && $direccion_agente != '') {
|
|
||||||
$sql = 'SELECT direccion FROM tagente WHERE direccion = "'.$direccion_agente.'"';
|
|
||||||
$exists_ip = db_get_row_sql($sql);
|
|
||||||
}
|
|
||||||
|
|
||||||
$old_group = agents_get_agent_group($id_agente);
|
$old_group = agents_get_agent_group($id_agente);
|
||||||
if ($grupo <= 0) {
|
if ($grupo <= 0) {
|
||||||
ui_print_error_message(__('The group id %d is incorrect.', $grupo));
|
ui_print_error_message(__('The group id %d is incorrect.', $grupo));
|
||||||
} else if ($old_group !== $grupo && group_allow_more_agents($grupo, true, 'update') === false) {
|
} else if ($old_group !== $grupo && group_allow_more_agents($grupo, true, 'update') === false) {
|
||||||
ui_print_error_message(__('Agent cannot be updated due to the maximum agent limit for this group'));
|
ui_print_error_message(__('Agent cannot be updated due to the maximum agent limit for this group'));
|
||||||
} else if ($exists_ip) {
|
|
||||||
ui_print_error_message(__('Duplicate main IP address'));
|
|
||||||
} else {
|
} else {
|
||||||
// If different IP is specified than previous, add the IP.
|
// If different IP is specified than previous, add the IP.
|
||||||
if ($direccion_agente != ''
|
if ($direccion_agente != ''
|
||||||
|
|
|
@ -275,21 +275,27 @@ $(document).ready (function () {
|
||||||
$('#configure_field-3').show();
|
$('#configure_field-3').show();
|
||||||
dialog_message("#message_no_set_password");
|
dialog_message("#message_no_set_password");
|
||||||
$('#configure_field-1').hide();
|
$('#configure_field-1').hide();
|
||||||
|
$('#configure_field-2-0').hide();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$('#configure_field-3').hide();
|
$('#configure_field-3').hide();
|
||||||
$('#configure_field-1').show();
|
$('#configure_field-1').show();
|
||||||
|
$('#configure_field-2-0').show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
$('input[type=checkbox][name=is_password_type]').change(function () {
|
$('input[type=checkbox][name=is_password_type]').change(function () {
|
||||||
if( $('input[type=checkbox][name=is_password_type]').prop('checked')){
|
if( $('input[type=checkbox][name=is_password_type]').prop('checked')){
|
||||||
|
$('#configure_field-1').hide();
|
||||||
dialog_message("#message_no_set_combo");
|
dialog_message("#message_no_set_combo");
|
||||||
$('#configure_field-3').hide();
|
$('#configure_field-3').hide();
|
||||||
|
$('#configure_field-2-1').hide();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if($('input[type=checkbox][name=is_combo_enable]').prop('checked') === true) {
|
if($('input[type=checkbox][name=is_combo_enable]').prop('checked') === true) {
|
||||||
$('#configure_field-3').show();
|
$('#configure_field-3').show();
|
||||||
}
|
}
|
||||||
|
$('#configure_field-1').show();
|
||||||
|
$('#configure_field-2-1').show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1131,13 +1131,13 @@ if (isset($id_agente) === true && (int) $moduletype === MODULE_DATA) {
|
||||||
$tableCron->data['cron_to_select'][0] = html_print_extended_select_for_cron($hour_to, $minute_to, $mday_to, $month_to, $wday_to, true, $disabledBecauseInPolicy, true);
|
$tableCron->data['cron_to_select'][0] = html_print_extended_select_for_cron($hour_to, $minute_to, $mday_to, $month_to, $wday_to, true, $disabledBecauseInPolicy, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
$table_advanced->rowclass['cron_section'] = 'table_section full_section';
|
$table_advanced->rowclass['cron_section'] = 'table_section full_section mrgn_top_mod_0px';
|
||||||
$table_advanced->data['cron_section'] = html_print_table($tableCron, true);
|
$table_advanced->data['cron_section'] = html_print_table($tableCron, true);
|
||||||
|
|
||||||
$table_advanced->data['title_3'] = html_print_subtitle_table(__('Thresholds and state changes'));
|
$table_advanced->data['title_3'] = html_print_subtitle_table(__('Thresholds and state changes'));
|
||||||
|
|
||||||
$table_advanced->rowclass['caption_min_max_values'] = 'w50p pdd_t_10px';
|
$table_advanced->rowclass['caption_min_max_values'] = 'w50p pdd_t_10px';
|
||||||
$table_advanced->rowclass['min_max_values'] = 'w50p';
|
$table_advanced->rowclass['min_max_values'] = 'w50p pdd_b_10px';
|
||||||
$table_advanced->data['caption_min_max_values'][0] = __('Min. Value');
|
$table_advanced->data['caption_min_max_values'][0] = __('Min. Value');
|
||||||
$table_advanced->data['caption_min_max_values'][1] = __('Max. Value');
|
$table_advanced->data['caption_min_max_values'][1] = __('Max. Value');
|
||||||
|
|
||||||
|
@ -1214,7 +1214,7 @@ $tableDynamicThreshold->data['adv_dynamic_threshold_twotailed'][0] = html_print_
|
||||||
$disabledBecauseInPolicy
|
$disabledBecauseInPolicy
|
||||||
);
|
);
|
||||||
|
|
||||||
$table_advanced->rowclass['dynamic_threshold_table'] = 'table_section full_section';
|
$table_advanced->rowclass['dynamic_threshold_table'] = 'table_section full_section mrgn_top_mod_0px';
|
||||||
$table_advanced->data['dynamic_threshold_table'] = html_print_table($tableDynamicThreshold, true);
|
$table_advanced->data['dynamic_threshold_table'] = html_print_table($tableDynamicThreshold, true);
|
||||||
|
|
||||||
$tableFFThreshold = new stdClass();
|
$tableFFThreshold = new stdClass();
|
||||||
|
@ -1304,10 +1304,15 @@ $tableFFThreshold->data['ff_thresholds_each'][2] = html_print_input_text(
|
||||||
$classdisabledBecauseInPolicy
|
$classdisabledBecauseInPolicy
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$table_advanced->rowclass['gap_flipflop'] = 'mrgn_top_btn_10px_imp';
|
||||||
|
$table_advanced->data['gap_flipflop'] = html_print_input_hidden('gap_flipflop', 0);
|
||||||
|
|
||||||
$table_advanced->rowclass['flipflop_thresholds_table'] = 'table_section full_section';
|
$table_advanced->rowclass['flipflop_thresholds_table'] = 'table_section full_section mrgn_top_mod_0px';
|
||||||
$table_advanced->data['flipflop_thresholds_table'] = html_print_table($tableFFThreshold, true);
|
$table_advanced->data['flipflop_thresholds_table'] = html_print_table($tableFFThreshold, true);
|
||||||
|
|
||||||
|
$table_advanced->rowclass['gap_ff'] = 'mrgn_top_btn_10px_imp';
|
||||||
|
$table_advanced->data['gap_ff'] = html_print_input_hidden('gap_ff', 0);
|
||||||
|
|
||||||
$table_advanced->rowclass['caption_ff_interval_timeout'] = 'w50p';
|
$table_advanced->rowclass['caption_ff_interval_timeout'] = 'w50p';
|
||||||
$table_advanced->rowclass['ff_interval_timeout'] = 'w50p';
|
$table_advanced->rowclass['ff_interval_timeout'] = 'w50p';
|
||||||
$table_advanced->cellclass['caption_ff_interval_timeout'][0] = 'w50p';
|
$table_advanced->cellclass['caption_ff_interval_timeout'][0] = 'w50p';
|
||||||
|
|
|
@ -497,7 +497,12 @@ foreach ($actions as $action) {
|
||||||
$pagination = '';
|
$pagination = '';
|
||||||
if (isset($data)) {
|
if (isset($data)) {
|
||||||
html_print_table($table);
|
html_print_table($table);
|
||||||
$pagination = ui_pagination($total_actions, $url, 0, 0, true, 'offset', false, '');
|
$show_count = false;
|
||||||
|
if (is_metaconsole() === true) {
|
||||||
|
$show_count = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$pagination = ui_pagination($total_actions, $url, 0, 0, true, 'offset', $show_count, '');
|
||||||
} else {
|
} else {
|
||||||
ui_print_info_message(['no_close' => true, 'message' => __('No alert actions configured') ]);
|
ui_print_info_message(['no_close' => true, 'message' => __('No alert actions configured') ]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1080,7 +1080,12 @@ foreach ($commands as $command) {
|
||||||
|
|
||||||
if (isset($data) === true && count($table->data) > 0) {
|
if (isset($data) === true && count($table->data) > 0) {
|
||||||
html_print_table($table);
|
html_print_table($table);
|
||||||
$pagination = ui_pagination($total_commands, $url, 0, 0, true, 'offset', false, '');
|
$show_count = false;
|
||||||
|
if (is_metaconsole() === true) {
|
||||||
|
$show_count = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$pagination = ui_pagination($total_commands, $url, 0, 0, true, 'offset', $show_count, '');
|
||||||
} else {
|
} else {
|
||||||
ui_print_info_message(
|
ui_print_info_message(
|
||||||
[
|
[
|
||||||
|
|
|
@ -493,6 +493,11 @@ foreach ($templates as $template) {
|
||||||
|
|
||||||
$pagination = '';
|
$pagination = '';
|
||||||
if (isset($data) === true) {
|
if (isset($data) === true) {
|
||||||
|
$show_count = false;
|
||||||
|
if (is_metaconsole() === true) {
|
||||||
|
$show_count = true;
|
||||||
|
}
|
||||||
|
|
||||||
html_print_table($table);
|
html_print_table($table);
|
||||||
$pagination = ui_pagination(
|
$pagination = ui_pagination(
|
||||||
$total_templates,
|
$total_templates,
|
||||||
|
@ -501,7 +506,7 @@ if (isset($data) === true) {
|
||||||
0,
|
0,
|
||||||
true,
|
true,
|
||||||
'offset',
|
'offset',
|
||||||
false,
|
$show_count,
|
||||||
''
|
''
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -88,7 +88,17 @@ if ($multiple_delete) {
|
||||||
['id_filter' => $id]
|
['id_filter' => $id]
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($result === false) {
|
if ($result !== false) {
|
||||||
|
db_process_sql_delete(
|
||||||
|
'tfavmenu_user',
|
||||||
|
[
|
||||||
|
'id_element' => $id,
|
||||||
|
'section' => 'Events',
|
||||||
|
'id_user' => $config['id_user'],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$result = true;
|
||||||
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -210,7 +220,7 @@ foreach ($filters as $filter) {
|
||||||
true,
|
true,
|
||||||
[
|
[
|
||||||
'title' => __('Delete'),
|
'title' => __('Delete'),
|
||||||
'class' => 'invert_filter',
|
'class' => 'invert_filter main_menu_icon',
|
||||||
]
|
]
|
||||||
).'</a>';
|
).'</a>';
|
||||||
}
|
}
|
||||||
|
|
|
@ -1529,7 +1529,7 @@ $array_os = [
|
||||||
'windows' => __('Windows'),
|
'windows' => __('Windows'),
|
||||||
];
|
];
|
||||||
$table->data[40][0] = html_print_label_input_block(
|
$table->data[40][0] = html_print_label_input_block(
|
||||||
__('rget OS'),
|
__('Target OS'),
|
||||||
html_print_select(
|
html_print_select(
|
||||||
$array_os,
|
$array_os,
|
||||||
'custom_string_2',
|
'custom_string_2',
|
||||||
|
|
|
@ -770,11 +770,14 @@ $("#conf_wizard").click(function() {
|
||||||
modal: {
|
modal: {
|
||||||
title: "<?php echo __('Welcome to').' '.io_safe_output(get_product_name()); ?>",
|
title: "<?php echo __('Welcome to').' '.io_safe_output(get_product_name()); ?>",
|
||||||
cancel: '<?php echo __('Do not show anymore'); ?>',
|
cancel: '<?php echo __('Do not show anymore'); ?>',
|
||||||
ok: '<?php echo __('Close'); ?>'
|
ok: '<?php echo __('Close wizard'); ?>',
|
||||||
|
overlay: true,
|
||||||
|
overlayExtraClass: 'welcome-overlay',
|
||||||
},
|
},
|
||||||
onshow: {
|
onshow: {
|
||||||
page: 'include/ajax/welcome_window',
|
page: 'include/ajax/welcome_window',
|
||||||
method: 'loadWelcomeWindow',
|
method: 'loadWelcomeWindow',
|
||||||
|
width: 1000,
|
||||||
},
|
},
|
||||||
oncancel: {
|
oncancel: {
|
||||||
page: 'include/ajax/welcome_window',
|
page: 'include/ajax/welcome_window',
|
||||||
|
@ -792,6 +795,34 @@ $("#conf_wizard").click(function() {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
onload: () => {
|
||||||
|
$(document).ready(function () {
|
||||||
|
var buttonpane = $("div[aria-describedby='welcome_modal_window'] .ui-dialog-buttonpane.ui-widget-content.ui-helper-clearfix");
|
||||||
|
$(buttonpane).append(`
|
||||||
|
<div class="welcome-wizard-buttons">
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" class="welcome-wizard-do-not-show" value="1" />
|
||||||
|
<?php echo __('Do not show anymore'); ?>
|
||||||
|
</label>
|
||||||
|
<button class="close-wizard-button"><?php echo __('Close wizard'); ?></button>
|
||||||
|
</div>
|
||||||
|
`);
|
||||||
|
|
||||||
|
var closeWizard = $("button.close-wizard-button");
|
||||||
|
|
||||||
|
$(closeWizard).click(function (e) {
|
||||||
|
var close = $("div[aria-describedby='welcome_modal_window'] button.sub.ok.submit-next.ui-button");
|
||||||
|
var cancel = $("div[aria-describedby='welcome_modal_window'] button.sub.upd.submit-cancel.ui-button");
|
||||||
|
var checkbox = $("div[aria-describedby='welcome_modal_window'] .welcome-wizard-do-not-show:checked").length;
|
||||||
|
|
||||||
|
if (checkbox === 1) {
|
||||||
|
$(cancel).click();
|
||||||
|
} else {
|
||||||
|
$(close).click()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -394,11 +394,11 @@ html_print_action_buttons(
|
||||||
$('[id^=checkbox-all_delete]').change(function(){
|
$('[id^=checkbox-all_delete]').change(function(){
|
||||||
if ($("#checkbox-all_delete").prop("checked")) {
|
if ($("#checkbox-all_delete").prop("checked")) {
|
||||||
$('[id^=checkbox-delete_multiple]').parent().parent().addClass('checkselected');
|
$('[id^=checkbox-delete_multiple]').parent().parent().addClass('checkselected');
|
||||||
$(".check_delete").prop("checked", true);
|
$(".custom_checkbox_input").prop("checked", true);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$('[id^=checkbox-delete_multiple]').parent().parent().removeClass('checkselected');
|
$('[id^=checkbox-delete_multiple]').parent().parent().removeClass('checkselected');
|
||||||
$(".check_delete").prop("checked", false);
|
$(".custom_checkbox_input").prop("checked", false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -30,7 +30,7 @@ if (!$report_w && !$report_m) {
|
||||||
require_once $config['homedir'].'/include/functions_agents.php';
|
require_once $config['homedir'].'/include/functions_agents.php';
|
||||||
require_once $config['homedir'].'/include/functions_modules.php';
|
require_once $config['homedir'].'/include/functions_modules.php';
|
||||||
require_once $config['homedir'].'/include/functions_groups.php';
|
require_once $config['homedir'].'/include/functions_groups.php';
|
||||||
|
ui_require_css_file('custom_graph');
|
||||||
$editGraph = (bool) get_parameter('edit_graph', 0);
|
$editGraph = (bool) get_parameter('edit_graph', 0);
|
||||||
$action = get_parameter('action', '');
|
$action = get_parameter('action', '');
|
||||||
|
|
||||||
|
@ -41,113 +41,6 @@ if (isset($_GET['get_agent'])) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($action) {
|
|
||||||
case 'sort_items':
|
|
||||||
$resultOperationDB = null;
|
|
||||||
$position_to_sort = (int) get_parameter('position_to_sort', 1);
|
|
||||||
$ids_serialize = (string) get_parameter('ids_items_to_sort', '');
|
|
||||||
$move_to = (string) get_parameter('move_to', 'after');
|
|
||||||
|
|
||||||
$countItems = db_get_sql(
|
|
||||||
'
|
|
||||||
SELECT COUNT(id_gs)
|
|
||||||
FROM tgraph_source
|
|
||||||
WHERE id_graph = '.$id_graph
|
|
||||||
);
|
|
||||||
|
|
||||||
if (($countItems < $position_to_sort) || ($position_to_sort < 1)) {
|
|
||||||
$resultOperationDB = false;
|
|
||||||
} else if (!empty($ids_serialize)) {
|
|
||||||
$ids = explode('|', $ids_serialize);
|
|
||||||
$items = db_get_all_rows_sql(
|
|
||||||
'SELECT id_gs, `field_order`
|
|
||||||
FROM tgraph_source
|
|
||||||
WHERE id_graph = '.$id_graph.'
|
|
||||||
ORDER BY `field_order`'
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($items === false) {
|
|
||||||
$items = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Clean the repeated order values.
|
|
||||||
$order_temp = 1;
|
|
||||||
foreach ($items as $item) {
|
|
||||||
db_process_sql_update(
|
|
||||||
'tgraph_source',
|
|
||||||
['`field_order`' => $order_temp],
|
|
||||||
['id_gs' => $item['id_rc']]
|
|
||||||
);
|
|
||||||
|
|
||||||
$order_temp++;
|
|
||||||
}
|
|
||||||
|
|
||||||
$items = db_get_all_rows_sql(
|
|
||||||
'SELECT id_gs, `field_order`
|
|
||||||
FROM tgraph_source
|
|
||||||
WHERE id_graph = '.$id_graph.'
|
|
||||||
ORDER BY `field_order`'
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($items === false) {
|
|
||||||
$items = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$temp = [];
|
|
||||||
|
|
||||||
$temp = [];
|
|
||||||
foreach ($items as $item) {
|
|
||||||
// Remove the contents from the block to sort.
|
|
||||||
if (array_search($item['id_gs'], $ids) === false) {
|
|
||||||
$temp[$item['field_order']] = $item['id_gs'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$items = $temp;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$sorted_items = [];
|
|
||||||
foreach ($items as $pos => $id_unsort) {
|
|
||||||
if ($pos == $position_to_sort) {
|
|
||||||
if ($move_to == 'after') {
|
|
||||||
$sorted_items[] = $id_unsort;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($ids as $id) {
|
|
||||||
$sorted_items[] = $id;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($move_to != 'after') {
|
|
||||||
$sorted_items[] = $id_unsort;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$sorted_items[] = $id_unsort;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$items = $sorted_items;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
foreach ($items as $order => $id) {
|
|
||||||
db_process_sql_update(
|
|
||||||
'tgraph_source',
|
|
||||||
['`field_order`' => ($order + 1)],
|
|
||||||
['id_gs' => $id]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$resultOperationDB = true;
|
|
||||||
} else {
|
|
||||||
$resultOperationDB = false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($editGraph) {
|
if ($editGraph) {
|
||||||
$graphRows = db_get_all_rows_sql(
|
$graphRows = db_get_all_rows_sql(
|
||||||
'SELECT t1.*,
|
'SELECT t1.*,
|
||||||
|
@ -257,41 +150,6 @@ $table->data[0][1] = html_print_label_input_block(
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
$SortItems = "<form action='index.php?sec=reporting&sec2=godmode/reporting/graph_builder&tab=graph_editor&edit_graph=1&id=".$id_graph."' method='post' onsubmit='return added_ids_sorted_items_to_hidden_input();'>";
|
|
||||||
$SortItems .= html_print_table($table, true);
|
|
||||||
$SortItems .= html_print_input_hidden('action', 'sort_items', true);
|
|
||||||
$SortItems .= html_print_div(
|
|
||||||
[
|
|
||||||
'class' => 'action-buttons',
|
|
||||||
'content' => html_print_submit_button(
|
|
||||||
__('Sort'),
|
|
||||||
'srcbutton',
|
|
||||||
false,
|
|
||||||
[
|
|
||||||
'class' => 'mini',
|
|
||||||
'icon' => 'search',
|
|
||||||
'mode' => 'secondary',
|
|
||||||
],
|
|
||||||
true
|
|
||||||
),
|
|
||||||
],
|
|
||||||
true
|
|
||||||
);
|
|
||||||
$SortItems .= '</form>';
|
|
||||||
|
|
||||||
ui_toggle(
|
|
||||||
$SortItems,
|
|
||||||
'<span class="subsection_header_title">'.__('Sort items').'</span>',
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
'',
|
|
||||||
'white-box-content no_border',
|
|
||||||
'filter-datatable-main box-flat white_table_graph max_floating_element_size'
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// Configuration form.
|
// Configuration form.
|
||||||
echo '<span id ="none_text" class="invisible">'.__('None').'</span>';
|
echo '<span id ="none_text" class="invisible">'.__('None').'</span>';
|
||||||
echo "<form id='agentmodules' method='post' action='index.php?sec=reporting&sec2=godmode/reporting/graph_builder&tab=graph_editor&add_module=1&edit_graph=1&id=".$id_graph."'>";
|
echo "<form id='agentmodules' method='post' action='index.php?sec=reporting&sec2=godmode/reporting/graph_builder&tab=graph_editor&add_module=1&edit_graph=1&id=".$id_graph."'>";
|
||||||
|
@ -300,10 +158,11 @@ echo "<table width='100%' cellpadding='4' cellpadding='4' class='databox filters
|
||||||
echo '<tr>';
|
echo '<tr>';
|
||||||
echo '<td class="w50p pdd_50px" id="select_multiple_modules_filtered">'.html_print_input(
|
echo '<td class="w50p pdd_50px" id="select_multiple_modules_filtered">'.html_print_input(
|
||||||
[
|
[
|
||||||
'type' => 'select_multiple_modules_filtered',
|
'type' => 'select_multiple_modules_filtered',
|
||||||
'uniqId' => 'modules',
|
'uniqId' => 'modules',
|
||||||
'class' => 'flex flex-row',
|
'class' => 'flex flex-row',
|
||||||
'searchBar' => true,
|
'searchBar' => false,
|
||||||
|
'placeholderAgents' => __('Search agent name'),
|
||||||
]
|
]
|
||||||
).'</td>';
|
).'</td>';
|
||||||
echo '</tr><tr>';
|
echo '</tr><tr>';
|
||||||
|
@ -340,6 +199,7 @@ echo '</form>';
|
||||||
// Modules table.
|
// Modules table.
|
||||||
if ($count_module_array > 0) {
|
if ($count_module_array > 0) {
|
||||||
echo "<table width='100%' cellpadding=4 cellpadding=4 class='databox filters info_table'>";
|
echo "<table width='100%' cellpadding=4 cellpadding=4 class='databox filters info_table'>";
|
||||||
|
echo '<thead>';
|
||||||
echo '<tr>
|
echo '<tr>
|
||||||
<th>'.__('P.').'</th>
|
<th>'.__('P.').'</th>
|
||||||
<th>'.__('Agent').'</th>
|
<th>'.__('Agent').'</th>
|
||||||
|
@ -348,6 +208,8 @@ if ($count_module_array > 0) {
|
||||||
<th>'.__('Weight').'</th>
|
<th>'.__('Weight').'</th>
|
||||||
<th>'.__('Delete').'</th>
|
<th>'.__('Delete').'</th>
|
||||||
<th>'.__('Sort').'</th>';
|
<th>'.__('Sort').'</th>';
|
||||||
|
echo '</thead>';
|
||||||
|
echo '<tbody>';
|
||||||
$color = 0;
|
$color = 0;
|
||||||
for ($a = 0; $a < $count_module_array; $a++) {
|
for ($a = 0; $a < $count_module_array; $a++) {
|
||||||
// Calculate table line color.
|
// Calculate table line color.
|
||||||
|
@ -359,7 +221,7 @@ if ($count_module_array > 0) {
|
||||||
$color = 1;
|
$color = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "<tr><td class='$tdcolor'>$position_array[$a]</td>";
|
echo "<tr><td class='position $tdcolor'>$position_array[$a]</td>";
|
||||||
echo "<td class='$tdcolor'>".$agent_array[$a].'</td>';
|
echo "<td class='$tdcolor'>".$agent_array[$a].'</td>';
|
||||||
echo "<td class='$tdcolor'>";
|
echo "<td class='$tdcolor'>";
|
||||||
echo modules_get_agentmodule_name($module_array[$a]).'</td>';
|
echo modules_get_agentmodule_name($module_array[$a]).'</td>';
|
||||||
|
@ -410,9 +272,30 @@ if ($count_module_array > 0) {
|
||||||
|
|
||||||
echo '</td>';
|
echo '</td>';
|
||||||
|
|
||||||
echo '<td>';
|
echo '<td style="display: grid;">';
|
||||||
|
|
||||||
echo html_print_checkbox_extended('sorted_items[]', $idgs_array[$a], false, false, '', 'class="selected_check"', true);
|
echo html_print_input_image(
|
||||||
|
'up',
|
||||||
|
'images/arrow-up-white.png',
|
||||||
|
'up',
|
||||||
|
($config['style'] !== 'pandora_black') ? 'filter: invert(100%)' : '',
|
||||||
|
true,
|
||||||
|
[
|
||||||
|
'class' => 'invert_filter main_menu_icon',
|
||||||
|
'onclick' => 'reorder(\'up\', \''.$idgs_array[$a].'\', this)',
|
||||||
|
],
|
||||||
|
);
|
||||||
|
echo html_print_input_image(
|
||||||
|
'down',
|
||||||
|
'images/arrow-down-white.png',
|
||||||
|
'down',
|
||||||
|
($config['style'] !== 'pandora_black') ? 'filter: invert(100%)' : '',
|
||||||
|
true,
|
||||||
|
[
|
||||||
|
'class' => 'invert_filter main_menu_icon',
|
||||||
|
'onclick' => 'reorder(\'down\', \''.$idgs_array[$a].'\', this)',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
echo '</td>';
|
echo '</td>';
|
||||||
|
|
||||||
|
@ -420,6 +303,8 @@ if ($count_module_array > 0) {
|
||||||
echo '</tr>';
|
echo '</tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo '</tbody>';
|
||||||
|
|
||||||
echo '</table>';
|
echo '</table>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -464,7 +349,7 @@ function added_ids_sorted_items_to_hidden_input() {
|
||||||
var ids = '';
|
var ids = '';
|
||||||
var first = true;
|
var first = true;
|
||||||
|
|
||||||
$("input.selected_check:checked").each(function(i, val) {
|
$("input.custom_checkbox_input:checked").each(function(i, val) {
|
||||||
if (!first)
|
if (!first)
|
||||||
ids = ids + '|';
|
ids = ids + '|';
|
||||||
first = false;
|
first = false;
|
||||||
|
@ -482,4 +367,65 @@ function added_ids_sorted_items_to_hidden_input() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function reorder(action, idElement, element) {
|
||||||
|
var tr = $(element).parent().parent();
|
||||||
|
switch (action) {
|
||||||
|
case "up":
|
||||||
|
changePosition(action, idElement)
|
||||||
|
.then((data) => {
|
||||||
|
if(data.success) {
|
||||||
|
$(tr).find('.position').html(parseInt($(tr).find('.position').html()) - 1);
|
||||||
|
$($(tr).prev()).find('.position').html(parseInt($($(tr).prev()).find('.position').html()) + 1);
|
||||||
|
$(tr).prev().insertAfter(tr);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.log(err);
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "down":
|
||||||
|
changePosition(action, idElement)
|
||||||
|
.then((data) => {
|
||||||
|
if(data.success) {
|
||||||
|
$(tr).find('.position').html(parseInt($(tr).find('.position').html()) + 1);
|
||||||
|
$($(tr).next()).find('.position').html(parseInt(($(tr).next()).find('.position').html()) - 1);
|
||||||
|
$(tr).next().insertBefore(tr);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.log(err);
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function changePosition(order, idElement) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
$.ajax({
|
||||||
|
method: "POST",
|
||||||
|
url: "<?php echo ui_get_full_url('ajax.php'); ?>",
|
||||||
|
dataType: "json",
|
||||||
|
data: {
|
||||||
|
page: "include/ajax/graph.ajax",
|
||||||
|
sort_items: 1,
|
||||||
|
order,
|
||||||
|
id_graph: <?php echo $id_graph; ?>,
|
||||||
|
id: idElement
|
||||||
|
},
|
||||||
|
success: function(data) {
|
||||||
|
resolve(data);
|
||||||
|
},
|
||||||
|
error: function(error) {
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -247,7 +247,7 @@ if ($add_module === true) {
|
||||||
|
|
||||||
$id_agent_modules = db_get_all_rows_sql($sql);
|
$id_agent_modules = db_get_all_rows_sql($sql);
|
||||||
|
|
||||||
if (count($id_agent_modules) > 0 && $id_agent_modules != '') {
|
if (is_array($id_agent_modules) === true && count($id_agent_modules) > 0 && $id_agent_modules != '') {
|
||||||
$sql_order = sprintf(
|
$sql_order = sprintf(
|
||||||
'SELECT `field_order`
|
'SELECT `field_order`
|
||||||
FROM tgraph_source
|
FROM tgraph_source
|
||||||
|
|
|
@ -1259,6 +1259,10 @@ switch ($action) {
|
||||||
$reports_table .= html_print_table($table, true);
|
$reports_table .= html_print_table($table, true);
|
||||||
$reports_table .= '<br></div>';
|
$reports_table .= '<br></div>';
|
||||||
echo $reports_table;
|
echo $reports_table;
|
||||||
|
$show_count = false;
|
||||||
|
if (is_metaconsole() === true) {
|
||||||
|
$show_count = true;
|
||||||
|
}
|
||||||
|
|
||||||
$tablePagination = ui_pagination(
|
$tablePagination = ui_pagination(
|
||||||
$total_reports,
|
$total_reports,
|
||||||
|
@ -1267,7 +1271,7 @@ switch ($action) {
|
||||||
$pagination,
|
$pagination,
|
||||||
true,
|
true,
|
||||||
'offset',
|
'offset',
|
||||||
false
|
$show_count
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
ui_print_info_message(
|
ui_print_info_message(
|
||||||
|
|
|
@ -521,7 +521,7 @@ $(document).ready (function () {
|
||||||
function (data) {
|
function (data) {
|
||||||
$(".white-box-content").html(data);
|
$(".white-box-content").html(data);
|
||||||
|
|
||||||
$("#submit-add").click(function (e) {
|
$("#button-add").click(function (e) {
|
||||||
add_credential_boxes();
|
add_credential_boxes();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -550,7 +550,7 @@ $(document).ready (function () {
|
||||||
$(".white-box-content").html(data2);
|
$(".white-box-content").html(data2);
|
||||||
|
|
||||||
// Insert credential
|
// Insert credential
|
||||||
$("#submit-add").click(function (e) {
|
$("#button-add").click(function (e) {
|
||||||
save_credential_boxes();
|
save_credential_boxes();
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
@ -609,7 +609,7 @@ $(document).ready (function () {
|
||||||
function (data) {
|
function (data) {
|
||||||
$(".white-box-content").html(data);
|
$(".white-box-content").html(data);
|
||||||
|
|
||||||
$("#submit-update").click(function (e) {
|
$("#button-update").click(function (e) {
|
||||||
update_credential_boxes(datas);
|
update_credential_boxes(datas);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -559,7 +559,7 @@ $table_cr_settings->data[4][0] = html_print_label_input_block(
|
||||||
|
|
||||||
// Print.
|
// Print.
|
||||||
echo '<div class="center pdd_b_10px mrgn_btn_20px white_box max_floating_element_size">';
|
echo '<div class="center pdd_b_10px mrgn_btn_20px white_box max_floating_element_size">';
|
||||||
echo '<a target="_blank" rel="noopener noreferrer" href="https://pandorafms.com/es/itsm/">';
|
echo '<a target="_blank" rel="noopener noreferrer" href="https://pandorafms.com/itsm/">';
|
||||||
html_print_image(
|
html_print_image(
|
||||||
'images/pandoraITSM_logo.png',
|
'images/pandoraITSM_logo.png',
|
||||||
false,
|
false,
|
||||||
|
@ -570,8 +570,8 @@ echo '<br />';
|
||||||
echo '<div class="ITSM_title">';
|
echo '<div class="ITSM_title">';
|
||||||
echo __('Pandora ITSM');
|
echo __('Pandora ITSM');
|
||||||
echo '</div>';
|
echo '</div>';
|
||||||
echo '<a target="_blank" rel="noopener noreferrer" href="https://pandorafms.com/es/itsm/">';
|
echo '<a target="_blank" rel="noopener noreferrer" href="https://pandorafms.com/itsm/">';
|
||||||
echo 'https://pandorafms.com/es/itsm/';
|
echo 'https://pandorafms.com/itsm/';
|
||||||
echo '</a>';
|
echo '</a>';
|
||||||
echo '</div>';
|
echo '</div>';
|
||||||
|
|
||||||
|
|
|
@ -527,9 +527,12 @@ $table->data[$i++][] = html_print_label_input_block(
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
$help_tip = ui_print_help_tip(
|
||||||
|
__('No events or alerts will be generated, but data will still be received.'),
|
||||||
|
true
|
||||||
|
);
|
||||||
$table->data[$i][] = html_print_label_input_block(
|
$table->data[$i][] = html_print_label_input_block(
|
||||||
__('Event storm protection'),
|
__('Event storm protection').$help_tip,
|
||||||
html_print_checkbox_switch(
|
html_print_checkbox_switch(
|
||||||
'event_storm_protection',
|
'event_storm_protection',
|
||||||
1,
|
1,
|
||||||
|
|
|
@ -424,10 +424,13 @@ if ($create_user === true) {
|
||||||
$values['data_section'] = $dashboard;
|
$values['data_section'] = $dashboard;
|
||||||
} else if (io_safe_output($values['section']) === HOME_SCREEN_VISUAL_CONSOLE) {
|
} else if (io_safe_output($values['section']) === HOME_SCREEN_VISUAL_CONSOLE) {
|
||||||
$values['data_section'] = $visual_console;
|
$values['data_section'] = $visual_console;
|
||||||
} else if ($values['section'] === HOME_SCREEN_OTHER) {
|
} else if ($values['section'] === HOME_SCREEN_OTHER || io_safe_output($values['section']) === HOME_SCREEN_EXTERNAL_LINK) {
|
||||||
$values['data_section'] = get_parameter('data_section_other');
|
$values['data_section'] = get_parameter('data_section');
|
||||||
} else if (io_safe_output($values['section']) === HOME_SCREEN_EXTERNAL_LINK) {
|
}
|
||||||
$values['data_section'] = get_parameter('data_section_external');
|
|
||||||
|
if (is_metaconsole() === true) {
|
||||||
|
$values['metaconsole_section'] = $values['section'];
|
||||||
|
$values['metaconsole_data_section'] = $values['data_section'];
|
||||||
}
|
}
|
||||||
|
|
||||||
// $values['section'] = $homeScreenValues[$values['section']];
|
// $values['section'] = $homeScreenValues[$values['section']];
|
||||||
|
@ -724,10 +727,8 @@ if ($update_user) {
|
||||||
$values['data_section'] = $dashboard;
|
$values['data_section'] = $dashboard;
|
||||||
} else if (io_safe_output($values['section']) === HOME_SCREEN_VISUAL_CONSOLE) {
|
} else if (io_safe_output($values['section']) === HOME_SCREEN_VISUAL_CONSOLE) {
|
||||||
$values['data_section'] = $visual_console;
|
$values['data_section'] = $visual_console;
|
||||||
} else if ($values['section'] === HOME_SCREEN_OTHER) {
|
} else if ($values['section'] === HOME_SCREEN_OTHER || io_safe_output($values['section']) === HOME_SCREEN_EXTERNAL_LINK) {
|
||||||
$values['data_section'] = get_parameter('data_section_other');
|
$values['data_section'] = get_parameter('data_section');
|
||||||
} else if (io_safe_output($values['section']) === HOME_SCREEN_EXTERNAL_LINK) {
|
|
||||||
$values['data_section'] = get_parameter('data_section_external');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// $values['section'] = $homeScreenValues[$values['section']];
|
// $values['section'] = $homeScreenValues[$values['section']];
|
||||||
|
|
|
@ -689,7 +689,7 @@ foreach ($info as $user_id => $user_info) {
|
||||||
// User profiles.
|
// User profiles.
|
||||||
if ($user_is_admin || $user_id == $config['id_user'] || isset($group_um[0])) {
|
if ($user_is_admin || $user_id == $config['id_user'] || isset($group_um[0])) {
|
||||||
$user_profiles = db_get_all_rows_sql(
|
$user_profiles = db_get_all_rows_sql(
|
||||||
'SELECT * FROM tusuario_perfil where id_usuario LIKE "'.$user_id.'" LIMIT 5'
|
'SELECT * FROM tusuario_perfil where id_usuario LIKE "'.$user_id.'"'
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
$user_profiles_aux = users_get_user_profile($user_id, 'LIMIT 5');
|
$user_profiles_aux = users_get_user_profile($user_id, 'LIMIT 5');
|
||||||
|
@ -778,17 +778,25 @@ foreach ($info as $user_id => $user_info) {
|
||||||
if ($user_profiles !== false) {
|
if ($user_profiles !== false) {
|
||||||
$total_profile = 0;
|
$total_profile = 0;
|
||||||
|
|
||||||
$data[4] .= '<div class="text_end">';
|
$data[4] .= '<div class="flex-column-start">';
|
||||||
foreach ($user_profiles as $row) {
|
foreach ($user_profiles as $row) {
|
||||||
|
$total_profile++;
|
||||||
|
if ($total_profile > 5) {
|
||||||
|
$data[4] .= "<div class='invisible checkhide_".str_replace(' ', '_', io_safe_output($row['id_usuario']))."'>";
|
||||||
|
}
|
||||||
|
|
||||||
$data[4] .= "<div class='float-left'>";
|
$data[4] .= "<div class='float-left'>";
|
||||||
$data[4] .= profile_get_name($row['id_perfil']);
|
$data[4] .= profile_get_name($row['id_perfil']);
|
||||||
$data[4] .= ' / </div>';
|
$data[4] .= ' / ';
|
||||||
$data[4] .= "<div class='float-left pdd_l_5px'>";
|
|
||||||
$data[4] .= groups_get_name($row['id_grupo'], true);
|
$data[4] .= groups_get_name($row['id_grupo'], true);
|
||||||
$data[4] .= '</div>';
|
$data[4] .= '</div>';
|
||||||
|
|
||||||
if ($total_profile == 0 && count($user_profiles) >= 5) {
|
if ($total_profile > 5) {
|
||||||
$data[4] .= '<span onclick="showGroups(`'.$row['id_usuario'].'`)">'.html_print_image(
|
$data[4] .= '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($total_profile == 1 && count($user_profiles) > 5) {
|
||||||
|
$data[4] .= '<span class="show-profiles" onclick="showGroups(`'.str_replace(' ', '_', io_safe_output($row['id_usuario'])).'`)">'.html_print_image(
|
||||||
'images/zoom.png',
|
'images/zoom.png',
|
||||||
true,
|
true,
|
||||||
[
|
[
|
||||||
|
@ -803,10 +811,6 @@ foreach ($info as $user_id => $user_info) {
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$data[4] .= '<br/>';
|
|
||||||
|
|
||||||
$total_profile++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($user_info['not_delete']) === true) {
|
if (isset($user_info['not_delete']) === true) {
|
||||||
|
@ -1023,8 +1027,13 @@ foreach ($info as $user_id => $user_info) {
|
||||||
array_push($table->data, $data);
|
array_push($table->data, $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$show_count = false;
|
||||||
|
if (is_metaconsole() === true) {
|
||||||
|
$show_count = true;
|
||||||
|
}
|
||||||
|
|
||||||
html_print_table($table);
|
html_print_table($table);
|
||||||
$tablePagination = ui_pagination(count($info), false, 0, 0, true, 'offset', false, 'dataTables_paginate paging_simple_numbers');
|
$tablePagination = ui_pagination(count($info), false, 0, 0, true, 'offset', $show_count, 'dataTables_paginate paging_simple_numbers');
|
||||||
unset($table);
|
unset($table);
|
||||||
if ($is_management_allowed === true) {
|
if ($is_management_allowed === true) {
|
||||||
if ($config['admin_can_add_user'] !== false) {
|
if ($config['admin_can_add_user'] !== false) {
|
||||||
|
@ -1052,43 +1061,13 @@ if ($is_management_allowed === true) {
|
||||||
?>
|
?>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
function showGroups(id_user) {
|
function showGroups(id_user) {
|
||||||
if ($(`#hidden-show_groups_${id_user}`).val() === '-1') {
|
$('.checkhide_'+id_user).each(function(){
|
||||||
var request = $.ajax({
|
if ($(this).hasClass('invisible') === true) {
|
||||||
url: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
|
$(this).removeClass('invisible');
|
||||||
type: 'GET',
|
} else {
|
||||||
dataType: 'json',
|
$(this).addClass('invisible');
|
||||||
data: {
|
}
|
||||||
page: 'godmode/users/user_list',
|
});
|
||||||
get_user_profile_group: 1,
|
|
||||||
id_user: id_user
|
|
||||||
},
|
|
||||||
success: function (data, textStatus, xhr) {
|
|
||||||
let count = 1;
|
|
||||||
data.forEach( function(valor, indice, array) {
|
|
||||||
if (count >= 6) {
|
|
||||||
let main_div = $(`#profiles_${id_user}`);
|
|
||||||
main_div.append(
|
|
||||||
`<div id="left_${id_user}_${count}" class='float-left'>${valor.id_perfil} / </div>`,
|
|
||||||
`<div id="right_${id_user}_${count}" class='float-left pdd_l_5px'>${valor.id_grupo}</div>`,
|
|
||||||
`<br/><br/>`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
count ++;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
error: function (e, textStatus) {
|
|
||||||
console.error(textStatus);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$(`#hidden-show_groups_${id_user}`).val('1');
|
|
||||||
$(`#profiles_${id_user}`).show();
|
|
||||||
} else if ($(`#hidden-show_groups_${id_user}`).val() === '1') {
|
|
||||||
$(`#hidden-show_groups_${id_user}`).val('0');
|
|
||||||
$(`#profiles_${id_user}`).hide();
|
|
||||||
} else {
|
|
||||||
$(`#hidden-show_groups_${id_user}`).val('1');
|
|
||||||
$(`#profiles_${id_user}`).show();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -84,8 +84,7 @@ $customHomeScreenAddition[HOME_SCREEN_DASHBOARD] = html_print_select(
|
||||||
// Home screen. Visual consoles.
|
// Home screen. Visual consoles.
|
||||||
$customHomeScreenAddition[HOME_SCREEN_VISUAL_CONSOLE] = html_print_select($layouts_aux, 'visual_console', $user_info['data_section'], '', '', '', true, false, true, 'w100p', false, 'width: 100%');
|
$customHomeScreenAddition[HOME_SCREEN_VISUAL_CONSOLE] = html_print_select($layouts_aux, 'visual_console', $user_info['data_section'], '', '', '', true, false, true, 'w100p', false, 'width: 100%');
|
||||||
// Home screen. External link and Other.
|
// Home screen. External link and Other.
|
||||||
$customHomeScreenAddition[HOME_SCREEN_EXTERNAL_LINK] = html_print_input_text('data_section_external', $user_info['data_section'], '', 60, 255, true);
|
$customHomeScreenAddition[HOME_SCREEN_EXTERNAL_LINK] = html_print_input_text('data_section', $user_info['data_section'], '', 60, 400, true);
|
||||||
$customHomeScreenAddition[HOME_SCREEN_OTHER] = html_print_input_text('data_section_other', $user_info['data_section'], '', 60, 255, true);
|
|
||||||
|
|
||||||
$layouts = visual_map_get_user_layouts($config['id_user'], true);
|
$layouts = visual_map_get_user_layouts($config['id_user'], true);
|
||||||
$layouts_aux = [];
|
$layouts_aux = [];
|
||||||
|
@ -118,7 +117,7 @@ $customHomeScreenAddition[HOME_SCREEN_EXTERNAL_LINK] = html_print_input_text(
|
||||||
$user_info['data_section'],
|
$user_info['data_section'],
|
||||||
'',
|
'',
|
||||||
60,
|
60,
|
||||||
255,
|
999,
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
$customHomeScreenDataField = '';
|
$customHomeScreenDataField = '';
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="16px" height="12px" viewBox="0 0 16 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>F1630B1D-C694-489C-8C8F-E98AF57D4F04</title>
|
||||||
|
<g id="Welcome-wizard" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="Pandora-FMS---Welcome-Wizard-2023---1a-Welcome-wizard" transform="translate(-905, -629)" fill="#FFFFFF">
|
||||||
|
<g id="Popup" transform="translate(460, 200)">
|
||||||
|
<g id="Content" transform="translate(20, 96)">
|
||||||
|
<g id="Form" transform="translate(0, 292)">
|
||||||
|
<g id="Principal-por-defecto" transform="translate(305, 26)">
|
||||||
|
<g id="Group-2" transform="translate(38, 11)">
|
||||||
|
<g id="check" transform="translate(82, 4)">
|
||||||
|
<path d="M6,12 C5.5,12 5,11.8 4.6,11.4 L0.6,7.4 C-0.2,6.6 -0.2,5.4 0.6,4.6 C1.4,3.8 2.7,3.8 3.4,4.6 L6,7.2 L12.6,0.6 C13.4,-0.2 14.6,-0.2 15.4,0.6 C16.2,1.4 16.2,2.6 15.4,3.4 L7.4,11.4 C7,11.8 6.5,12 6,12 Z"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 246 KiB |
|
@ -39,6 +39,7 @@ $get_agent_filters = get_parameter('get_agent_filters', 0);
|
||||||
$save_agent_filter = get_parameter('save_agent_filter', 0);
|
$save_agent_filter = get_parameter('save_agent_filter', 0);
|
||||||
$update_agent_filter = get_parameter('update_agent_filter', 0);
|
$update_agent_filter = get_parameter('update_agent_filter', 0);
|
||||||
$delete_agent_filter = get_parameter('delete_agent_filter', 0);
|
$delete_agent_filter = get_parameter('delete_agent_filter', 0);
|
||||||
|
$check_unique_ip = (bool) get_parameter('check_unique_ip', 0);
|
||||||
|
|
||||||
if (https_is_running()) {
|
if (https_is_running()) {
|
||||||
header('Content-type: application/json');
|
header('Content-type: application/json');
|
||||||
|
@ -1020,4 +1021,29 @@ $(document).ready(function() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($check_unique_ip === true) {
|
||||||
|
$direccion_agente = (string) get_parameter_post('direccion', '');
|
||||||
|
$ip_all = get_parameter_post('ip_all', '');
|
||||||
|
|
||||||
|
if (empty($direccion_agente) === true) {
|
||||||
|
echo json_encode(['success' => false, 'message' => __('Please enter an IP address.')]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = 'SELECT direccion FROM tagente WHERE direccion = "'.$direccion_agente.'"';
|
||||||
|
$exists_ip = db_get_row_sql($sql);
|
||||||
|
|
||||||
|
if ($exists_ip !== false) {
|
||||||
|
if (is_array($ip_all) === true && in_array($direccion_agente, $ip_all) === true) {
|
||||||
|
echo json_encode(['success' => true, 'message' => __('Success! but this IP is already in the list.')]);
|
||||||
|
} else {
|
||||||
|
echo json_encode(['success' => false, 'message' => __('This IP is already being used'), 'exist_ip' => true]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo json_encode(['success' => true, 'message' => __('Success! this IP is available to be used.')]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -41,7 +41,20 @@ if ($method === 'draw') {
|
||||||
$length = get_parameter('length', $config['block_size']);
|
$length = get_parameter('length', $config['block_size']);
|
||||||
$orderBy = get_datatable_order(true);
|
$orderBy = get_datatable_order(true);
|
||||||
|
|
||||||
$sort_field = $orderBy['field'];
|
switch ($orderBy['field']) {
|
||||||
|
case 'groups':
|
||||||
|
$sort_field = 'nombre';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'favorite':
|
||||||
|
$sort_field = 'active';
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
$sort_field = $orderBy['field'];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
$order = $orderBy['direction'];
|
$order = $orderBy['direction'];
|
||||||
|
|
||||||
$pagination = '';
|
$pagination = '';
|
||||||
|
@ -121,7 +134,7 @@ if ($method === 'draw') {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = 'SELECT * FROM tdashboard '.$where.' ORDER BY id '.$pagination;
|
$sql = 'SELECT * FROM tdashboard LEFT JOIN tgrupo ON tgrupo.id_grupo = tdashboard.id_group '.$where.' ORDER BY '.$sort_field.' '.$order.$pagination;
|
||||||
$dashboards = db_get_all_rows_sql($sql);
|
$dashboards = db_get_all_rows_sql($sql);
|
||||||
$count = db_get_value_sql('SELECT COUNT(*) FROM tdashboard '.$where);
|
$count = db_get_value_sql('SELECT COUNT(*) FROM tdashboard '.$where);
|
||||||
foreach ($dashboards as $dashboard) {
|
foreach ($dashboards as $dashboard) {
|
||||||
|
|
|
@ -98,6 +98,8 @@ $draw_events_graph = get_parameter('drawEventsGraph', false);
|
||||||
// User private filter.
|
// User private filter.
|
||||||
$current_filter = get_parameter('current_filter', 0);
|
$current_filter = get_parameter('current_filter', 0);
|
||||||
$private_filter_event = get_parameter('private_filter_event', 0);
|
$private_filter_event = get_parameter('private_filter_event', 0);
|
||||||
|
// Asteroids.
|
||||||
|
$playAsteroids = (bool) get_parameter('playAsteroids', false);
|
||||||
|
|
||||||
if ($get_comments === true) {
|
if ($get_comments === true) {
|
||||||
global $config;
|
global $config;
|
||||||
|
@ -2763,6 +2765,17 @@ if ($draw_row_response_info === true) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Asteroids.
|
||||||
|
if ($playAsteroids === true) {
|
||||||
|
echo ui_require_css_file('asteroids', 'include/styles/', true);
|
||||||
|
echo ui_require_javascript_file('asteroids', 'include/asteroids/', true);
|
||||||
|
|
||||||
|
$output = '<div id="asteroids">Asteroids game goes here!</div>';
|
||||||
|
|
||||||
|
echo $output;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ($update_event_custom_id) {
|
if ($update_event_custom_id) {
|
||||||
$event_custom_id = get_parameter('event_custom_id');
|
$event_custom_id = get_parameter('event_custom_id');
|
||||||
$event_id = get_parameter('event_id');
|
$event_id = get_parameter('event_id');
|
||||||
|
@ -2814,4 +2827,4 @@ if ((bool) $draw_events_graph === true) {
|
||||||
$output = event_print_graph($filter);
|
$output = event_print_graph($filter);
|
||||||
echo $output;
|
echo $output;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,8 @@ $save_custom_graph = (bool) get_parameter('save_custom_graph');
|
||||||
$print_custom_graph = (bool) get_parameter('print_custom_graph', false);
|
$print_custom_graph = (bool) get_parameter('print_custom_graph', false);
|
||||||
$print_sparse_graph = (bool) get_parameter('print_sparse_graph');
|
$print_sparse_graph = (bool) get_parameter('print_sparse_graph');
|
||||||
$get_graphs = (bool) get_parameter('get_graphs_container');
|
$get_graphs = (bool) get_parameter('get_graphs_container');
|
||||||
|
$sort_items = (bool) get_parameter('sort_items');
|
||||||
|
|
||||||
$width = get_parameter('width', 0);
|
$width = get_parameter('width', 0);
|
||||||
$height = get_parameter('height', 0);
|
$height = get_parameter('height', 0);
|
||||||
|
|
||||||
|
@ -337,3 +339,104 @@ if ($get_graphs) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($sort_items === true) {
|
||||||
|
$order = (string) get_parameter('order');
|
||||||
|
$id = (string) get_parameter('id', '');
|
||||||
|
$idGraph = (string) get_parameter('id_graph', '');
|
||||||
|
$total = db_get_num_rows('SELECT * FROM tgraph_source WHERE id_graph = '.$idGraph.'');
|
||||||
|
$item = db_get_row_sql(
|
||||||
|
'SELECT id_gs, field_order
|
||||||
|
FROM tgraph_source
|
||||||
|
WHERE id_gs = '.$id.'
|
||||||
|
ORDER BY field_order'
|
||||||
|
);
|
||||||
|
|
||||||
|
switch ($order) {
|
||||||
|
case 'up':
|
||||||
|
if (($item['field_order'] - 1) < 1) {
|
||||||
|
echo json_encode(['success' => false]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$prevItem = db_get_row_sql(
|
||||||
|
'SELECT id_gs, field_order
|
||||||
|
FROM tgraph_source
|
||||||
|
WHERE id_graph = '.$idGraph.'
|
||||||
|
AND field_order = '.($item['field_order'] - 1).'
|
||||||
|
ORDER BY field_order'
|
||||||
|
);
|
||||||
|
|
||||||
|
db_process_sql_begin();
|
||||||
|
|
||||||
|
$resultItem = db_process_sql_update(
|
||||||
|
'tgraph_source',
|
||||||
|
['field_order' => ($item['field_order'] - 1)],
|
||||||
|
['id_gs' => $item['id_gs']],
|
||||||
|
false
|
||||||
|
);
|
||||||
|
$resultPrevItem = db_process_sql_update(
|
||||||
|
'tgraph_source',
|
||||||
|
['field_order' => ($prevItem['field_order'] + 1)],
|
||||||
|
['id_gs' => $prevItem['id_gs']],
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($resultItem !== false && $resultPrevItem !== false) {
|
||||||
|
db_process_sql_commit();
|
||||||
|
echo json_encode(['success' => true]);
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
db_process_sql_rollback();
|
||||||
|
echo json_encode(['success' => false]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'down':
|
||||||
|
if (($item['field_order'] + 1) > $total) {
|
||||||
|
echo json_encode(['success' => false]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$nextItem = db_get_row_sql(
|
||||||
|
'SELECT id_gs, field_order
|
||||||
|
FROM tgraph_source
|
||||||
|
WHERE id_graph = '.$idGraph.'
|
||||||
|
AND field_order = '.($item['field_order'] + 1).'
|
||||||
|
ORDER BY field_order'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
db_process_sql_begin();
|
||||||
|
|
||||||
|
$resultItem = db_process_sql_update(
|
||||||
|
'tgraph_source',
|
||||||
|
['field_order' => ($item['field_order'] + 1)],
|
||||||
|
['id_gs' => $item['id_gs']],
|
||||||
|
false
|
||||||
|
);
|
||||||
|
$resultNextItem = db_process_sql_update(
|
||||||
|
'tgraph_source',
|
||||||
|
['field_order' => ($nextItem['field_order'] - 1)],
|
||||||
|
['id_gs' => $nextItem['id_gs']],
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($resultItem !== false && $resultNextItem !== false) {
|
||||||
|
db_process_sql_commit();
|
||||||
|
echo json_encode(['success' => true]);
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
db_process_sql_rollback();
|
||||||
|
echo json_encode(['success' => false]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
echo json_encode(['success' => false]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
Copyright (c) 2023, James Socol <me@jamessocol.com>
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
=========
|
||||||
|
ASTEROIDS
|
||||||
|
=========
|
||||||
|
|
||||||
|
Last week, at work, we joked about creating an Asteroids clone where every
|
||||||
|
asteroid had a bug number in it, as a bit of a joke. (Ha ha, every bug you
|
||||||
|
kill spawns two more!)
|
||||||
|
|
||||||
|
I was bored this afternoon, so here's a port of Asteroids to JS/Canvas.
|
||||||
|
|
||||||
|
Now all I need to do is hook in the bug numbers.
|
||||||
|
|
||||||
|
|
||||||
|
Gameplay
|
||||||
|
========
|
||||||
|
|
||||||
|
You're the triangle in the middle. You want to destroy the circles. You have
|
||||||
|
a gun (spacebar), some thrusters to turn (left and right arrow keys) and an
|
||||||
|
engine (up arrow key).
|
||||||
|
|
||||||
|
Remember, it's kill or be killed out there.
|
||||||
|
|
||||||
|
|
||||||
|
Rights
|
||||||
|
======
|
||||||
|
|
||||||
|
The name *Asteroids* is, as far as I know, still property of Atari. I mean no
|
||||||
|
ill-will towards Atari by releasing this code. Frankly, it's a poor
|
||||||
|
substitute for anything resembling a real game. I just wanted to see if I
|
||||||
|
could do it.
|
||||||
|
|
||||||
|
If anyone from Atari asks, I will gladly rename and/or remove this code. But
|
||||||
|
since there are so many *Asteroids* clones as it is, and the original was
|
||||||
|
released in 1979, and it was kind of a copy of *Spacewar!*, I doubt they'll
|
||||||
|
mind too much.
|
||||||
|
|
||||||
|
|
||||||
|
Strikes me as funny...
|
||||||
|
======================
|
||||||
|
|
||||||
|
The original *Spacewar!*, one of the earliest (if not the original) computer
|
||||||
|
games, took `200 hours to code <http://en.wikipedia.org/wiki/Spacewar!>`_.
|
||||||
|
|
||||||
|
This probably took me 6.
|
||||||
|
|
||||||
|
I am so glad we've moved past the PDP-1.
|
|
@ -0,0 +1,840 @@
|
||||||
|
// Asteroids.js
|
||||||
|
// Copyright (c) 2010–2023 James Socol <me@jamessocol.com>
|
||||||
|
// See LICENSE.txt for license terms.
|
||||||
|
|
||||||
|
// Game settings
|
||||||
|
GAME_HEIGHT = 480;
|
||||||
|
GAME_WIDTH = 640;
|
||||||
|
FRAME_PERIOD = 60; // 1 frame / x frames/sec
|
||||||
|
LEVEL_TIMEOUT = 2000; // How long to wait after clearing a level.
|
||||||
|
|
||||||
|
// Player settings
|
||||||
|
ROTATE_SPEED = Math.PI / 10; // How fast do players turn? (radians)
|
||||||
|
MAX_SPEED = 15; // Maximum player speed
|
||||||
|
THRUST_ACCEL = 1;
|
||||||
|
DEATH_TIMEOUT = 2000; // milliseconds
|
||||||
|
INVINCIBLE_TIMEOUT = 1500; // How long to stay invincible after resurrecting?
|
||||||
|
PLAYER_LIVES = 3;
|
||||||
|
POINTS_PER_SHOT = 1; // How many points does a shot cost? (Should be >= 0.)
|
||||||
|
POINTS_TO_EXTRA_LIFE = 1000; // How many points to get a 1-up?
|
||||||
|
|
||||||
|
// Bullet settings
|
||||||
|
BULLET_SPEED = 20;
|
||||||
|
MAX_BULLETS = 3;
|
||||||
|
MAX_BULLET_AGE = 25;
|
||||||
|
|
||||||
|
// Asteroid settings
|
||||||
|
ASTEROID_COUNT = 2; // This + current level = number of asteroids.
|
||||||
|
ASTEROID_GENERATIONS = 3; // How many times to they split before dying?
|
||||||
|
ASTEROID_CHILDREN = 2; // How many does each death create?
|
||||||
|
ASTEROID_SPEED = 3;
|
||||||
|
ASTEROID_SCORE = 10; // How many points is each one worth?
|
||||||
|
|
||||||
|
var Asteroids = function(home) {
|
||||||
|
// Constructor
|
||||||
|
// Order matters.
|
||||||
|
|
||||||
|
// Set up logging.
|
||||||
|
this.log_level = Asteroids.LOG_DEBUG;
|
||||||
|
this.log = Asteroids.logger(this);
|
||||||
|
|
||||||
|
// Create the info pane, player, and playfield.
|
||||||
|
home.innerHTML = "";
|
||||||
|
this.info = Asteroids.infoPane(this, home);
|
||||||
|
this.playfield = Asteroids.playfield(this, home);
|
||||||
|
this.player = Asteroids.player(this);
|
||||||
|
|
||||||
|
// Set up the event listeners.
|
||||||
|
this.keyState = Asteroids.keyState(this);
|
||||||
|
this.listen = Asteroids.listen(this);
|
||||||
|
|
||||||
|
// Useful functions.
|
||||||
|
this.asteroids = Asteroids.asteroids(this);
|
||||||
|
this.overlays = Asteroids.overlays(this);
|
||||||
|
this.highScores = Asteroids.highScores(this);
|
||||||
|
this.level = Asteroids.level(this);
|
||||||
|
this.gameOver = Asteroids.gameOver(this);
|
||||||
|
|
||||||
|
// Play the game.
|
||||||
|
Asteroids.play(this);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.infoPane = function(game, home) {
|
||||||
|
var pane = document.createElement("div");
|
||||||
|
pane.innerHTML = "ASTEROIDS";
|
||||||
|
|
||||||
|
var lives = document.createElement("span");
|
||||||
|
lives.className = "lives";
|
||||||
|
lives.innerHTML = "LIVES: " + PLAYER_LIVES;
|
||||||
|
|
||||||
|
var score = document.createElement("span");
|
||||||
|
score.className = "score";
|
||||||
|
score.innerHTML = "SCORE: 0";
|
||||||
|
|
||||||
|
var level = document.createElement("span");
|
||||||
|
level.className = "level";
|
||||||
|
level.innerHTML = "LEVEL: 1";
|
||||||
|
|
||||||
|
pane.appendChild(lives);
|
||||||
|
pane.appendChild(score);
|
||||||
|
pane.appendChild(level);
|
||||||
|
home.appendChild(pane);
|
||||||
|
|
||||||
|
return {
|
||||||
|
setLives: function(game, l) {
|
||||||
|
lives.innerHTML = "LIVES: " + l;
|
||||||
|
},
|
||||||
|
setScore: function(game, s) {
|
||||||
|
score.innerHTML = "SCORE: " + s;
|
||||||
|
},
|
||||||
|
setLevel: function(game, _level) {
|
||||||
|
level.innerHTML = "LEVEL: " + _level;
|
||||||
|
},
|
||||||
|
getPane: function() {
|
||||||
|
return pane;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.playfield = function(game, home) {
|
||||||
|
var canvas = document.createElement("canvas");
|
||||||
|
canvas.width = GAME_WIDTH;
|
||||||
|
canvas.height = GAME_HEIGHT;
|
||||||
|
home.appendChild(canvas);
|
||||||
|
return canvas;
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.logger = function(game) {
|
||||||
|
if (typeof console != "undefined" && typeof console.log != "undefined") {
|
||||||
|
return {
|
||||||
|
info: function(msg) {
|
||||||
|
if (game.log_level <= Asteroids.LOG_INFO) console.log(msg);
|
||||||
|
},
|
||||||
|
debug: function(msg) {
|
||||||
|
if (game.log_level <= Asteroids.LOG_DEBUG) console.log(msg);
|
||||||
|
},
|
||||||
|
warning: function(msg) {
|
||||||
|
if (game.log_level <= Asteroids.LOG_WARNING) console.log(msg);
|
||||||
|
},
|
||||||
|
error: function(msg) {
|
||||||
|
if (game.log_level <= Asteroids.LOG_ERROR) console.log(msg);
|
||||||
|
},
|
||||||
|
critical: function(msg) {
|
||||||
|
if (game.log_level <= Asteroids.LOG_CRITICAL) console.log(msg);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
info: function(msg) {},
|
||||||
|
debug: function(msg) {},
|
||||||
|
warning: function(msg) {},
|
||||||
|
error: function(msg) {},
|
||||||
|
critical: function(msg) {}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.asteroids = function(game) {
|
||||||
|
var asteroids = [];
|
||||||
|
|
||||||
|
return {
|
||||||
|
push: function(obj) {
|
||||||
|
return asteroids.push(obj);
|
||||||
|
},
|
||||||
|
pop: function() {
|
||||||
|
return asteroids.pop();
|
||||||
|
},
|
||||||
|
splice: function(i, j) {
|
||||||
|
return asteroids.splice(i, j);
|
||||||
|
},
|
||||||
|
get length() {
|
||||||
|
return asteroids.length;
|
||||||
|
},
|
||||||
|
getIterator: function() {
|
||||||
|
return asteroids;
|
||||||
|
},
|
||||||
|
generationCount: function(_gen) {
|
||||||
|
var total = 0;
|
||||||
|
for (var i = 0; i < asteroids.length; i++) {
|
||||||
|
if (asteroids[i].getGeneration() == _gen) total++;
|
||||||
|
}
|
||||||
|
game.log.debug("Found " + total + " asteroids in generation " + _gen);
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an overlays controller.
|
||||||
|
*/
|
||||||
|
Asteroids.overlays = function(game) {
|
||||||
|
var overlays = [];
|
||||||
|
|
||||||
|
return {
|
||||||
|
draw: function(ctx) {
|
||||||
|
for (var i = 0; i < overlays.length; i++) {
|
||||||
|
overlays[i].draw(ctx);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
add: function(obj) {
|
||||||
|
if (-1 == overlays.indexOf(obj) && typeof obj.draw != "undefined") {
|
||||||
|
overlays.push(obj);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
remove: function(obj) {
|
||||||
|
var i = overlays.indexOf(obj);
|
||||||
|
if (-1 != i) {
|
||||||
|
overlays.splice(i, 1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a player object.
|
||||||
|
*/
|
||||||
|
Asteroids.player = function(game) {
|
||||||
|
// implements IScreenObject
|
||||||
|
var position = [GAME_WIDTH / 2, GAME_HEIGHT / 2],
|
||||||
|
velocity = [0, 0],
|
||||||
|
direction = -Math.PI / 2,
|
||||||
|
dead = false,
|
||||||
|
invincible = false,
|
||||||
|
lastRez = null,
|
||||||
|
lives = PLAYER_LIVES,
|
||||||
|
score = 0,
|
||||||
|
radius = 3,
|
||||||
|
path = [
|
||||||
|
[10, 0],
|
||||||
|
[-5, 5],
|
||||||
|
[-5, -5],
|
||||||
|
[10, 0]
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
getPosition: function() {
|
||||||
|
return position;
|
||||||
|
},
|
||||||
|
getVelocity: function() {
|
||||||
|
return velocity;
|
||||||
|
},
|
||||||
|
getSpeed: function() {
|
||||||
|
return Math.sqrt(Math.pow(velocity[0], 2) + Math.pow(velocity[1], 2));
|
||||||
|
},
|
||||||
|
getDirection: function() {
|
||||||
|
return direction;
|
||||||
|
},
|
||||||
|
getRadius: function() {
|
||||||
|
return radius;
|
||||||
|
},
|
||||||
|
getScore: function() {
|
||||||
|
return score;
|
||||||
|
},
|
||||||
|
addScore: function(pts) {
|
||||||
|
score += pts;
|
||||||
|
},
|
||||||
|
lowerScore: function(pts) {
|
||||||
|
score -= pts;
|
||||||
|
if (score < 0) {
|
||||||
|
score = 0;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getLives: function() {
|
||||||
|
return lives;
|
||||||
|
},
|
||||||
|
rotate: function(rad) {
|
||||||
|
if (!dead) {
|
||||||
|
direction += rad;
|
||||||
|
game.log.info(direction);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
thrust: function(force) {
|
||||||
|
if (!dead) {
|
||||||
|
velocity[0] += force * Math.cos(direction);
|
||||||
|
velocity[1] += force * Math.sin(direction);
|
||||||
|
|
||||||
|
if (this.getSpeed() > MAX_SPEED) {
|
||||||
|
velocity[0] = MAX_SPEED * Math.cos(direction);
|
||||||
|
velocity[1] = MAX_SPEED * Math.sin(direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
game.log.info(velocity);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
move: function() {
|
||||||
|
Asteroids.move(position, velocity);
|
||||||
|
},
|
||||||
|
draw: function(ctx) {
|
||||||
|
let color = "#fff";
|
||||||
|
if (invincible) {
|
||||||
|
const dt = (new Date() - lastRez) / 200;
|
||||||
|
const c = Math.floor(Math.cos(dt) * 16).toString(16);
|
||||||
|
color = `#${c}${c}${c}`;
|
||||||
|
}
|
||||||
|
Asteroids.drawPath(ctx, position, direction, 1, path, color);
|
||||||
|
},
|
||||||
|
isDead: function() {
|
||||||
|
return dead;
|
||||||
|
},
|
||||||
|
isInvincible: function() {
|
||||||
|
return invincible;
|
||||||
|
},
|
||||||
|
extraLife: function(game) {
|
||||||
|
game.log.debug("Woo, extra life!");
|
||||||
|
lives++;
|
||||||
|
},
|
||||||
|
die: function(game) {
|
||||||
|
if (!dead) {
|
||||||
|
game.log.info("You died!");
|
||||||
|
dead = true;
|
||||||
|
invincible = true;
|
||||||
|
lives--;
|
||||||
|
position = [GAME_WIDTH / 2, GAME_HEIGHT / 2];
|
||||||
|
velocity = [0, 0];
|
||||||
|
direction = -Math.PI / 2;
|
||||||
|
if (lives > 0) {
|
||||||
|
setTimeout(
|
||||||
|
(function(player, _game) {
|
||||||
|
return function() {
|
||||||
|
player.resurrect(_game);
|
||||||
|
};
|
||||||
|
})(this, game),
|
||||||
|
DEATH_TIMEOUT
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
game.gameOver();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resurrect: function(game) {
|
||||||
|
if (dead) {
|
||||||
|
dead = false;
|
||||||
|
invincible = true;
|
||||||
|
lastRez = new Date();
|
||||||
|
setTimeout(function() {
|
||||||
|
invincible = false;
|
||||||
|
game.log.debug("No longer invincible!");
|
||||||
|
}, INVINCIBLE_TIMEOUT);
|
||||||
|
game.log.debug("You ressurrected!");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fire: function(game) {
|
||||||
|
if (!dead) {
|
||||||
|
game.log.debug("You fired!");
|
||||||
|
var _pos = [position[0], position[1]],
|
||||||
|
_dir = direction;
|
||||||
|
|
||||||
|
this.lowerScore(POINTS_PER_SHOT);
|
||||||
|
|
||||||
|
return Asteroids.bullet(game, _pos, _dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.bullet = function(game, _pos, _dir) {
|
||||||
|
// implements IScreenObject
|
||||||
|
var position = [_pos[0], _pos[1]],
|
||||||
|
velocity = [0, 0],
|
||||||
|
direction = _dir,
|
||||||
|
age = 0,
|
||||||
|
radius = 1,
|
||||||
|
path = [
|
||||||
|
[0, 0],
|
||||||
|
[-4, 0]
|
||||||
|
];
|
||||||
|
|
||||||
|
velocity[0] = BULLET_SPEED * Math.cos(_dir);
|
||||||
|
velocity[1] = BULLET_SPEED * Math.sin(_dir);
|
||||||
|
|
||||||
|
return {
|
||||||
|
getPosition: function() {
|
||||||
|
return position;
|
||||||
|
},
|
||||||
|
getVelocity: function() {
|
||||||
|
return velocity;
|
||||||
|
},
|
||||||
|
getSpeed: function() {
|
||||||
|
return Math.sqrt(Math.pow(velocity[0], 2) + Math.pow(velocity[1], 2));
|
||||||
|
},
|
||||||
|
getRadius: function() {
|
||||||
|
return radius;
|
||||||
|
},
|
||||||
|
getAge: function() {
|
||||||
|
return age;
|
||||||
|
},
|
||||||
|
birthday: function() {
|
||||||
|
age++;
|
||||||
|
},
|
||||||
|
move: function() {
|
||||||
|
Asteroids.move(position, velocity);
|
||||||
|
},
|
||||||
|
draw: function(ctx) {
|
||||||
|
Asteroids.drawPath(ctx, position, direction, 1, path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.keyState = function(_) {
|
||||||
|
var state = {
|
||||||
|
[Asteroids.LEFT]: false,
|
||||||
|
[Asteroids.UP]: false,
|
||||||
|
[Asteroids.RIGHT]: false,
|
||||||
|
[Asteroids.DOWN]: false,
|
||||||
|
[Asteroids.FIRE]: false
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
on: function(key) {
|
||||||
|
state[key] = true;
|
||||||
|
},
|
||||||
|
off: function(key) {
|
||||||
|
state[key] = false;
|
||||||
|
},
|
||||||
|
getState: function(key) {
|
||||||
|
if (typeof state[key] != "undefined") return state[key];
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.listen = function(game) {
|
||||||
|
const keyMap = {
|
||||||
|
ArrowLeft: Asteroids.LEFT,
|
||||||
|
KeyA: Asteroids.LEFT,
|
||||||
|
ArrowRight: Asteroids.RIGHT,
|
||||||
|
KeyD: Asteroids.RIGHT,
|
||||||
|
ArrowUp: Asteroids.UP,
|
||||||
|
KeyW: Asteroids.UP,
|
||||||
|
Space: Asteroids.FIRE
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener(
|
||||||
|
"keydown",
|
||||||
|
function(e) {
|
||||||
|
const state = keyMap[e.code];
|
||||||
|
if (state) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
game.keyState.on(state);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
window.addEventListener(
|
||||||
|
"keyup",
|
||||||
|
function(e) {
|
||||||
|
const state = keyMap[e.code];
|
||||||
|
if (state) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
game.keyState.off(state);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
true
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.asteroid = function(game, _gen) {
|
||||||
|
// implements IScreenObject
|
||||||
|
var position = [0, 0],
|
||||||
|
velocity = [0, 0],
|
||||||
|
direction = 0,
|
||||||
|
generation = _gen,
|
||||||
|
radius = 7,
|
||||||
|
path = [
|
||||||
|
[1, 7],
|
||||||
|
[5, 5],
|
||||||
|
[7, 1],
|
||||||
|
[5, -3],
|
||||||
|
[7, -7],
|
||||||
|
[3, -9],
|
||||||
|
[-1, -5],
|
||||||
|
[-4, -2],
|
||||||
|
[-8, -1],
|
||||||
|
[-9, 3],
|
||||||
|
[-5, 5],
|
||||||
|
[-1, 3],
|
||||||
|
[1, 7]
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
getPosition: function() {
|
||||||
|
return position;
|
||||||
|
},
|
||||||
|
setPosition: function(pos) {
|
||||||
|
position = pos;
|
||||||
|
},
|
||||||
|
getVelocity: function() {
|
||||||
|
return velocity;
|
||||||
|
},
|
||||||
|
setVelocity: function(vel) {
|
||||||
|
velocity = vel;
|
||||||
|
direction = Math.atan2(vel[1], vel[0]);
|
||||||
|
},
|
||||||
|
getSpeed: function() {
|
||||||
|
return Math.sqrt(Math.pow(velocity[0], 2) + Math.pow(velocity[1], 2));
|
||||||
|
},
|
||||||
|
getRadius: function() {
|
||||||
|
return radius * generation;
|
||||||
|
},
|
||||||
|
getGeneration: function() {
|
||||||
|
return generation;
|
||||||
|
},
|
||||||
|
move: function() {
|
||||||
|
Asteroids.move(position, velocity);
|
||||||
|
},
|
||||||
|
draw: function(ctx) {
|
||||||
|
Asteroids.drawPath(ctx, position, direction, generation, path);
|
||||||
|
// ctx.setTransform(1, 0, 0, 1, position[0], position[1]);
|
||||||
|
// ctx.beginPath();
|
||||||
|
// ctx.arc(0, 0, radius*generation, 0, Math.PI*2, false);
|
||||||
|
// ctx.stroke();
|
||||||
|
// ctx.closePath();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.collision = function(a, b) {
|
||||||
|
// if a.getPosition() inside b.getBounds?
|
||||||
|
var a_pos = a.getPosition(),
|
||||||
|
b_pos = b.getPosition();
|
||||||
|
|
||||||
|
function sq(x) {
|
||||||
|
return Math.pow(x, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
var distance = Math.sqrt(sq(a_pos[0] - b_pos[0]) + sq(a_pos[1] - b_pos[1]));
|
||||||
|
|
||||||
|
if (distance <= a.getRadius() + b.getRadius()) return true;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.level = function(game) {
|
||||||
|
var level = 0,
|
||||||
|
speed = ASTEROID_SPEED,
|
||||||
|
hspeed = ASTEROID_SPEED / 2;
|
||||||
|
|
||||||
|
return {
|
||||||
|
getLevel: function() {
|
||||||
|
return level;
|
||||||
|
},
|
||||||
|
levelUp: function(game) {
|
||||||
|
level++;
|
||||||
|
game.log.debug("Congrats! On to level " + level);
|
||||||
|
while (
|
||||||
|
game.asteroids.generationCount(ASTEROID_GENERATIONS) <
|
||||||
|
level + ASTEROID_COUNT
|
||||||
|
) {
|
||||||
|
var a = Asteroids.asteroid(game, ASTEROID_GENERATIONS);
|
||||||
|
a.setPosition([
|
||||||
|
Math.random() * GAME_WIDTH,
|
||||||
|
Math.random() * GAME_HEIGHT
|
||||||
|
]);
|
||||||
|
a.setVelocity([
|
||||||
|
Math.random() * speed - hspeed,
|
||||||
|
Math.random() * speed - hspeed
|
||||||
|
]);
|
||||||
|
game.asteroids.push(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.gameOver = function(game) {
|
||||||
|
return function() {
|
||||||
|
game.log.debug("Game over!");
|
||||||
|
|
||||||
|
if (game.player.getScore() > 0) {
|
||||||
|
game.highScores.addScore("Player", game.player.getScore());
|
||||||
|
}
|
||||||
|
|
||||||
|
game.overlays.add({
|
||||||
|
// implements IOverlay
|
||||||
|
draw: function(ctx) {
|
||||||
|
ctx.font = "30px System, monospace";
|
||||||
|
ctx.textAlign = "center";
|
||||||
|
ctx.textBaseline = "middle";
|
||||||
|
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
||||||
|
ctx.fillText("GAME OVER", GAME_WIDTH / 2, GAME_HEIGHT / 2);
|
||||||
|
|
||||||
|
var scores = game.highScores.getScores();
|
||||||
|
ctx.font = "12px System, monospace";
|
||||||
|
for (var i = 0; i < scores.length; i++) {
|
||||||
|
ctx.fillText(
|
||||||
|
scores[i].name + " " + scores[i].score,
|
||||||
|
GAME_WIDTH / 2,
|
||||||
|
GAME_HEIGHT / 2 + 20 + 14 * i
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.highScores = function(game) {
|
||||||
|
var scores = [];
|
||||||
|
|
||||||
|
if ((t = localStorage.getItem("high-scores"))) {
|
||||||
|
scores = JSON.parse(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
getScores: function() {
|
||||||
|
return scores;
|
||||||
|
},
|
||||||
|
addScore: function(_name, _score) {
|
||||||
|
scores.push({ name: _name, score: _score });
|
||||||
|
scores.sort(function(a, b) {
|
||||||
|
return b.score - a.score;
|
||||||
|
});
|
||||||
|
if (scores.length > 10) {
|
||||||
|
scores.length = 10;
|
||||||
|
}
|
||||||
|
game.log.debug("Saving high scores.");
|
||||||
|
var str = JSON.stringify(scores);
|
||||||
|
localStorage.setItem("high-scores", str);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.drawPath = function(ctx, position, direction, scale, path, color) {
|
||||||
|
if (!color) {
|
||||||
|
color = "#fff";
|
||||||
|
}
|
||||||
|
ctx.strokeStyle = color;
|
||||||
|
ctx.setTransform(
|
||||||
|
Math.cos(direction) * scale,
|
||||||
|
Math.sin(direction) * scale,
|
||||||
|
-Math.sin(direction) * scale,
|
||||||
|
Math.cos(direction) * scale,
|
||||||
|
position[0],
|
||||||
|
position[1]
|
||||||
|
);
|
||||||
|
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(path[0][0], path[0][1]);
|
||||||
|
for (i = 1; i < path.length; i++) {
|
||||||
|
ctx.lineTo(path[i][0], path[i][1]);
|
||||||
|
}
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.closePath();
|
||||||
|
ctx.strokeStyle = "#fff";
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.move = function(position, velocity) {
|
||||||
|
position[0] += velocity[0];
|
||||||
|
if (position[0] < 0) position[0] = GAME_WIDTH + position[0];
|
||||||
|
else if (position[0] > GAME_WIDTH) position[0] -= GAME_WIDTH;
|
||||||
|
|
||||||
|
position[1] += velocity[1];
|
||||||
|
if (position[1] < 0) position[1] = GAME_HEIGHT + position[1];
|
||||||
|
else if (position[1] > GAME_HEIGHT) position[1] -= GAME_HEIGHT;
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.stars = function() {
|
||||||
|
var stars = [];
|
||||||
|
for (var i = 0; i < 50; i++) {
|
||||||
|
stars.push([Math.random() * GAME_WIDTH, Math.random() * GAME_HEIGHT]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
draw: function(ctx) {
|
||||||
|
var ii = stars.length;
|
||||||
|
for (var i = 0; i < ii; i++) {
|
||||||
|
ctx.fillRect(stars[i][0], stars[i][1], 1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Asteroids.play = function(game) {
|
||||||
|
var ctx = game.playfield.getContext("2d");
|
||||||
|
ctx.fillStyle = "white";
|
||||||
|
ctx.strokeStyle = "white";
|
||||||
|
|
||||||
|
var speed = ASTEROID_SPEED,
|
||||||
|
hspeed = ASTEROID_SPEED / 2;
|
||||||
|
|
||||||
|
game.level.levelUp(game);
|
||||||
|
|
||||||
|
var bullets = [],
|
||||||
|
last_fire_state = false,
|
||||||
|
last_asteroid_count = 0;
|
||||||
|
|
||||||
|
var extra_lives = 0;
|
||||||
|
|
||||||
|
// Add a star field.
|
||||||
|
game.overlays.add(Asteroids.stars());
|
||||||
|
|
||||||
|
game.pulse = setInterval(function() {
|
||||||
|
var kill_asteroids = [],
|
||||||
|
new_asteroids = [],
|
||||||
|
kill_bullets = [];
|
||||||
|
|
||||||
|
ctx.save();
|
||||||
|
ctx.clearRect(0, 0, GAME_WIDTH, GAME_HEIGHT);
|
||||||
|
|
||||||
|
// Be nice and award extra lives first.
|
||||||
|
var t_extra_lives = game.player.getScore() / POINTS_TO_EXTRA_LIFE;
|
||||||
|
t_extra_lives = Math.floor(t_extra_lives);
|
||||||
|
if (t_extra_lives > extra_lives) {
|
||||||
|
game.player.extraLife(game);
|
||||||
|
}
|
||||||
|
extra_lives = t_extra_lives;
|
||||||
|
|
||||||
|
if (game.keyState.getState(Asteroids.UP)) {
|
||||||
|
game.player.thrust(THRUST_ACCEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (game.keyState.getState(Asteroids.LEFT)) {
|
||||||
|
game.player.rotate(-ROTATE_SPEED);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (game.keyState.getState(Asteroids.RIGHT)) {
|
||||||
|
game.player.rotate(ROTATE_SPEED);
|
||||||
|
}
|
||||||
|
|
||||||
|
var fire_state = game.keyState.getState(Asteroids.FIRE);
|
||||||
|
if (
|
||||||
|
fire_state &&
|
||||||
|
fire_state != last_fire_state &&
|
||||||
|
bullets.length < MAX_BULLETS
|
||||||
|
) {
|
||||||
|
var b = game.player.fire(game);
|
||||||
|
bullets.push(b);
|
||||||
|
}
|
||||||
|
last_fire_state = fire_state;
|
||||||
|
|
||||||
|
if (!game.player.isDead()) {
|
||||||
|
game.player.move();
|
||||||
|
game.player.draw(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var k = 0; k < bullets.length; k++) {
|
||||||
|
if (!bullets[k]) continue;
|
||||||
|
|
||||||
|
if (bullets[k].getAge() > MAX_BULLET_AGE) {
|
||||||
|
kill_bullets.push(k);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
bullets[k].birthday();
|
||||||
|
bullets[k].move();
|
||||||
|
bullets[k].draw(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var r = kill_bullets.length - 1; r >= 0; r--) {
|
||||||
|
bullets.splice(r, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
var asteroids = game.asteroids.getIterator();
|
||||||
|
for (var i = 0; i < game.asteroids.length; i++) {
|
||||||
|
var killit = false;
|
||||||
|
asteroids[i].move();
|
||||||
|
asteroids[i].draw(ctx);
|
||||||
|
|
||||||
|
// Destroy the asteroid
|
||||||
|
for (var j = 0; j < bullets.length; j++) {
|
||||||
|
if (!bullets[j]) continue;
|
||||||
|
if (Asteroids.collision(bullets[j], asteroids[i])) {
|
||||||
|
game.log.debug("You shot an asteroid!");
|
||||||
|
// Destroy the bullet.
|
||||||
|
bullets.splice(j, 1);
|
||||||
|
killit = true; // JS doesn't have "continue 2;"
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Kill the asteroid?
|
||||||
|
if (killit) {
|
||||||
|
var _gen = asteroids[i].getGeneration() - 1;
|
||||||
|
if (_gen > 0) {
|
||||||
|
// Create children ;)
|
||||||
|
for (var n = 0; n < ASTEROID_CHILDREN; n++) {
|
||||||
|
var a = Asteroids.asteroid(game, _gen);
|
||||||
|
var _pos = [
|
||||||
|
asteroids[i].getPosition()[0],
|
||||||
|
asteroids[i].getPosition()[1]
|
||||||
|
];
|
||||||
|
a.setPosition(_pos);
|
||||||
|
a.setVelocity([
|
||||||
|
Math.random() * speed - hspeed,
|
||||||
|
Math.random() * speed - hspeed
|
||||||
|
]);
|
||||||
|
new_asteroids.push(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
game.player.addScore(ASTEROID_SCORE);
|
||||||
|
kill_asteroids.push(i);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Kill the player?
|
||||||
|
if (
|
||||||
|
!game.player.isDead() &&
|
||||||
|
!game.player.isInvincible() &&
|
||||||
|
Asteroids.collision(game.player, asteroids[i])
|
||||||
|
) {
|
||||||
|
game.player.die(game);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
kill_asteroids.sort(function(a, b) {
|
||||||
|
return a - b;
|
||||||
|
});
|
||||||
|
for (var m = kill_asteroids.length - 1; m >= 0; m--) {
|
||||||
|
game.asteroids.splice(kill_asteroids[m], 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var o = 0; o < new_asteroids.length; o++) {
|
||||||
|
game.asteroids.push(new_asteroids[o]);
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.restore();
|
||||||
|
|
||||||
|
// Do we need to level up?
|
||||||
|
if (0 == game.asteroids.length && last_asteroid_count != 0) {
|
||||||
|
setTimeout(function() {
|
||||||
|
game.level.levelUp(game);
|
||||||
|
}, LEVEL_TIMEOUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
last_asteroid_count = game.asteroids.length;
|
||||||
|
|
||||||
|
// Draw overlays.
|
||||||
|
game.overlays.draw(ctx);
|
||||||
|
|
||||||
|
// Update the info pane.
|
||||||
|
game.info.setLives(game, game.player.getLives());
|
||||||
|
game.info.setScore(game, game.player.getScore());
|
||||||
|
game.info.setLevel(game, game.level.getLevel());
|
||||||
|
}, FRAME_PERIOD);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Some boring constants.
|
||||||
|
Asteroids.LOG_ALL = 0;
|
||||||
|
Asteroids.LOG_INFO = 1;
|
||||||
|
Asteroids.LOG_DEBUG = 2;
|
||||||
|
Asteroids.LOG_WARNING = 3;
|
||||||
|
Asteroids.LOG_ERROR = 4;
|
||||||
|
Asteroids.LOG_CRITICAL = 5;
|
||||||
|
Asteroids.LOG_NONE = 6;
|
||||||
|
|
||||||
|
Asteroids.LEFT = 37;
|
||||||
|
Asteroids.UP = 38;
|
||||||
|
Asteroids.RIGHT = 39;
|
||||||
|
Asteroids.DOWN = 40;
|
||||||
|
Asteroids.FIRE = 32;
|
||||||
|
|
||||||
|
// Load it up!
|
||||||
|
window.onload = Asteroids(document.getElementById("asteroids"));
|
|
@ -0,0 +1,14 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" dir="ltr">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-type" content="text/html;charset=utf-8" />
|
||||||
|
<title>Asteroids</title>
|
||||||
|
<link rel="stylesheet" href="style.css" type="text/css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="asteroids">Asteroids game goes here!</div>
|
||||||
|
|
||||||
|
<script src="asteroids.js" type="text/ecmascript"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,46 @@
|
||||||
|
/* Style for Asteroids.js
|
||||||
|
* Copyright (c) 2010 James Socol <me@jamessocol.com>
|
||||||
|
* See LICENSE.txt for license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #000;
|
||||||
|
color: #fff;
|
||||||
|
font-family: "Calibri", "System", monospace;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#asteroids {
|
||||||
|
margin: 50px auto;
|
||||||
|
width: 640px;
|
||||||
|
border: 1px solid #fff;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#asteroids > * {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#asteroids > div {
|
||||||
|
font-family: "System", monospace;
|
||||||
|
font-size: 11px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#asteroids > div > span {
|
||||||
|
float: right;
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#instructions {
|
||||||
|
width: 640px;
|
||||||
|
margin: 20px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
|
@ -816,8 +816,6 @@ function update_user(string $id_user, array $values)
|
||||||
$values['metaconsole_data_section'] = $values['data_section'];
|
$values['metaconsole_data_section'] = $values['data_section'];
|
||||||
$values['metaconsole_default_event_filter'] = $values['default_event_filter'];
|
$values['metaconsole_default_event_filter'] = $values['default_event_filter'];
|
||||||
unset($values['id_skin']);
|
unset($values['id_skin']);
|
||||||
unset($values['section']);
|
|
||||||
unset($values['data_section']);
|
|
||||||
unset($values['default_event_filter']);
|
unset($values['default_event_filter']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,7 +123,7 @@ class AuditLog extends HTML
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'text' => 'action',
|
'text' => 'action',
|
||||||
'class' => 'w80px table_action_buttons show_extended_info',
|
'class' => 'w80px show_extended_info',
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -187,7 +187,7 @@ class AuditLog extends HTML
|
||||||
'no_sortable_columns' => [-1],
|
'no_sortable_columns' => [-1],
|
||||||
'order' => [
|
'order' => [
|
||||||
'field' => 'date',
|
'field' => 'date',
|
||||||
'direction' => 'asc',
|
'direction' => 'desc',
|
||||||
],
|
],
|
||||||
'search_button_class' => 'sub filter float-right',
|
'search_button_class' => 'sub filter float-right',
|
||||||
'form' => [
|
'form' => [
|
||||||
|
@ -441,7 +441,7 @@ class AuditLog extends HTML
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
// Add event listener for opening and closing details
|
// Add event listener for opening and closing details
|
||||||
$('#audit_logs tbody').on('click', 'td.show_extended_info', function() {
|
$(document).on('click', '#audit_logs tbody tr:has(td.show_extended_info)', function() {
|
||||||
var tr = $(this).closest('tr');
|
var tr = $(this).closest('tr');
|
||||||
var table = $("#<?php echo $this->tableId; ?>").DataTable();
|
var table = $("#<?php echo $this->tableId; ?>").DataTable();
|
||||||
var row = table.row(tr);
|
var row = table.row(tr);
|
||||||
|
|
|
@ -928,7 +928,9 @@ class ConsoleSupervisor
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($prev !== false
|
if ($data['type'] === 'NOTIF.LOG.ALERT' && $prev !== false) {
|
||||||
|
return;
|
||||||
|
} else if ($prev !== false
|
||||||
&& (time() - $prev['timestamp']) > $max_age
|
&& (time() - $prev['timestamp']) > $max_age
|
||||||
) {
|
) {
|
||||||
// Clean previous notification.
|
// Clean previous notification.
|
||||||
|
|
|
@ -388,26 +388,40 @@ class SatelliteAgent extends HTML
|
||||||
$tmp->actions = '';
|
$tmp->actions = '';
|
||||||
|
|
||||||
if ($delete === false) {
|
if ($delete === false) {
|
||||||
$tmp->actions .= html_print_image(
|
$tmp->actions .= html_print_anchor(
|
||||||
($disable === true) ? 'images/lightbulb_off.png' : 'images/lightbulb.png',
|
|
||||||
true,
|
|
||||||
[
|
[
|
||||||
'border' => '0',
|
'href' => '#',
|
||||||
'class' => 'main_menu_icon mrgn_lft_05em invert_filter',
|
'content' => html_print_image(
|
||||||
'onclick' => 'disable_agent(\''.$tmp->address.'\',\''.strip_tags($tmp->name).'\',\''.(int) $disable.'\',\''.$id_agente.'\')',
|
($disable === true) ? 'images/lightbulb_off.png' : 'images/lightbulb.png',
|
||||||
]
|
true,
|
||||||
|
[
|
||||||
|
'title' => ($disable === true) ? __('Enable') : __('Disable'),
|
||||||
|
'border' => '0',
|
||||||
|
'class' => 'main_menu_icon mrgn_lft_05em invert_filter',
|
||||||
|
'onclick' => 'disable_agent(\''.$tmp->address.'\',\''.strip_tags($tmp->name).'\',\''.(int) $disable.'\',\''.$id_agente.'\')',
|
||||||
|
]
|
||||||
|
),
|
||||||
|
],
|
||||||
|
true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($disable === false) {
|
if ($disable === false) {
|
||||||
$tmp->actions .= html_print_image(
|
$tmp->actions .= html_print_anchor(
|
||||||
($delete === true) ? 'images/add.png' : 'images/delete.svg',
|
|
||||||
true,
|
|
||||||
[
|
[
|
||||||
'border' => '0',
|
'href' => '#',
|
||||||
'class' => 'main_menu_icon mrgn_lft_05em invert_filter',
|
'content' => html_print_image(
|
||||||
'onclick' => 'delete_agent(\''.$tmp->address.'\',\''.strip_tags($tmp->name).'\',\''.(int) $delete.'\',\''.$id_agente.'\')',
|
($delete === true) ? 'images/add.png' : 'images/delete.svg',
|
||||||
]
|
true,
|
||||||
|
[
|
||||||
|
'title' => ($delete === true) ? __('Add') : __('Delete'),
|
||||||
|
'border' => '0',
|
||||||
|
'class' => 'main_menu_icon mrgn_lft_05em invert_filter',
|
||||||
|
'onclick' => 'delete_agent(\''.$tmp->address.'\',\''.strip_tags($tmp->name).'\',\''.(int) $delete.'\',\''.$id_agente.'\')',
|
||||||
|
]
|
||||||
|
),
|
||||||
|
],
|
||||||
|
true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -995,6 +995,11 @@ class Tree
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Quiet name on agent.
|
||||||
|
if (isset($agent['quiet']) && $agent['quiet']) {
|
||||||
|
$agent['alias'] .= ' '.__('(Quiet)');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -156,11 +156,14 @@ class WelcomeWindow extends Wizard
|
||||||
modal: {
|
modal: {
|
||||||
title: "<?php echo __('Welcome to').' '.io_safe_output(get_product_name()); ?>",
|
title: "<?php echo __('Welcome to').' '.io_safe_output(get_product_name()); ?>",
|
||||||
cancel: '<?php echo __('Do not show anymore'); ?>',
|
cancel: '<?php echo __('Do not show anymore'); ?>',
|
||||||
ok: '<?php echo __('Close'); ?>'
|
ok: '<?php echo __('Close wizard'); ?>',
|
||||||
|
overlay: true,
|
||||||
|
overlayExtraClass: 'welcome-overlay',
|
||||||
},
|
},
|
||||||
onshow: {
|
onshow: {
|
||||||
page: '<?php echo $this->ajaxController; ?>',
|
page: '<?php echo $this->ajaxController; ?>',
|
||||||
method: 'loadWelcomeWindow',
|
method: 'loadWelcomeWindow',
|
||||||
|
width: 1000,
|
||||||
},
|
},
|
||||||
oncancel: {
|
oncancel: {
|
||||||
page: '<?php echo $this->ajaxController; ?>',
|
page: '<?php echo $this->ajaxController; ?>',
|
||||||
|
@ -178,6 +181,34 @@ class WelcomeWindow extends Wizard
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
onload: () => {
|
||||||
|
$(document).ready(function () {
|
||||||
|
var buttonpane = $("div[aria-describedby='welcome_modal_window'] .ui-dialog-buttonpane.ui-widget-content.ui-helper-clearfix");
|
||||||
|
$(buttonpane).append(`
|
||||||
|
<div class="welcome-wizard-buttons">
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" class="welcome-wizard-do-not-show" value="1" />
|
||||||
|
<?php echo __('Do not show anymore'); ?>
|
||||||
|
</label>
|
||||||
|
<button class="close-wizard-button"><?php echo __('Close wizard'); ?></button>
|
||||||
|
</div>
|
||||||
|
`);
|
||||||
|
|
||||||
|
var closeWizard = $("button.close-wizard-button");
|
||||||
|
|
||||||
|
$(closeWizard).click(function (e) {
|
||||||
|
var close = $("div[aria-describedby='welcome_modal_window'] button.sub.ok.submit-next.ui-button");
|
||||||
|
var cancel = $("div[aria-describedby='welcome_modal_window'] button.sub.upd.submit-cancel.ui-button");
|
||||||
|
var checkbox = $("div[aria-describedby='welcome_modal_window'] .welcome-wizard-do-not-show:checked").length;
|
||||||
|
|
||||||
|
if (checkbox === 1) {
|
||||||
|
$(cancel).click();
|
||||||
|
} else {
|
||||||
|
$(close).click()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -412,11 +443,11 @@ class WelcomeWindow extends Wizard
|
||||||
$inputs[] = [
|
$inputs[] = [
|
||||||
'wrapper' => 'div',
|
'wrapper' => 'div',
|
||||||
'block_id' => 'div_diagnosis',
|
'block_id' => 'div_diagnosis',
|
||||||
'class' => 'flex-row flex-items-center w98p ',
|
'class' => 'flex-row flex-items-center ',
|
||||||
'direct' => 1,
|
'direct' => 1,
|
||||||
'block_content' => [
|
'block_content' => [
|
||||||
[
|
[
|
||||||
'label' => __('Post-installation status diagnostic'),
|
'label' => __('This is your post-installation status diagnostic:'),
|
||||||
'arguments' => [
|
'arguments' => [
|
||||||
'class' => 'first_lbl',
|
'class' => 'first_lbl',
|
||||||
'name' => 'lbl_diagnosis',
|
'name' => 'lbl_diagnosis',
|
||||||
|
@ -434,7 +465,7 @@ class WelcomeWindow extends Wizard
|
||||||
'direct' => 1,
|
'direct' => 1,
|
||||||
'block_content' => [
|
'block_content' => [
|
||||||
[
|
[
|
||||||
'label' => __('Warp Update registration'),
|
'label' => '<span class="status"></span>'.__('Warp Update registration'),
|
||||||
'arguments' => [
|
'arguments' => [
|
||||||
'class' => 'first_lbl',
|
'class' => 'first_lbl',
|
||||||
'name' => 'lbl_update_manager',
|
'name' => 'lbl_update_manager',
|
||||||
|
@ -443,7 +474,7 @@ class WelcomeWindow extends Wizard
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'arguments' => [
|
'arguments' => [
|
||||||
'label' => '',
|
'label' => __('Cancel'),
|
||||||
'type' => 'button',
|
'type' => 'button',
|
||||||
'attributes' => [
|
'attributes' => [
|
||||||
'class' => (empty($btn_update_manager_class) === false) ? $btn_update_manager_class : 'invisible_important',
|
'class' => (empty($btn_update_manager_class) === false) ? $btn_update_manager_class : 'invisible_important',
|
||||||
|
@ -462,7 +493,7 @@ class WelcomeWindow extends Wizard
|
||||||
'direct' => 1,
|
'direct' => 1,
|
||||||
'block_content' => [
|
'block_content' => [
|
||||||
[
|
[
|
||||||
'label' => __('Default mail to send alerts'),
|
'label' => '<span class="status"></span>'.__('Default mail to send alerts'),
|
||||||
'arguments' => [
|
'arguments' => [
|
||||||
'class' => 'first_lbl',
|
'class' => 'first_lbl',
|
||||||
'name' => 'lbl_create_agent',
|
'name' => 'lbl_create_agent',
|
||||||
|
@ -471,7 +502,7 @@ class WelcomeWindow extends Wizard
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'arguments' => [
|
'arguments' => [
|
||||||
'label' => '',
|
'label' => __('Cancel'),
|
||||||
'type' => 'button',
|
'type' => 'button',
|
||||||
'attributes' => [
|
'attributes' => [
|
||||||
'class' => (empty($btn_configure_mail_class) === false) ? $btn_configure_mail_class : 'invisible_important',
|
'class' => (empty($btn_configure_mail_class) === false) ? $btn_configure_mail_class : 'invisible_important',
|
||||||
|
@ -490,7 +521,7 @@ class WelcomeWindow extends Wizard
|
||||||
'direct' => 1,
|
'direct' => 1,
|
||||||
'block_content' => [
|
'block_content' => [
|
||||||
[
|
[
|
||||||
'label' => __('All servers running'),
|
'label' => '<span class="status"></span>'.__('All servers running'),
|
||||||
'arguments' => [
|
'arguments' => [
|
||||||
'class' => 'first_lbl',
|
'class' => 'first_lbl',
|
||||||
'name' => 'lbl_servers_up',
|
'name' => 'lbl_servers_up',
|
||||||
|
@ -499,7 +530,7 @@ class WelcomeWindow extends Wizard
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'arguments' => [
|
'arguments' => [
|
||||||
'label' => '',
|
'label' => __('Cancel'),
|
||||||
'type' => 'button',
|
'type' => 'button',
|
||||||
'attributes' => [
|
'attributes' => [
|
||||||
'class' => (empty($btn_servers_up_class) === false) ? $btn_servers_up_class : 'invisible_important',
|
'class' => (empty($btn_servers_up_class) === false) ? $btn_servers_up_class : 'invisible_important',
|
||||||
|
@ -518,7 +549,7 @@ class WelcomeWindow extends Wizard
|
||||||
'direct' => 1,
|
'direct' => 1,
|
||||||
'block_content' => [
|
'block_content' => [
|
||||||
[
|
[
|
||||||
'label' => __('Enterprise licence valid'),
|
'label' => '<span class="status"></span>'.__('Enterprise licence valid'),
|
||||||
'arguments' => [
|
'arguments' => [
|
||||||
'class' => 'first_lbl',
|
'class' => 'first_lbl',
|
||||||
'name' => 'lbl_license_valid',
|
'name' => 'lbl_license_valid',
|
||||||
|
@ -527,7 +558,7 @@ class WelcomeWindow extends Wizard
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'arguments' => [
|
'arguments' => [
|
||||||
'label' => '',
|
'label' => __('Cancel'),
|
||||||
'type' => 'button',
|
'type' => 'button',
|
||||||
'attributes' => [
|
'attributes' => [
|
||||||
'class' => (empty($btn_license_valid_class) === false) ? $btn_license_valid_class : 'invisible_important',
|
'class' => (empty($btn_license_valid_class) === false) ? $btn_license_valid_class : 'invisible_important',
|
||||||
|
@ -567,7 +598,7 @@ class WelcomeWindow extends Wizard
|
||||||
$inputs[] = [
|
$inputs[] = [
|
||||||
'wrapper' => 'div',
|
'wrapper' => 'div',
|
||||||
'block_id' => 'div_task_todo',
|
'block_id' => 'div_task_todo',
|
||||||
'class' => 'flex-row flex-items-center w98p',
|
'class' => 'flex-row flex-items-center',
|
||||||
'direct' => 1,
|
'direct' => 1,
|
||||||
'block_content' => [
|
'block_content' => [
|
||||||
[
|
[
|
||||||
|
@ -591,7 +622,7 @@ class WelcomeWindow extends Wizard
|
||||||
$inputs[] = [
|
$inputs[] = [
|
||||||
'wrapper' => 'div',
|
'wrapper' => 'div',
|
||||||
'block_id' => 'div_wizard_agent',
|
'block_id' => 'div_wizard_agent',
|
||||||
'class' => 'flex space-between w98p',
|
'class' => 'flex space-between',
|
||||||
'direct' => 1,
|
'direct' => 1,
|
||||||
'block_content' => [
|
'block_content' => [
|
||||||
[
|
[
|
||||||
|
@ -599,7 +630,7 @@ class WelcomeWindow extends Wizard
|
||||||
'type' => 'select',
|
'type' => 'select',
|
||||||
'fields' => $fields,
|
'fields' => $fields,
|
||||||
'name' => 'task_to_perform',
|
'name' => 'task_to_perform',
|
||||||
'selected' => '',
|
'selected' => 'check_net',
|
||||||
'return' => true,
|
'return' => true,
|
||||||
'nothing' => \__('Please select one'),
|
'nothing' => \__('Please select one'),
|
||||||
'nothing_value' => '',
|
'nothing_value' => '',
|
||||||
|
@ -630,6 +661,24 @@ class WelcomeWindow extends Wizard
|
||||||
|
|
||||||
$output .= $this->loadJS($flag_task);
|
$output .= $this->loadJS($flag_task);
|
||||||
echo $output;
|
echo $output;
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<div class="welcome-wizard-right-content">
|
||||||
|
<ul class="welcome-circles">
|
||||||
|
<li></li>
|
||||||
|
<li></li>
|
||||||
|
<li></li>
|
||||||
|
<li></li>
|
||||||
|
<li></li>
|
||||||
|
<li></li>
|
||||||
|
<li></li>
|
||||||
|
<li></li>
|
||||||
|
<li></li>
|
||||||
|
<li></li>
|
||||||
|
</ul>
|
||||||
|
<img src="images/welcome-wizard-image.png" />
|
||||||
|
</div>
|
||||||
|
';
|
||||||
?>
|
?>
|
||||||
<div id="dialog_goliat" class="invisible">
|
<div id="dialog_goliat" class="invisible">
|
||||||
<?php
|
<?php
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
/**
|
/**
|
||||||
* Pandora build version and version
|
* Pandora build version and version
|
||||||
*/
|
*/
|
||||||
$build_version = 'PC240117';
|
$build_version = 'PC240119';
|
||||||
$pandora_version = 'v7.0NG.775';
|
$pandora_version = 'v7.0NG.775';
|
||||||
|
|
||||||
// Do not overwrite default timezone set if defined.
|
// Do not overwrite default timezone set if defined.
|
||||||
|
|
|
@ -2016,7 +2016,7 @@ function api_set_new_agent($id_node, $thrash2, $other, $trhash3, $return=false,
|
||||||
}
|
}
|
||||||
|
|
||||||
returnError('No agent alias specified');
|
returnError('No agent alias specified');
|
||||||
} else if (agents_get_agent_id($nombre_agente)) {
|
} else if (agents_get_agent_id($agent->nombre())) {
|
||||||
if ($message === true) {
|
if ($message === true) {
|
||||||
return 'The agent name already exists in DB.';
|
return 'The agent name already exists in DB.';
|
||||||
}
|
}
|
||||||
|
@ -2064,7 +2064,7 @@ function api_set_new_agent($id_node, $thrash2, $other, $trhash3, $return=false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($return === false) {
|
if ($return !== true) {
|
||||||
returnData(
|
returnData(
|
||||||
'string',
|
'string',
|
||||||
[
|
[
|
||||||
|
|
|
@ -383,6 +383,13 @@ function cron_task_run(
|
||||||
$nameday = strtolower($datetime->format('l'));
|
$nameday = strtolower($datetime->format('l'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (empty($old_args['first_execution']) === false) {
|
||||||
|
$datetime = new DateTime();
|
||||||
|
$datetime->setTimestamp($old_args['first_execution']);
|
||||||
|
$datetime->modify('+7 day');
|
||||||
|
$weekly_date = $datetime->format('Y-m-d');
|
||||||
|
$weekly_time = $datetime->format('H:i:s');
|
||||||
|
$old_args['first_execution'] = strtotime($weekly_date.' '.$weekly_time);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Add it to next execution.
|
// Add it to next execution.
|
||||||
|
|
|
@ -1318,7 +1318,7 @@ function events_get_all(
|
||||||
if ($tags[0] === $id_tag) {
|
if ($tags[0] === $id_tag) {
|
||||||
$_tmp .= ' AND (( ';
|
$_tmp .= ' AND (( ';
|
||||||
} else {
|
} else {
|
||||||
$_tmp .= ' OR ( ';
|
$_tmp .= ' AND ( ';
|
||||||
}
|
}
|
||||||
|
|
||||||
$_tmp .= sprintf(
|
$_tmp .= sprintf(
|
||||||
|
@ -1969,7 +1969,7 @@ function events_get_all(
|
||||||
// -1 For pagination 'All'.
|
// -1 For pagination 'All'.
|
||||||
((int) $limit === -1)
|
((int) $limit === -1)
|
||||||
? $end = count($data)
|
? $end = count($data)
|
||||||
: $end = ((int) $offset !== 0) ? ($offset + $limit) : $limit;
|
: $end = $limit;
|
||||||
$finally = array_slice($data, $offset, $end, true);
|
$finally = array_slice($data, $offset, $end, true);
|
||||||
$return = [
|
$return = [
|
||||||
'buffers' => $buffers,
|
'buffers' => $buffers,
|
||||||
|
|
|
@ -774,7 +774,8 @@ function html_print_select(
|
||||||
$select2_multiple_enable_all=false,
|
$select2_multiple_enable_all=false,
|
||||||
$form='',
|
$form='',
|
||||||
$order=false,
|
$order=false,
|
||||||
$custom_id=null
|
$custom_id=null,
|
||||||
|
$placeholder='',
|
||||||
) {
|
) {
|
||||||
$output = "\n";
|
$output = "\n";
|
||||||
|
|
||||||
|
@ -1013,7 +1014,8 @@ function html_print_select(
|
||||||
|
|
||||||
$output .= '<script type="text/javascript">';
|
$output .= '<script type="text/javascript">';
|
||||||
$output .= '$("#'.$id.'").select2({
|
$output .= '$("#'.$id.'").select2({
|
||||||
closeOnSelect: '.(($select2_multiple_enable === true) ? 'false' : 'true').'
|
closeOnSelect: '.(($select2_multiple_enable === true) ? 'false' : 'true').',
|
||||||
|
placeholder: "'.$placeholder.'",
|
||||||
});';
|
});';
|
||||||
|
|
||||||
if ($required !== false) {
|
if ($required !== false) {
|
||||||
|
@ -1758,6 +1760,7 @@ function html_print_select_multiple_modules_filtered(array $data):string
|
||||||
'multiple' => true,
|
'multiple' => true,
|
||||||
'style' => 'min-width: 200px;max-width:200px;',
|
'style' => 'min-width: 200px;max-width:200px;',
|
||||||
'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')',
|
'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')',
|
||||||
|
'placeholder' => (isset($data['placeholderAgents']) === true) ? $data['placeholderAgents'] : '',
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1773,6 +1776,7 @@ function html_print_select_multiple_modules_filtered(array $data):string
|
||||||
'multiple' => true,
|
'multiple' => true,
|
||||||
'style' => 'min-width: 200px;max-width:200px;',
|
'style' => 'min-width: 200px;max-width:200px;',
|
||||||
'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')',
|
'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')',
|
||||||
|
'placeholder' => (isset($data['placeholderAgents']) === true) ? $data['placeholderAgents'] : '',
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1888,7 +1892,8 @@ function html_print_select_from_sql(
|
||||||
$size=false,
|
$size=false,
|
||||||
$truncate_size=GENERIC_SIZE_TEXT,
|
$truncate_size=GENERIC_SIZE_TEXT,
|
||||||
$class='',
|
$class='',
|
||||||
$required=false
|
$required=false,
|
||||||
|
$placeholder='',
|
||||||
) {
|
) {
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
|
@ -1931,7 +1936,12 @@ function html_print_select_from_sql(
|
||||||
$required,
|
$required,
|
||||||
$truncate_size,
|
$truncate_size,
|
||||||
true,
|
true,
|
||||||
true
|
true,
|
||||||
|
false,
|
||||||
|
'',
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
$placeholder
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5680,7 +5690,9 @@ function html_print_input($data, $wrapper='div', $input_only=false)
|
||||||
((isset($data['select2_multiple_enable']) === true) ? $data['select2_multiple_enable'] : false),
|
((isset($data['select2_multiple_enable']) === true) ? $data['select2_multiple_enable'] : false),
|
||||||
((isset($data['select2_multiple_enable_all']) === true) ? $data['select2_multiple_enable_all'] : false),
|
((isset($data['select2_multiple_enable_all']) === true) ? $data['select2_multiple_enable_all'] : false),
|
||||||
((isset($data['form']) === true) ? $data['form'] : ''),
|
((isset($data['form']) === true) ? $data['form'] : ''),
|
||||||
((isset($data['order']) === true) ? $data['order'] : false)
|
((isset($data['order']) === true) ? $data['order'] : false),
|
||||||
|
((isset($data['custom_id']) === true) ? $data['custom_id'] : null),
|
||||||
|
((isset($data['placeholder']) === true) ? $data['placeholder'] : null),
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -5700,7 +5712,8 @@ function html_print_input($data, $wrapper='div', $input_only=false)
|
||||||
((isset($data['size']) === true) ? $data['size'] : false),
|
((isset($data['size']) === true) ? $data['size'] : false),
|
||||||
((isset($data['trucate_size']) === true) ? $data['trucate_size'] : GENERIC_SIZE_TEXT),
|
((isset($data['trucate_size']) === true) ? $data['trucate_size'] : GENERIC_SIZE_TEXT),
|
||||||
((isset($data['class']) === true) ? $data['class'] : ''),
|
((isset($data['class']) === true) ? $data['class'] : ''),
|
||||||
((isset($data['required']) === true) ? $data['required'] : false)
|
((isset($data['required']) === true) ? $data['required'] : false),
|
||||||
|
((isset($data['placeholder']) === true) ? $data['placeholder'] : null),
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -923,40 +923,7 @@ if (is_ajax()) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$image_about = ui_get_full_url('/images/custom_logo/logo-default-pandorafms.png', false, false, false);
|
$image_about = ui_get_full_url('/images/custom_logo/logo-default-pandorafms-collapsed.svg', false, false, false);
|
||||||
if (enterprise_installed() === false) {
|
|
||||||
if ($config['style'] === 'pandora_black') {
|
|
||||||
$image_about = 'images/custom_logo/'.HEADER_LOGO_BLACK_CLASSIC;
|
|
||||||
} else if ($config['style'] === 'pandora') {
|
|
||||||
$image_about = 'images/custom_logo/'.HEADER_LOGO_DEFAULT_CLASSIC;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if ($config['style'] === 'pandora_black' && $config['custom_logo'] === HEADER_LOGO_DEFAULT_CLASSIC) {
|
|
||||||
$config['custom_logo'] = HEADER_LOGO_BLACK_CLASSIC;
|
|
||||||
} else if ($config['style'] === 'pandora' && $config['custom_logo'] === HEADER_LOGO_BLACK_CLASSIC) {
|
|
||||||
$config['custom_logo'] = HEADER_LOGO_DEFAULT_CLASSIC;
|
|
||||||
}
|
|
||||||
|
|
||||||
$image_about = 'images/custom_logo/'.$config['custom_logo'];
|
|
||||||
|
|
||||||
if (file_exists(ENTERPRISE_DIR.'/'.$image_about) === true) {
|
|
||||||
$image_about = ENTERPRISE_DIR.'/'.$image_about;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_metaconsole() === true) {
|
|
||||||
$image_about = ui_get_full_url('/enterprise/images/custom_logo/pandoraFMS_metaconsole_full.svg', false, false, false);
|
|
||||||
|
|
||||||
if ($config['meta_custom_logo'] === 'pandoraFMS_metaconsole_full.svg') {
|
|
||||||
$image_about = 'images/custom_logo/'.$config['meta_custom_logo'];
|
|
||||||
} else {
|
|
||||||
$image_about = '../images/custom_logo/'.$config['meta_custom_logo'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (file_exists(ENTERPRISE_DIR.'/'.$image_about) === true) {
|
|
||||||
$image_about = $image_about;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$dialog = '
|
$dialog = '
|
||||||
<div id="about-tabs" class="invisible overflow-hidden">
|
<div id="about-tabs" class="invisible overflow-hidden">
|
||||||
|
@ -977,8 +944,8 @@ if (is_ajax()) {
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width: 40%; border: 0px;">
|
<th style="width: 40%; border: 0px;">
|
||||||
<a href="https://pandorafms.com/" target="_blank">
|
<a href="https://pandorafms.com/" target="_blank" class="header_center">
|
||||||
<img src="'.$image_about.'" alt="logo" width="70%">
|
<img src="'.$image_about.'" alt="logo" width="50%">
|
||||||
</a>
|
</a>
|
||||||
</th>
|
</th>
|
||||||
<th style="width: 60%; text-align: left; border: 0px;">
|
<th style="width: 60%; text-align: left; border: 0px;">
|
||||||
|
@ -1290,42 +1257,7 @@ if (is_ajax()) {
|
||||||
$lts_name = ' <i>'.$config['lts_name'].'</i>';
|
$lts_name = ' <i>'.$config['lts_name'].'</i>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$image_about = ui_get_full_url('/images/custom_logo/logo-default-pandorafms.png', false, false, false);
|
$image_about = ui_get_full_url('/images/custom_logo/logo-default-pandorafms-collapsed.svg', false, false, false);
|
||||||
if (enterprise_installed() === false) {
|
|
||||||
if ($config['style'] === 'pandora_black') {
|
|
||||||
$image_about = 'images/custom_logo/'.HEADER_LOGO_BLACK_CLASSIC;
|
|
||||||
} else if ($config['style'] === 'pandora') {
|
|
||||||
$image_about = 'images/custom_logo/'.HEADER_LOGO_DEFAULT_CLASSIC;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if ($config['style'] === 'pandora_black' && $config['custom_logo'] === HEADER_LOGO_DEFAULT_CLASSIC) {
|
|
||||||
$config['custom_logo'] = HEADER_LOGO_BLACK_CLASSIC;
|
|
||||||
} else if ($config['style'] === 'pandora' && $config['custom_logo'] === HEADER_LOGO_BLACK_CLASSIC) {
|
|
||||||
$config['custom_logo'] = HEADER_LOGO_DEFAULT_CLASSIC;
|
|
||||||
}
|
|
||||||
|
|
||||||
$image_about = 'images/custom_logo/'.$config['custom_logo'];
|
|
||||||
|
|
||||||
if (file_exists(ENTERPRISE_DIR.'/'.$image_about) === true) {
|
|
||||||
$image_about = ENTERPRISE_DIR.'/'.$image_about;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_metaconsole() === true) {
|
|
||||||
$image_about = ui_get_full_url('/enterprise/images/custom_logo/pandoraFMS_metaconsole_full.svg', false, false, false);
|
|
||||||
|
|
||||||
if ($config['meta_custom_logo'] === 'pandoraFMS_metaconsole_full.svg') {
|
|
||||||
$image_about = 'images/custom_logo/'.$config['meta_custom_logo'];
|
|
||||||
} else {
|
|
||||||
$image_about = '../images/custom_logo/'.$config['meta_custom_logo'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (file_exists(ENTERPRISE_DIR.'/'.$image_about) === true) {
|
|
||||||
$image_about = $image_about;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$dialog = '
|
$dialog = '
|
||||||
<div id="about-tabs" class="invisible overflow-hidden">
|
<div id="about-tabs" class="invisible overflow-hidden">
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -1339,7 +1271,7 @@ if (is_ajax()) {
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width: 40%; border: 0px;">
|
<th style="width: 40%; border: 0px;">
|
||||||
<a href="javascript:christmas_click('.$config['eastern_eggs_disabled'].')">
|
<a href="javascript:christmas_click('.$config['eastern_eggs_disabled'].')">
|
||||||
<img src="'.$image_about.'" alt="logo" width="70%">
|
<img src="'.$image_about.'" alt="logo" width="50%">
|
||||||
<input id="count_click" type="hidden" value="0" />
|
<input id="count_click" type="hidden" value="0" />
|
||||||
</a>
|
</a>
|
||||||
</th>
|
</th>
|
||||||
|
|
|
@ -636,13 +636,15 @@ function notifications_get_user_label_status($source, $user, $label)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Clean default common groups error for mesagges.
|
// Clean default common groups error for mesagges.
|
||||||
|
$group_enable = true;
|
||||||
if ($common_groups[0] === 0) {
|
if ($common_groups[0] === 0) {
|
||||||
unset($common_groups[0]);
|
unset($common_groups[0]);
|
||||||
|
$group_enable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// No group found, return no permissions.
|
// No group found, return no permissions.
|
||||||
$value = empty($common_groups) ? false : $source[$label];
|
$value = empty($common_groups) ? false : $source[$label];
|
||||||
return notifications_build_user_enable_return($value, false);
|
return notifications_build_user_enable_return($value, $group_enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -674,14 +676,34 @@ function notifications_set_user_label_status($source, $user, $label, $value)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (bool) db_process_sql_update(
|
$exists = db_process_sql(sprintf('SELECT * FROM tnotification_source_user WHERE id_user = "%s" AND id_source = "%s"', $user, $source));
|
||||||
'tnotification_source_user',
|
if (empty($exists['enabled']) && empty($exists['also_mail'])) {
|
||||||
[$label => $value],
|
$sql = sprintf('DELETE FROM tnotification_source_user WHERE id_user = "%s" AND id_source = "%s"', $user, $source);
|
||||||
[
|
db_process_sql($sql);
|
||||||
'id_user' => $user,
|
$exists = false;
|
||||||
'id_source' => $source,
|
}
|
||||||
]
|
|
||||||
);
|
if ($exists === false) {
|
||||||
|
db_process_sql_insert(
|
||||||
|
'tnotification_source_user',
|
||||||
|
[
|
||||||
|
'id_user' => $user,
|
||||||
|
'id_source' => $source,
|
||||||
|
'enabled' => '1',
|
||||||
|
'also_mail' => '1',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return (bool) db_process_sql_update(
|
||||||
|
'tnotification_source_user',
|
||||||
|
[$label => $value],
|
||||||
|
[
|
||||||
|
'id_user' => $user,
|
||||||
|
'id_source' => $source,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1137,6 +1159,15 @@ function notifications_print_dropdown()
|
||||||
$mess = [];
|
$mess = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$redirection_notifications = html_print_menu_button(
|
||||||
|
[
|
||||||
|
'href' => 'javascript:',
|
||||||
|
'class' => 'notification_menu_actions',
|
||||||
|
'text' => __('View all messages'),
|
||||||
|
'onClick' => "window.location='".ui_get_full_url('index.php?sec=message_list&sec2=operation/messages/message_list')."'",
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
$notification_menu = html_print_menu_button(
|
$notification_menu = html_print_menu_button(
|
||||||
[
|
[
|
||||||
'href' => 'javascript:',
|
'href' => 'javascript:',
|
||||||
|
@ -1154,6 +1185,7 @@ function notifications_print_dropdown()
|
||||||
<div class='notificaion_menu_container'>
|
<div class='notificaion_menu_container'>
|
||||||
<div class='menu_tab filter_notification'>%s</div>
|
<div class='menu_tab filter_notification'>%s</div>
|
||||||
<div class='menu_tab notification_menu'>%s</div>
|
<div class='menu_tab notification_menu'>%s</div>
|
||||||
|
<div class='menu_tab notification_menu'>%s</div>
|
||||||
</div>
|
</div>
|
||||||
%s
|
%s
|
||||||
</div>
|
</div>
|
||||||
|
@ -1166,6 +1198,7 @@ function notifications_print_dropdown()
|
||||||
",
|
",
|
||||||
$notification_filter,
|
$notification_filter,
|
||||||
$notification_menu,
|
$notification_menu,
|
||||||
|
$redirection_notifications,
|
||||||
array_reduce(
|
array_reduce(
|
||||||
$mess,
|
$mess,
|
||||||
function ($carry, $message) {
|
function ($carry, $message) {
|
||||||
|
|
|
@ -806,6 +806,10 @@ function edit_node(data_node, dblClick) {
|
||||||
var flag_edit_node = true;
|
var flag_edit_node = true;
|
||||||
var edit_node = null;
|
var edit_node = null;
|
||||||
|
|
||||||
|
if (networkmap_write === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
//Only select one node
|
//Only select one node
|
||||||
var selection = d3_nm.selectAll(".node_selected");
|
var selection = d3_nm.selectAll(".node_selected");
|
||||||
var id;
|
var id;
|
||||||
|
@ -1950,6 +1954,10 @@ function init_minimap() {
|
||||||
// Context menu
|
// Context menu
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
function show_menu(item, data) {
|
function show_menu(item, data) {
|
||||||
|
if (networkmap_write === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
mouse = [];
|
mouse = [];
|
||||||
mouse[0] = d3_nm.event.pageX;
|
mouse[0] = d3_nm.event.pageX;
|
||||||
mouse[1] = d3_nm.event.pageY;
|
mouse[1] = d3_nm.event.pageY;
|
||||||
|
@ -2819,6 +2827,10 @@ function cancel_set_parent() {
|
||||||
// OWN CODE FOR TO DRAG
|
// OWN CODE FOR TO DRAG
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
function init_drag_and_drop() {
|
function init_drag_and_drop() {
|
||||||
|
if (networkmap_write === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
window.dragables = svg.selectAll(".dragable_node");
|
window.dragables = svg.selectAll(".dragable_node");
|
||||||
|
|
||||||
window.drag_start = [0, 0];
|
window.drag_start = [0, 0];
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
/* global $ */
|
||||||
// Droppable options.
|
// Droppable options.
|
||||||
var droppableOptions = {
|
var droppableOptions = {
|
||||||
accept: ".draggable",
|
accept: ".draggable",
|
||||||
|
@ -422,12 +423,38 @@ $("[data-button=new]").click(function(e) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function updateSelect(element, fields, selected) {
|
||||||
|
if (typeof fields === "object") {
|
||||||
|
$(element)
|
||||||
|
.find("select option[value!=0]")
|
||||||
|
.remove();
|
||||||
|
$(element)
|
||||||
|
.find(".select2-container .select2-selection__rendered")
|
||||||
|
.empty();
|
||||||
|
Object.keys(fields).forEach(function(key) {
|
||||||
|
if (key === selected) {
|
||||||
|
$(element)
|
||||||
|
.find(".select2-container .select2-selection__rendered")
|
||||||
|
.append(`${fields[key]}`);
|
||||||
|
$(element)
|
||||||
|
.find("select")
|
||||||
|
.append(`<option value="${key}" selected>${fields[key]}</option>`);
|
||||||
|
} else {
|
||||||
|
$(element)
|
||||||
|
.find("select")
|
||||||
|
.append(`<option value="${key}">${fields[key]}</option>`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Save graps modal.
|
// Save graps modal.
|
||||||
$("[data-button=save]").click(function(e) {
|
$("[data-button=save]").click(function(e) {
|
||||||
// Filter save mode selector
|
// Filter save mode selector
|
||||||
$("#save_filter_row1").show();
|
$("#save_filter_row1").show();
|
||||||
$("#save_filter_row2").show();
|
$("#save_filter_row2").show();
|
||||||
$("#update_filter_row1").hide();
|
$("#update_filter_row1").hide();
|
||||||
|
$("#delete_filter_row2").hide();
|
||||||
$("#radiobtn0002").prop("checked", false);
|
$("#radiobtn0002").prop("checked", false);
|
||||||
$("#radiobtn0001").prop("checked", true);
|
$("#radiobtn0001").prop("checked", true);
|
||||||
$("#text-id_name").val("");
|
$("#text-id_name").val("");
|
||||||
|
@ -438,20 +465,43 @@ $("[data-button=save]").click(function(e) {
|
||||||
$("#save_filter_row2").show();
|
$("#save_filter_row2").show();
|
||||||
$("#submit-save_filter").show();
|
$("#submit-save_filter").show();
|
||||||
$("#update_filter_row1").hide();
|
$("#update_filter_row1").hide();
|
||||||
} else {
|
$("#delete_filter_row2").hide();
|
||||||
|
} else if ($(this).val() == "update") {
|
||||||
$("#save_filter_row1").hide();
|
$("#save_filter_row1").hide();
|
||||||
$("#save_filter_row2").hide();
|
$("#save_filter_row2").hide();
|
||||||
$("#update_filter_row1").show();
|
$("#update_filter_row1").show();
|
||||||
$("#submit-save_filter").hide();
|
$("#submit-save_filter").hide();
|
||||||
|
$("#delete_filter_row2").hide();
|
||||||
|
} else {
|
||||||
|
$("#save_filter_row1").hide();
|
||||||
|
$("#save_filter_row2").hide();
|
||||||
|
$("#update_filter_row1").hide();
|
||||||
|
$("#submit-save_filter").hide();
|
||||||
|
$("#delete_filter_row2").show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#save-filter-select").dialog({
|
$.ajax({
|
||||||
resizable: true,
|
method: "POST",
|
||||||
draggable: true,
|
url: "ajax.php",
|
||||||
modal: false,
|
dataType: "json",
|
||||||
closeOnEscape: true,
|
data: {
|
||||||
width: 350
|
page: "operation/reporting/graph_analytics",
|
||||||
|
load_list_filters: 1
|
||||||
|
},
|
||||||
|
success: function(data) {
|
||||||
|
if (data) {
|
||||||
|
updateSelect("#save_filter_form", data, 0);
|
||||||
|
$("#save-filter-select").dialog({
|
||||||
|
resizable: true,
|
||||||
|
draggable: true,
|
||||||
|
modal: false,
|
||||||
|
closeOnEscape: true,
|
||||||
|
width: 350,
|
||||||
|
title: titleModalActions
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -535,14 +585,67 @@ function save_update_filter() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Delete filter.
|
||||||
|
function delete_filter() {
|
||||||
|
confirmDialog({
|
||||||
|
title: titleDelete,
|
||||||
|
message: messageDelete,
|
||||||
|
onAccept: function() {
|
||||||
|
$.ajax({
|
||||||
|
method: "POST",
|
||||||
|
url: "ajax.php",
|
||||||
|
dataType: "html",
|
||||||
|
data: {
|
||||||
|
page: "operation/reporting/graph_analytics",
|
||||||
|
delete_filter: $("#delete_filter").val()
|
||||||
|
},
|
||||||
|
success: function(data) {
|
||||||
|
if (data == "deleted") {
|
||||||
|
confirmDialog({
|
||||||
|
title: titleDeleteConfirm,
|
||||||
|
message: messageDeleteConfirm,
|
||||||
|
hideCancelButton: true,
|
||||||
|
onAccept: function() {
|
||||||
|
$(
|
||||||
|
"button.ui-button.ui-corner-all.ui-widget.ui-button-icon-only.ui-dialog-titlebar-close"
|
||||||
|
).click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
confirmDialog({
|
||||||
|
title: titleDeleteError,
|
||||||
|
message: messageDeleteError,
|
||||||
|
hideCancelButton: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Load graps modal.
|
// Load graps modal.
|
||||||
$("[data-button=load]").click(function(e) {
|
$("[data-button=load]").click(function(e) {
|
||||||
$("#load-filter-select").dialog({
|
$.ajax({
|
||||||
resizable: true,
|
method: "POST",
|
||||||
draggable: true,
|
url: "ajax.php",
|
||||||
modal: false,
|
dataType: "json",
|
||||||
closeOnEscape: true,
|
data: {
|
||||||
width: "auto"
|
page: "operation/reporting/graph_analytics",
|
||||||
|
load_list_filters: 1
|
||||||
|
},
|
||||||
|
success: function(data) {
|
||||||
|
if (data) {
|
||||||
|
updateSelect("#load_filter_form", data, 0);
|
||||||
|
$("#load-filter-select").dialog({
|
||||||
|
resizable: true,
|
||||||
|
draggable: true,
|
||||||
|
modal: false,
|
||||||
|
closeOnEscape: true,
|
||||||
|
width: "auto"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -618,12 +721,26 @@ function loadFilter(url, filterId, homeurl, id) {
|
||||||
|
|
||||||
// Share button.
|
// Share button.
|
||||||
$("[data-button=share]").click(function(e) {
|
$("[data-button=share]").click(function(e) {
|
||||||
$("#share-select").dialog({
|
$.ajax({
|
||||||
resizable: true,
|
method: "POST",
|
||||||
draggable: true,
|
url: "ajax.php",
|
||||||
modal: false,
|
dataType: "json",
|
||||||
closeOnEscape: true,
|
data: {
|
||||||
width: "auto"
|
page: "operation/reporting/graph_analytics",
|
||||||
|
load_list_filters: 1
|
||||||
|
},
|
||||||
|
success: function(data) {
|
||||||
|
if (data) {
|
||||||
|
updateSelect("#share_form-0-0", data, 0);
|
||||||
|
$("#share-select").dialog({
|
||||||
|
resizable: true,
|
||||||
|
draggable: true,
|
||||||
|
modal: false,
|
||||||
|
closeOnEscape: true,
|
||||||
|
width: "auto"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -643,13 +760,27 @@ $("#button-share-modal").click(function(e) {
|
||||||
|
|
||||||
// Export button.
|
// Export button.
|
||||||
$("[data-button=export]").click(function(e) {
|
$("[data-button=export]").click(function(e) {
|
||||||
$("#export-select").dialog({
|
$.ajax({
|
||||||
resizable: true,
|
method: "POST",
|
||||||
draggable: true,
|
url: "ajax.php",
|
||||||
modal: false,
|
dataType: "json",
|
||||||
closeOnEscape: true,
|
data: {
|
||||||
width: "auto",
|
page: "operation/reporting/graph_analytics",
|
||||||
title: titleExport
|
load_list_filters: 1
|
||||||
|
},
|
||||||
|
success: function(data) {
|
||||||
|
if (data) {
|
||||||
|
updateSelect("#export_form-0-0", data, 0);
|
||||||
|
$("#export-select").dialog({
|
||||||
|
resizable: true,
|
||||||
|
draggable: true,
|
||||||
|
modal: false,
|
||||||
|
closeOnEscape: true,
|
||||||
|
width: "auto",
|
||||||
|
title: titleExport
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -669,10 +800,10 @@ function exportCustomGraph() {
|
||||||
group
|
group
|
||||||
},
|
},
|
||||||
success: function(data) {
|
success: function(data) {
|
||||||
if (data) {
|
if (data === "created") {
|
||||||
confirmDialog({
|
confirmDialog({
|
||||||
title: titleExportConfirm,
|
title: titleExportConfirm,
|
||||||
message: data + " " + messageExportConfirm,
|
message: messageExportConfirm,
|
||||||
hideCancelButton: true,
|
hideCancelButton: true,
|
||||||
onAccept: function() {
|
onAccept: function() {
|
||||||
$(
|
$(
|
||||||
|
|
|
@ -2366,7 +2366,7 @@ $(document).ready(function() {
|
||||||
// Hidden tips modal.
|
// Hidden tips modal.
|
||||||
$(".window").css("display", "none");
|
$(".window").css("display", "none");
|
||||||
|
|
||||||
var type_about = "about_operation";
|
var type_about = "about";
|
||||||
if ($(this).attr("id") === "icon_about") {
|
if ($(this).attr("id") === "icon_about") {
|
||||||
type_about = "about";
|
type_about = "about";
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,8 @@ function show_option_dialog(settings) {
|
||||||
modal: {
|
modal: {
|
||||||
title: settings.title,
|
title: settings.title,
|
||||||
cancel: settings.btn_cancel,
|
cancel: settings.btn_cancel,
|
||||||
ok: settings.btn_text
|
ok: settings.btn_text,
|
||||||
|
overlay: true
|
||||||
},
|
},
|
||||||
onshow: {
|
onshow: {
|
||||||
page: settings.url,
|
page: settings.url,
|
||||||
|
@ -22,6 +23,12 @@ function show_option_dialog(settings) {
|
||||||
method: "updateDashboard",
|
method: "updateDashboard",
|
||||||
dataType: "json"
|
dataType: "json"
|
||||||
},
|
},
|
||||||
|
oncancel: {
|
||||||
|
reload: true
|
||||||
|
},
|
||||||
|
onclose: {
|
||||||
|
reload: true
|
||||||
|
},
|
||||||
ajax_callback: update_dashboard
|
ajax_callback: update_dashboard
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -458,6 +465,12 @@ function initialiceLayout(data) {
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
function configurationWidget(cellId, widgetId, size) {
|
function configurationWidget(cellId, widgetId, size) {
|
||||||
|
var reload = 0;
|
||||||
|
var overlay = false;
|
||||||
|
if (widgetId == 46) {
|
||||||
|
reload = 1;
|
||||||
|
overlay = true;
|
||||||
|
}
|
||||||
title = $("#hidden-widget_name_" + cellId).val();
|
title = $("#hidden-widget_name_" + cellId).val();
|
||||||
load_modal({
|
load_modal({
|
||||||
target: $("#modal-config-widget"),
|
target: $("#modal-config-widget"),
|
||||||
|
@ -466,7 +479,8 @@ function initialiceLayout(data) {
|
||||||
modal: {
|
modal: {
|
||||||
title: "Configure widget " + title,
|
title: "Configure widget " + title,
|
||||||
cancel: "Cancel",
|
cancel: "Cancel",
|
||||||
ok: "Ok"
|
ok: "Ok",
|
||||||
|
overlay: overlay
|
||||||
},
|
},
|
||||||
onshow: {
|
onshow: {
|
||||||
page: data.page,
|
page: data.page,
|
||||||
|
@ -484,8 +498,12 @@ function initialiceLayout(data) {
|
||||||
method: "saveWidgetIntoCell",
|
method: "saveWidgetIntoCell",
|
||||||
dataType: "json"
|
dataType: "json"
|
||||||
},
|
},
|
||||||
|
oncancel: {
|
||||||
|
reload: reload
|
||||||
|
},
|
||||||
ajax_callback: update_widget_to_cell,
|
ajax_callback: update_widget_to_cell,
|
||||||
onsubmitClose: 1
|
onsubmitClose: 1,
|
||||||
|
onsubmitReload: reload
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -528,7 +546,7 @@ function initialiceLayout(data) {
|
||||||
$(".add-widget").show();
|
$(".add-widget").show();
|
||||||
$(".new-widget-message").hide();
|
$(".new-widget-message").hide();
|
||||||
$("#container-layout").addClass("container-layout");
|
$("#container-layout").addClass("container-layout");
|
||||||
$("#add-widget").removeClass("invisible");
|
$("#add-widget").removeClass("invisible_important");
|
||||||
} else {
|
} else {
|
||||||
grid.movable(".grid-stack-item", false);
|
grid.movable(".grid-stack-item", false);
|
||||||
grid.resizable(".grid-stack-item", false);
|
grid.resizable(".grid-stack-item", false);
|
||||||
|
@ -537,7 +555,7 @@ function initialiceLayout(data) {
|
||||||
$(".add-widget").hide();
|
$(".add-widget").hide();
|
||||||
$(".new-widget-message").show();
|
$(".new-widget-message").show();
|
||||||
$("#container-layout").removeClass("container-layout");
|
$("#container-layout").removeClass("container-layout");
|
||||||
$("#add-widget").addClass("invisible");
|
$("#add-widget").addClass("invisible_important");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -948,6 +966,11 @@ function processTreeSearch(settings) {
|
||||||
recipient: $("div#tree-controller-recipient_" + settings.cellId),
|
recipient: $("div#tree-controller-recipient_" + settings.cellId),
|
||||||
detailRecipient: {
|
detailRecipient: {
|
||||||
render: function(element, data) {
|
render: function(element, data) {
|
||||||
|
let title = "Module information";
|
||||||
|
if ($(data).find("#tree_view_agent_detail-name").length > 0) {
|
||||||
|
title = "Agent information";
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
open: function() {
|
open: function() {
|
||||||
$("#module_details_window")
|
$("#module_details_window")
|
||||||
|
@ -958,7 +981,7 @@ function processTreeSearch(settings) {
|
||||||
resizable: true,
|
resizable: true,
|
||||||
draggable: true,
|
draggable: true,
|
||||||
modal: true,
|
modal: true,
|
||||||
title: "Info module",
|
title: title,
|
||||||
overlay: {
|
overlay: {
|
||||||
opacity: 0.5,
|
opacity: 0.5,
|
||||||
background: "black"
|
background: "black"
|
||||||
|
|
|
@ -1783,3 +1783,49 @@ function openEvents(severity) {
|
||||||
$('input[name="filter[severity]"]').val(severity);
|
$('input[name="filter[severity]"]').val(severity);
|
||||||
$("#event_redirect").submit();
|
$("#event_redirect").submit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load Asteroids game.
|
||||||
|
$(window).on("load", function() {
|
||||||
|
let counter = 0;
|
||||||
|
$("#button-sound_events_button")
|
||||||
|
.off("click")
|
||||||
|
.on("click", function(e) {
|
||||||
|
counter++;
|
||||||
|
let flagEasternEgg = $("#flagEasternEgg").val();
|
||||||
|
if (counter == 12 && flagEasternEgg == true) {
|
||||||
|
$("#modal-asteroids")
|
||||||
|
.dialog({
|
||||||
|
title: "Asteroids",
|
||||||
|
resizable: true,
|
||||||
|
modal: true,
|
||||||
|
width: 900,
|
||||||
|
height: 700,
|
||||||
|
open: function() {
|
||||||
|
$.ajax({
|
||||||
|
method: "post",
|
||||||
|
url: getUrlAjax(),
|
||||||
|
data: {
|
||||||
|
page: "include/ajax/events",
|
||||||
|
playAsteroids: 1
|
||||||
|
},
|
||||||
|
dataType: "html",
|
||||||
|
success: function(data) {
|
||||||
|
$("#modal-asteroids").html(data);
|
||||||
|
$(".ui-widget-content").css("background", "#222");
|
||||||
|
$(".ui-dialog-title").css("color", "#fff");
|
||||||
|
},
|
||||||
|
error: function(error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
close: function() {
|
||||||
|
counter = 0;
|
||||||
|
$(".ui-widget-content").css("background", "#fff");
|
||||||
|
$(".ui-dialog-title").css("color", "rgb(51, 51, 51)");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -160,6 +160,7 @@ function configure_modules_form() {
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#id_module_group").val(data["id_module_group"]);
|
$("#id_module_group").val(data["id_module_group"]);
|
||||||
|
$("#id_module_group").trigger("change");
|
||||||
|
|
||||||
if (data["history_data"]) $("#checkbox-history_data").check();
|
if (data["history_data"]) $("#checkbox-history_data").check();
|
||||||
else $("#checkbox-history_data").uncheck();
|
else $("#checkbox-history_data").uncheck();
|
||||||
|
|
|
@ -105,7 +105,16 @@ function load_modal(settings) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.modal.overlay === true) {
|
if (settings.modal.overlay === true) {
|
||||||
$("body").append("<div id='modal_overlay'class='ui-widget-overlay'></div>");
|
var extraClass = "";
|
||||||
|
if (typeof settings.modal.overlayExtraClass !== "undefined") {
|
||||||
|
extraClass = " " + settings.modal.overlayExtraClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
$("body").append(
|
||||||
|
"<div id='modal_overlay'class='ui-widget-overlay" +
|
||||||
|
extraClass +
|
||||||
|
"'></div>"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.beforeClose == undefined) {
|
if (settings.beforeClose == undefined) {
|
||||||
|
@ -165,6 +174,8 @@ function load_modal(settings) {
|
||||||
if (typeof settings.oncancel.confirm == "function") {
|
if (typeof settings.oncancel.confirm == "function") {
|
||||||
//receive function
|
//receive function
|
||||||
settings.oncancel.confirm(cancelModal);
|
settings.oncancel.confirm(cancelModal);
|
||||||
|
} else if (settings.oncancel.reload == true) {
|
||||||
|
location.reload();
|
||||||
} else if (settings.oncancel != undefined) {
|
} else if (settings.oncancel != undefined) {
|
||||||
cancelModal();
|
cancelModal();
|
||||||
}
|
}
|
||||||
|
@ -344,6 +355,13 @@ function load_modal(settings) {
|
||||||
AJAX_RUNNING = 0;
|
AJAX_RUNNING = 0;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (
|
||||||
|
settings.onsubmitReload != undefined &&
|
||||||
|
settings.onsubmitReload == true
|
||||||
|
) {
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
AJAX_RUNNING = 0;
|
AJAX_RUNNING = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1056,6 +1056,7 @@ class Manager implements PublicLogin
|
||||||
'name' => $name,
|
'name' => $name,
|
||||||
'id_user' => $id_user,
|
'id_user' => $id_user,
|
||||||
'id_group' => $id_group,
|
'id_group' => $id_group,
|
||||||
|
'cells' => 1,
|
||||||
'cells_slideshow' => $slideshow,
|
'cells_slideshow' => $slideshow,
|
||||||
'active' => $favourite,
|
'active' => $favourite,
|
||||||
'date_range' => $dateRange,
|
'date_range' => $dateRange,
|
||||||
|
@ -1367,6 +1368,7 @@ class Manager implements PublicLogin
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
$items = \get_parameter('items', []);
|
$items = \get_parameter('items', []);
|
||||||
|
$totalCells = 0;
|
||||||
|
|
||||||
// Class Dashboard.
|
// Class Dashboard.
|
||||||
if (empty($items) === false) {
|
if (empty($items) === false) {
|
||||||
|
@ -1398,8 +1400,15 @@ class Manager implements PublicLogin
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_array($items) === true) {
|
||||||
|
$totalCells = count($items);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$values = ['cells' => $totalCells];
|
||||||
|
$this->put($values);
|
||||||
|
|
||||||
echo json_encode($result);
|
echo json_encode($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -246,6 +246,10 @@ class EventsListWidget extends Widget
|
||||||
$values['groupRecursion'] = $decoder['groupRecursion'];
|
$values['groupRecursion'] = $decoder['groupRecursion'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($decoder['secondaryGroup']) === true) {
|
||||||
|
$values['secondaryGroup'] = $decoder['secondaryGroup'];
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($decoder['customFilter']) === true) {
|
if (isset($decoder['customFilter']) === true) {
|
||||||
$values['customFilter'] = $decoder['customFilter'];
|
$values['customFilter'] = $decoder['customFilter'];
|
||||||
}
|
}
|
||||||
|
@ -456,6 +460,18 @@ class EventsListWidget extends Widget
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// Secondary group.
|
||||||
|
$inputs['inputs']['row2'][] = [
|
||||||
|
'label' => \__('Secondary group'),
|
||||||
|
'arguments' => [
|
||||||
|
'type' => 'switch',
|
||||||
|
'name' => 'secondaryGroup',
|
||||||
|
'class' => 'event-widget-input',
|
||||||
|
'value' => $values['secondaryGroup'],
|
||||||
|
'return' => true,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
// Group recursion.
|
// Group recursion.
|
||||||
$inputs['inputs']['row2'][] = [
|
$inputs['inputs']['row2'][] = [
|
||||||
'label' => \__('Group recursion'),
|
'label' => \__('Group recursion'),
|
||||||
|
@ -537,6 +553,7 @@ class EventsListWidget extends Widget
|
||||||
$values['groupId'] = \get_parameter_switch('groupId', []);
|
$values['groupId'] = \get_parameter_switch('groupId', []);
|
||||||
$values['tagsId'] = \get_parameter_switch('tagsId', []);
|
$values['tagsId'] = \get_parameter_switch('tagsId', []);
|
||||||
$values['groupRecursion'] = \get_parameter_switch('groupRecursion', 0);
|
$values['groupRecursion'] = \get_parameter_switch('groupRecursion', 0);
|
||||||
|
$values['secondaryGroup'] = \get_parameter('secondaryGroup', 0);
|
||||||
$values['customFilter'] = \get_parameter('customFilter', -1);
|
$values['customFilter'] = \get_parameter('customFilter', -1);
|
||||||
$values['columns_events_widget'] = \get_parameter('columns_events_widget', []);
|
$values['columns_events_widget'] = \get_parameter('columns_events_widget', []);
|
||||||
|
|
||||||
|
@ -721,6 +738,7 @@ class EventsListWidget extends Widget
|
||||||
$this->values['limit'] = $config['block_size'];
|
$this->values['limit'] = $config['block_size'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$filter['search_secondary_groups'] = $this->values['secondaryGroup'];
|
||||||
// Print datatable.
|
// Print datatable.
|
||||||
$output .= ui_print_datatable(
|
$output .= ui_print_datatable(
|
||||||
[
|
[
|
||||||
|
|
|
@ -293,6 +293,8 @@ class GroupsStatusWidget extends Widget
|
||||||
(bool) $this->values['groupRecursion']
|
(bool) $this->values['groupRecursion']
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$style = 'min-width:200px; min-height:460px;';
|
||||||
|
|
||||||
$data = '<div class="widget-groups-status"><span>';
|
$data = '<div class="widget-groups-status"><span>';
|
||||||
$data .= ui_print_group_icon(
|
$data .= ui_print_group_icon(
|
||||||
$this->values['groupId'],
|
$this->values['groupId'],
|
||||||
|
@ -541,9 +543,9 @@ class GroupsStatusWidget extends Widget
|
||||||
$table->data[1][0] = __('Not agents in this group');
|
$table->data[1][0] = __('Not agents in this group');
|
||||||
$data .= html_print_table($table, true);
|
$data .= html_print_table($table, true);
|
||||||
$data .= '</div>';
|
$data .= '</div>';
|
||||||
|
$style .= 'justify-content: start; margin-top: 20px';
|
||||||
}
|
}
|
||||||
|
|
||||||
$style = 'min-width:200px; min-height:460px;';
|
|
||||||
$output = '<div class="container-center" style="'.$style.'">';
|
$output = '<div class="container-center" style="'.$style.'">';
|
||||||
$output .= $data;
|
$output .= $data;
|
||||||
$output .= '</div>';
|
$output .= '</div>';
|
||||||
|
|
|
@ -177,6 +177,9 @@ class InventoryWidget extends Widget
|
||||||
|
|
||||||
// Must be configured before using.
|
// Must be configured before using.
|
||||||
$this->configurationRequired = false;
|
$this->configurationRequired = false;
|
||||||
|
if (isset($this->values['idGroup']) === false) {
|
||||||
|
$this->configurationRequired = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -296,9 +299,12 @@ class InventoryWidget extends Widget
|
||||||
];
|
];
|
||||||
|
|
||||||
$fields = [];
|
$fields = [];
|
||||||
|
|
||||||
array_unshift($fields, __('All'));
|
array_unshift($fields, __('All'));
|
||||||
|
|
||||||
|
if (isset($values['inventoryModuleId']) === false) {
|
||||||
|
$values['inventoryModuleId'] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
$inputs[] = [
|
$inputs[] = [
|
||||||
'label' => __('Module'),
|
'label' => __('Module'),
|
||||||
'arguments' => [
|
'arguments' => [
|
||||||
|
@ -316,31 +322,6 @@ class InventoryWidget extends Widget
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
// Agent select.
|
|
||||||
if ($is_metaconsole === false) {
|
|
||||||
$agents = [];
|
|
||||||
$sql = 'SELECT id_agente, nombre FROM tagente';
|
|
||||||
if ($inventory_id_group > 0) {
|
|
||||||
$sql .= ' WHERE id_grupo = '.$inventory_id_group;
|
|
||||||
} else {
|
|
||||||
$user_groups = implode(',', array_keys(users_get_groups($config['id_user'])));
|
|
||||||
|
|
||||||
// Avoid errors if there are no groups.
|
|
||||||
if (empty($user_groups) === true) {
|
|
||||||
$user_groups = '"0"';
|
|
||||||
}
|
|
||||||
|
|
||||||
$sql .= ' WHERE id_grupo IN ('.$user_groups.')';
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = db_get_all_rows_sql($sql);
|
|
||||||
if ($result) {
|
|
||||||
foreach ($result as $row) {
|
|
||||||
$agents[$row['id_agente']] = $row['nombre'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Date filter.
|
// Date filter.
|
||||||
if (is_metaconsole() === false) {
|
if (is_metaconsole() === false) {
|
||||||
$inputs[] = [
|
$inputs[] = [
|
||||||
|
|
|
@ -252,7 +252,7 @@ class SecurityHardening extends Widget
|
||||||
];
|
];
|
||||||
|
|
||||||
$inputs[] = [
|
$inputs[] = [
|
||||||
'label' => __('Ingore skipped'),
|
'label' => __('Ignore skipped'),
|
||||||
'id' => 'row_ignore_skipped',
|
'id' => 'row_ignore_skipped',
|
||||||
'class' => 'row_input',
|
'class' => 'row_input',
|
||||||
'arguments' => [
|
'arguments' => [
|
||||||
|
@ -274,9 +274,9 @@ class SecurityHardening extends Widget
|
||||||
'name' => 'range',
|
'name' => 'range',
|
||||||
'type' => 'date_range',
|
'type' => 'date_range',
|
||||||
'selected' => 'chose_range',
|
'selected' => 'chose_range',
|
||||||
'date_init' => date('Y-m-d', $values['date_init']),
|
'date_init' => date('Y/m/d', $values['date_init']),
|
||||||
'time_init' => date('H:i:s', $values['date_init']),
|
'time_init' => date('H:i:s', $values['date_init']),
|
||||||
'date_end' => date('Y-m-d', $values['date_end']),
|
'date_end' => date('Y/m/d', $values['date_end']),
|
||||||
'time_end' => date('H:i:s', $values['date_end']),
|
'time_end' => date('H:i:s', $values['date_end']),
|
||||||
'return' => true,
|
'return' => true,
|
||||||
],
|
],
|
||||||
|
|
|
@ -436,12 +436,16 @@ class Agents extends Element
|
||||||
$percentages = [];
|
$percentages = [];
|
||||||
$total = array_sum($data);
|
$total = array_sum($data);
|
||||||
foreach ($data as $key => $value) {
|
foreach ($data as $key => $value) {
|
||||||
$percentage = (($value / $total) * 100);
|
if ($total > 0) {
|
||||||
if ($percentage < 1 && $percentage > 0) {
|
$percentage = (($value / $total) * 100);
|
||||||
$percentage = 1;
|
if ($percentage < 1 && $percentage > 0) {
|
||||||
}
|
$percentage = 1;
|
||||||
|
}
|
||||||
|
|
||||||
$percentages[$key] = format_numeric($percentage, 0);
|
$percentages[$key] = format_numeric($percentage, 0);
|
||||||
|
} else {
|
||||||
|
$percentages[$key] = '0%';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = $percentages;
|
$data = $percentages;
|
||||||
|
|
|
@ -113,8 +113,9 @@ class Groups extends Element
|
||||||
$id_groups = implode(',', $id_groups);
|
$id_groups = implode(',', $id_groups);
|
||||||
|
|
||||||
$modules = modules_get_modules_in_group($id_groups);
|
$modules = modules_get_modules_in_group($id_groups);
|
||||||
$total_groups = count($modules);
|
$total_groups = ($modules !== false) ? count($modules) : 0;
|
||||||
if ($total_groups === 0) {
|
if ($total_groups === 0) {
|
||||||
|
include_once $config['homedir'].'/include/functions_graph.php';
|
||||||
return graph_nodata_image(['width' => '400']);
|
return graph_nodata_image(['width' => '400']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -484,7 +485,7 @@ class Groups extends Element
|
||||||
$y = 0;
|
$y = 0;
|
||||||
$cont = 1;
|
$cont = 1;
|
||||||
foreach ($groups as $key => $value) {
|
foreach ($groups as $key => $value) {
|
||||||
if ($value['_name_'] === 'All') {
|
if ($value['_name_'] === __('All')) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -156,13 +156,15 @@ class ScheduledDowntime extends Element
|
||||||
'cron_interval_from',
|
'cron_interval_from',
|
||||||
'cron_interval_to',
|
'cron_interval_to',
|
||||||
];
|
];
|
||||||
|
$groups = implode(',', array_keys(users_get_groups($config['user'])));
|
||||||
$columns_str = implode(',', $columns);
|
$columns_str = implode(',', $columns);
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
'SELECT %s
|
'SELECT %s
|
||||||
FROM tplanned_downtime
|
FROM tplanned_downtime
|
||||||
|
WHERE id_group IN (%s)
|
||||||
%s %s',
|
%s %s',
|
||||||
$columns_str,
|
$columns_str,
|
||||||
|
$groups,
|
||||||
$order,
|
$order,
|
||||||
$pagination,
|
$pagination,
|
||||||
);
|
);
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Name: Default theme
|
||||||
|
* Pandora Stylesheet
|
||||||
|
*
|
||||||
|
* @category Stylesheet
|
||||||
|
* @package Pandora FMS
|
||||||
|
* @subpackage Community
|
||||||
|
* @version 1.0.0
|
||||||
|
* @license See below
|
||||||
|
*
|
||||||
|
* ______ ___ _______ _______ ________
|
||||||
|
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
|
||||||
|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
|
||||||
|
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
|
||||||
|
*
|
||||||
|
* ============================================================================
|
||||||
|
* Copyright (c) 2005-2023 Pandora FMS
|
||||||
|
* Please see https://pandorafms.com for full contribution list
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation for version 2.
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
* ============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
div#asteroids {
|
||||||
|
background-color: #000;
|
||||||
|
color: #fff;
|
||||||
|
margin: 50px auto;
|
||||||
|
width: 640px;
|
||||||
|
border: 1px solid #fff;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#asteroids > * {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#asteroids > div {
|
||||||
|
font-family: "System", monospace;
|
||||||
|
font-size: 11px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#asteroids > div > span {
|
||||||
|
float: right;
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#instructions {
|
||||||
|
width: 640px;
|
||||||
|
margin: 20px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
#div-filtered-module-group-modules,
|
||||||
|
#div-filtered-module-module-group-modules,
|
||||||
|
#div-filtered-module-agents-modules,
|
||||||
|
#div-filtered-module-modules-modules {
|
||||||
|
width: 37% !important;
|
||||||
|
}
|
||||||
|
#div-filtered-module-modules-modules select {
|
||||||
|
width: 100% !important;
|
||||||
|
max-width: 100% !important;
|
||||||
|
}
|
||||||
|
#select_multiple_modules_filtered > div > div > .select2 {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
#select_multiple_modules_filtered > div {
|
||||||
|
flex-wrap: nowrap !important;
|
||||||
|
}
|
|
@ -129,6 +129,12 @@ table#table_events > tbody > tr > td.column-estado {
|
||||||
padding: 0px !important;
|
padding: 0px !important;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
@-moz-document url-prefix() {
|
||||||
|
table#table_events > tbody > tr,
|
||||||
|
table#table_events > tbody > tr > td {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
.sorting_desc {
|
.sorting_desc {
|
||||||
background: url(../../images/sort_down_green.png) no-repeat;
|
background: url(../../images/sort_down_green.png) no-repeat;
|
||||||
background-position-x: left;
|
background-position-x: left;
|
||||||
|
@ -544,7 +550,7 @@ div#main_pure:has(.events-pure) {
|
||||||
margin-bottom: 50px !important;
|
margin-bottom: 50px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
div#sunburst > svg {
|
#main > #container_servicemap > div#sunburst > svg {
|
||||||
width: 750px;
|
width: 750px;
|
||||||
height: 750px;
|
height: 750px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#welcome_form li.hole {
|
#welcome_form li.hole {
|
||||||
margin-bottom: 0.8em;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#welcome_form li.extra {
|
#welcome_form li.extra {
|
||||||
|
@ -98,17 +98,424 @@
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
button.buttonButton.onlyIcon.fail,
|
|
||||||
button.submitButton.onlyIcon.fail {
|
|
||||||
mask: url(../../images/fail@svg.svg) no-repeat center / contain;
|
|
||||||
-webkit-mask: url(../../images/fail@svg.svg) no-repeat center / contain;
|
|
||||||
}
|
|
||||||
|
|
||||||
.select2-container .select2-container--default .select2-container--open {
|
.select2-container .select2-container--default .select2-container--open {
|
||||||
z-index: 2000;
|
z-index: 2000;
|
||||||
}
|
}
|
||||||
|
|
||||||
#div_wizard_agent > .select2 {
|
.ui-widget-overlay.welcome-overlay {
|
||||||
width: 75% !important;
|
background-color: rgba(19, 23, 39, 0.8) !important;
|
||||||
max-width: 75% !important;
|
opacity: 1 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ui-widget.ui-widget-content[aria-describedby="welcome_modal_window"] {
|
||||||
|
background-color: #131727;
|
||||||
|
border-radius: 8px !important;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ui-widget.ui-widget-content[aria-describedby="welcome_modal_window"] * {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ui-widget.ui-widget-content[aria-describedby="welcome_modal_window"]
|
||||||
|
.ui-dialog-titlebar {
|
||||||
|
margin: 0;
|
||||||
|
padding-top: 25px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ui-widget.ui-widget-content[aria-describedby="welcome_modal_window"]
|
||||||
|
.ui-dialog-title {
|
||||||
|
font-size: 40px;
|
||||||
|
line-height: 48px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ui-widget.ui-widget-content[aria-describedby="welcome_modal_window"]
|
||||||
|
.ui-dialog-titlebar-close {
|
||||||
|
background-color: #95a3bf !important;
|
||||||
|
right: 20px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window {
|
||||||
|
padding: 0px 0px 0px 20px;
|
||||||
|
display: flex !important;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
align-items: flex-end;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window[style=""] {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard * {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard li#li-div_diagnosis,
|
||||||
|
div#welcome_modal_window .wizard li#li-div_task_todo,
|
||||||
|
div#welcome_modal_window .wizard li#li-div_wizard_agent {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* div#welcome_modal_window .wizard li#li-div_diagnosis {
|
||||||
|
top: 0;
|
||||||
|
position: absolute;
|
||||||
|
} */
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard li#li-div_diagnosis label {
|
||||||
|
font-size: 17px;
|
||||||
|
line-height: 20px;
|
||||||
|
color: #c1ccdc;
|
||||||
|
padding: 20px 0px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window
|
||||||
|
.wizard
|
||||||
|
li:not(:nth-child(1)):not(:nth-last-child(1)):not(:nth-last-child(2)) {
|
||||||
|
padding: 14px 15px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background-color: rgba(0, 0, 0, 0.2);
|
||||||
|
border: 1px solid #c1ccdc;
|
||||||
|
border-radius: 6px;
|
||||||
|
width: 480px;
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window
|
||||||
|
.wizard
|
||||||
|
li:not(:nth-child(1)):not(:nth-last-child(1)):not(:nth-last-child(2))
|
||||||
|
label {
|
||||||
|
font-size: 17px;
|
||||||
|
line-height: 20px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window
|
||||||
|
.wizard
|
||||||
|
li:not(:nth-child(1)):not(:nth-last-child(1)):not(:nth-last-child(2))
|
||||||
|
label {
|
||||||
|
font-size: 17px;
|
||||||
|
line-height: 20px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard .status {
|
||||||
|
background-color: #c1ccdc;
|
||||||
|
opacity: 0.2;
|
||||||
|
display: block;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
margin-right: 15px;
|
||||||
|
border-radius: 14px / 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard li.row_green .status {
|
||||||
|
background-color: #82b92e;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard .fail.onlyIcon.buttonButton {
|
||||||
|
background-color: unset;
|
||||||
|
width: unset !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard .fail.onlyIcon.buttonButton span {
|
||||||
|
color: #26b1b5;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard .fail.onlyIcon.buttonButton:hover span {
|
||||||
|
color: #3bdce1;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard #li-div_all_correct {
|
||||||
|
height: 100%;
|
||||||
|
margin-bottom: 145px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard #li-div_all_correct * {
|
||||||
|
font-size: 10pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard #li-div_task_todo {
|
||||||
|
padding-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard #li-div_task_todo label {
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 16px;
|
||||||
|
color: #c1ccdc;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard #li-div_wizard_agent {
|
||||||
|
width: 480px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard #li-div_wizard_agent > div {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard #li-div_wizard_agent .select2-selection {
|
||||||
|
background-color: #f6f7fb !important;
|
||||||
|
border: 1px solid #c0ccdc !important;
|
||||||
|
border-radius: 6px !important;
|
||||||
|
width: 290px;
|
||||||
|
height: 42px !important;
|
||||||
|
font-weight: normal !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard #li-div_wizard_agent .select2 {
|
||||||
|
width: 290px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window
|
||||||
|
.wizard
|
||||||
|
#li-div_wizard_agent
|
||||||
|
.select2-selection
|
||||||
|
.select2-selection__rendered {
|
||||||
|
font-weight: normal !important;
|
||||||
|
line-height: 38px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard #button-go_wizard {
|
||||||
|
background-color: #82b92e;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding-top: 11px;
|
||||||
|
padding-bottom: 11px;
|
||||||
|
padding-left: 38px;
|
||||||
|
height: 42px;
|
||||||
|
width: 175px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard #button-go_wizard:hover {
|
||||||
|
background-color: #8ac531;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard #button-go_wizard span {
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 20px;
|
||||||
|
text-wrap: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#welcome_modal_window .wizard #button-go_wizard div.next {
|
||||||
|
mask: url(../../images/check-white.svg) no-repeat center / contain;
|
||||||
|
-webkit-mask: url(../../images/check-white.svg) no-repeat center / contain;
|
||||||
|
background-color: #fff !important;
|
||||||
|
height: 12px;
|
||||||
|
margin-left: 12px;
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ui-widget.ui-widget-content[aria-describedby="welcome_modal_window"]
|
||||||
|
.ui-dialog-buttonpane.ui-widget-content {
|
||||||
|
background-color: #131727;
|
||||||
|
padding: 10px 10px 10px 20px !important;
|
||||||
|
margin: 0;
|
||||||
|
border-top: 1px solid #8190ad;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ui-widget.ui-widget-content[aria-describedby="welcome_modal_window"]
|
||||||
|
.ui-dialog-buttonpane.ui-widget-content
|
||||||
|
.ui-dialog-buttonset {
|
||||||
|
justify-content: space-between;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ui-widget.ui-widget-content[aria-describedby="welcome_modal_window"]
|
||||||
|
.welcome-wizard-buttons,
|
||||||
|
div.ui-widget.ui-widget-content[aria-describedby="welcome_modal_window"]
|
||||||
|
.welcome-wizard-buttons
|
||||||
|
label {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ui-widget.ui-widget-content[aria-describedby="welcome_modal_window"]
|
||||||
|
.welcome-wizard-buttons
|
||||||
|
label {
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 18px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ui-widget.ui-widget-content[aria-describedby="welcome_modal_window"]
|
||||||
|
.welcome-wizard-buttons
|
||||||
|
label
|
||||||
|
input[type="checkbox"] {
|
||||||
|
margin-right: 10px;
|
||||||
|
width: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ui-widget.ui-widget-content[aria-describedby="welcome_modal_window"]
|
||||||
|
.ui-dialog-buttonpane.ui-widget-content
|
||||||
|
.ui-dialog-buttonset {
|
||||||
|
justify-content: space-between;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ui-widget.ui-widget-content[aria-describedby="welcome_modal_window"]
|
||||||
|
.ui-dialog-buttonpane.ui-widget-content
|
||||||
|
button {
|
||||||
|
background-color: #313b62;
|
||||||
|
box-shadow: none;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 8px;
|
||||||
|
height: 42px;
|
||||||
|
width: unset;
|
||||||
|
padding: 10px 20px;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ui-widget.ui-widget-content[aria-describedby="welcome_modal_window"]
|
||||||
|
.ui-dialog-buttonpane.ui-widget-content
|
||||||
|
button:hover {
|
||||||
|
background-color: #384372;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-wizard-right-content {
|
||||||
|
background-image: linear-gradient(225deg, #731dd8 0%, #2eb9b8 100%);
|
||||||
|
border-radius: 100px 0 0;
|
||||||
|
width: 432px;
|
||||||
|
height: 375px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-wizard-right-content img {
|
||||||
|
width: 348px;
|
||||||
|
height: 260px;
|
||||||
|
position: absolute;
|
||||||
|
right: 43px;
|
||||||
|
bottom: 65px;
|
||||||
|
filter: drop-shadow(0 0 10px #0000005b);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Background bubbles */
|
||||||
|
.welcome-circles {
|
||||||
|
overflow: hidden;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 8px;
|
||||||
|
width: 430px;
|
||||||
|
height: 373px;
|
||||||
|
overflow: hidden;
|
||||||
|
border-top-left-radius: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-circles li {
|
||||||
|
position: absolute;
|
||||||
|
display: block;
|
||||||
|
list-style: none;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
animation: animate 10s linear infinite;
|
||||||
|
bottom: -150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-circles li:nth-child(1) {
|
||||||
|
left: 25%;
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
animation-delay: 0s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-circles li:nth-child(2) {
|
||||||
|
left: 10%;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
animation-delay: 2s;
|
||||||
|
animation-duration: 12s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-circles li:nth-child(3) {
|
||||||
|
left: 70%;
|
||||||
|
width: 15px;
|
||||||
|
height: 15px;
|
||||||
|
animation-delay: 4s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-circles li:nth-child(4) {
|
||||||
|
left: 40%;
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
animation-delay: 3s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-circles li:nth-child(5) {
|
||||||
|
left: 65%;
|
||||||
|
width: 15px;
|
||||||
|
height: 15px;
|
||||||
|
animation-delay: 0s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-circles li:nth-child(6) {
|
||||||
|
left: 75%;
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
animation-delay: 3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-circles li:nth-child(7) {
|
||||||
|
left: 35%;
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
animation-delay: 7s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-circles li:nth-child(8) {
|
||||||
|
left: 50%;
|
||||||
|
width: 25px;
|
||||||
|
height: 25px;
|
||||||
|
animation-delay: 15s;
|
||||||
|
animation-duration: 45s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-circles li:nth-child(9) {
|
||||||
|
left: 20%;
|
||||||
|
width: 15px;
|
||||||
|
height: 15px;
|
||||||
|
animation-delay: 2s;
|
||||||
|
animation-duration: 35s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-circles li:nth-child(10) {
|
||||||
|
left: 85%;
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
animation-delay: 0s;
|
||||||
|
animation-duration: 11s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes animate {
|
||||||
|
0% {
|
||||||
|
transform: translateY(0) rotate(0deg);
|
||||||
|
opacity: 1;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: translateY(-1000px) rotate(720deg);
|
||||||
|
opacity: 0;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -481,6 +481,11 @@ select:-internal-list-box {
|
||||||
max-width: 120px;
|
max-width: 120px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.w130px {
|
||||||
|
width: 130px;
|
||||||
|
max-width: 130px;
|
||||||
|
}
|
||||||
|
|
||||||
.w200px {
|
.w200px {
|
||||||
width: 200px;
|
width: 200px;
|
||||||
max-width: 200px;
|
max-width: 200px;
|
||||||
|
@ -598,6 +603,10 @@ select:-internal-list-box {
|
||||||
min-width: 120px;
|
min-width: 120px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mw130px {
|
||||||
|
min-width: 130px;
|
||||||
|
}
|
||||||
|
|
||||||
.mw180px {
|
.mw180px {
|
||||||
min-width: 180px;
|
min-width: 180px;
|
||||||
}
|
}
|
||||||
|
@ -985,6 +994,12 @@ select:-internal-list-box {
|
||||||
justify-content: flex-start !important;
|
justify-content: flex-start !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.flex-column-start {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
.padding-2 {
|
.padding-2 {
|
||||||
padding: 2em;
|
padding: 2em;
|
||||||
}
|
}
|
||||||
|
@ -5530,6 +5545,11 @@ input:checked + .p-slider:before {
|
||||||
color: #4d4d4d;
|
color: #4d4d4d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.show-profiles {
|
||||||
|
position: absolute;
|
||||||
|
margin-left: 15%;
|
||||||
|
}
|
||||||
|
|
||||||
/* Tables to upload files */
|
/* Tables to upload files */
|
||||||
#table_filemanager tr:first-child th span {
|
#table_filemanager tr:first-child th span {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
@ -7056,6 +7076,10 @@ div.graph div.legend table {
|
||||||
margin: 0 1em 0 2em;
|
margin: 0 1em 0 2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mrgn_top_btn_10px_imp {
|
||||||
|
margin: 10px 0 10px 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MARGIN LEFT
|
* MARGIN LEFT
|
||||||
*/
|
*/
|
||||||
|
@ -7217,6 +7241,10 @@ div.graph div.legend table {
|
||||||
margin-top: 0px;
|
margin-top: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mrgn_top_mod_0px {
|
||||||
|
margin-top: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
.mrgn_top_5px {
|
.mrgn_top_5px {
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
}
|
}
|
||||||
|
@ -11843,7 +11871,7 @@ p.trademark-copyright {
|
||||||
}
|
}
|
||||||
|
|
||||||
.show-hide-pass {
|
.show-hide-pass {
|
||||||
position: fixed;
|
position: absolute;
|
||||||
border: 0;
|
border: 0;
|
||||||
outline: none;
|
outline: none;
|
||||||
margin-left: -50px;
|
margin-left: -50px;
|
||||||
|
@ -12062,6 +12090,10 @@ div.relative > div > div#ui-datepicker-div {
|
||||||
left: 5px !important;
|
left: 5px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ui-datepicker-div .ui-datepicker-header {
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
.ui-widget-overlay {
|
.ui-widget-overlay {
|
||||||
background: #aaa;
|
background: #aaa;
|
||||||
opacity: 0.3 !important;
|
opacity: 0.3 !important;
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -131,7 +131,7 @@
|
||||||
<div style='padding-bottom: 50px'>
|
<div style='padding-bottom: 50px'>
|
||||||
<?php
|
<?php
|
||||||
$version = '7.0NG.775';
|
$version = '7.0NG.775';
|
||||||
$build = '240117';
|
$build = '240119';
|
||||||
$banner = "v$version Build $build";
|
$banner = "v$version Build $build";
|
||||||
error_reporting(0);
|
error_reporting(0);
|
||||||
|
|
||||||
|
|
|
@ -1061,19 +1061,20 @@ $buttons .= html_print_button(
|
||||||
],
|
],
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
if (check_acl($config['id_user'], 0, 'AW')) {
|
||||||
$buttons .= html_print_button(
|
$buttons .= html_print_button(
|
||||||
__('Manage filter'),
|
__('Manage filter'),
|
||||||
'save-filter',
|
'save-filter',
|
||||||
false,
|
false,
|
||||||
'',
|
'',
|
||||||
[
|
[
|
||||||
'icon' => 'wand',
|
'icon' => 'wand',
|
||||||
'mode' => 'mini secondary',
|
'mode' => 'mini secondary',
|
||||||
'class' => 'float-left margin-right-2 sub wand',
|
'class' => 'float-left margin-right-2 sub wand',
|
||||||
],
|
],
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
$filters .= html_print_div(
|
$filters .= html_print_div(
|
||||||
[
|
[
|
||||||
|
@ -1450,7 +1451,12 @@ if ($autosearch) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($count_modules > $config['block_size']) {
|
if ($count_modules > $config['block_size']) {
|
||||||
$tablePagination = ui_pagination($count_modules, false, $offset, 0, true, 'offset', false);
|
$show_count = false;
|
||||||
|
if (is_metaconsole() === true) {
|
||||||
|
$show_count = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$tablePagination = ui_pagination($count_modules, false, $offset, 0, true, 'offset', $show_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get number of elements of the pagination.
|
// Get number of elements of the pagination.
|
||||||
|
@ -2346,11 +2352,19 @@ if (empty($result) === false) {
|
||||||
array_push($table->data, $data);
|
array_push($table->data, $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '<div class="total_pages">'.sprintf(__('Total items: %s'), $count).'</div>';
|
if (!defined('METACONSOLE')) {
|
||||||
|
echo '<div class="total_pages">'.sprintf(__('Total items: %s'), $count).'</div>';
|
||||||
|
}
|
||||||
|
|
||||||
html_print_table($table);
|
html_print_table($table);
|
||||||
|
|
||||||
if ($count_modules > $config['block_size']) {
|
if ($count_modules > $config['block_size']) {
|
||||||
$tablePagination = ui_pagination($count_modules, false, $offset, 0, true, 'offset', false);
|
$show_count = false;
|
||||||
|
if (is_metaconsole() === true) {
|
||||||
|
$show_count = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$tablePagination = ui_pagination($count_modules, false, $offset, 0, true, 'offset', $show_count);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ui_print_info_message(['no_close' => true, 'message' => __('Please apply a filter to display the data')]);
|
ui_print_info_message(['no_close' => true, 'message' => __('Please apply a filter to display the data')]);
|
||||||
|
|
|
@ -641,32 +641,17 @@ if (is_ajax() === true) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($user_timezone) === true) {
|
if (empty($user_timezone) === true) {
|
||||||
if (date_default_timezone_get() !== $config['timezone']) {
|
$user_timezone = $config['timezone'];
|
||||||
$timezone = timezone_open(date_default_timezone_get());
|
if (empty($user_timezone) === true) {
|
||||||
$datetime_eur = date_create('now', timezone_open($config['timezone']));
|
$user_timezone = date_default_timezone_get();
|
||||||
$dif = timezone_offset_get($timezone, $datetime_eur);
|
|
||||||
date($config['date_format'], $dif);
|
|
||||||
if (!date('I')) {
|
|
||||||
// For summer -3600sec.
|
|
||||||
$dif -= 3600;
|
|
||||||
}
|
|
||||||
|
|
||||||
$total_sec = strtotime($tmp->timestamp);
|
|
||||||
$total_sec += $dif;
|
|
||||||
$last_contact = date($config['date_format'], $total_sec);
|
|
||||||
$last_contact_value = ui_print_timestamp($last_contact, true, $options);
|
|
||||||
} else {
|
|
||||||
$title = date($config['date_format'], strtotime($tmp->timestamp));
|
|
||||||
$value = ui_print_timestamp(strtotime($tmp->timestamp), true, $options);
|
|
||||||
$last_contact_value = '<span title="'.$title.'">'.$value.'</span>';
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
date_default_timezone_set($user_timezone);
|
|
||||||
$title = date($config['date_format'], strtotime($tmp->timestamp));
|
|
||||||
$value = ui_print_timestamp(strtotime($tmp->timestamp), true, $options);
|
|
||||||
$last_contact_value = '<span title="'.$title.'">'.$value.'</span>';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
date_default_timezone_set($user_timezone);
|
||||||
|
$title = date($config['date_format'], $tmp->utimestamp);
|
||||||
|
$value = ui_print_timestamp($tmp->utimestamp, true, $options);
|
||||||
|
$last_contact_value = '<span title="'.$title.'">'.$value.'</span>';
|
||||||
|
|
||||||
$tmp->timestamp = $last_contact_value;
|
$tmp->timestamp = $last_contact_value;
|
||||||
|
|
||||||
if (is_numeric($tmp->data) === true) {
|
if (is_numeric($tmp->data) === true) {
|
||||||
|
|
|
@ -603,6 +603,7 @@ if ($access_console_node === true) {
|
||||||
$sub[$javascript]['type'] = 'direct';
|
$sub[$javascript]['type'] = 'direct';
|
||||||
|
|
||||||
echo '<div id="modal-sound" style="display:none;"></div>';
|
echo '<div id="modal-sound" style="display:none;"></div>';
|
||||||
|
echo '<div id="modal-asteroids" style="display:none;"></div>';
|
||||||
|
|
||||||
ui_require_javascript_file('pandora_events');
|
ui_require_javascript_file('pandora_events');
|
||||||
|
|
||||||
|
|
|
@ -45,8 +45,10 @@ if (is_ajax()) {
|
||||||
$save_filter = get_parameter('save_filter');
|
$save_filter = get_parameter('save_filter');
|
||||||
$load_filter = get_parameter('load_filter');
|
$load_filter = get_parameter('load_filter');
|
||||||
$update_filter = get_parameter('update_filter');
|
$update_filter = get_parameter('update_filter');
|
||||||
|
$delete_filter = get_parameter('delete_filter');
|
||||||
$get_new_values = get_parameter('get_new_values');
|
$get_new_values = get_parameter('get_new_values');
|
||||||
$export_filter = get_parameter('export_filter');
|
$export_filter = get_parameter('export_filter');
|
||||||
|
$load_list_filters = get_parameter('load_list_filters');
|
||||||
|
|
||||||
if (empty($search_left) === false) {
|
if (empty($search_left) === false) {
|
||||||
$output = [];
|
$output = [];
|
||||||
|
@ -289,6 +291,11 @@ if (is_ajax()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (empty($delete_filter) === false) {
|
||||||
|
$result = db_process_sql_delete('tgraph_analytics_filter', ['id' => $delete_filter]);
|
||||||
|
echo ((bool) $result === true) ? 'deleted' : '';
|
||||||
|
}
|
||||||
|
|
||||||
// Get new values.
|
// Get new values.
|
||||||
if (empty($get_new_values) === false) {
|
if (empty($get_new_values) === false) {
|
||||||
$data = [];
|
$data = [];
|
||||||
|
@ -322,19 +329,19 @@ if (is_ajax()) {
|
||||||
$graphs = json_decode(db_get_value('graph_modules', 'tgraph_analytics_filter', 'id', $filter));
|
$graphs = json_decode(db_get_value('graph_modules', 'tgraph_analytics_filter', 'id', $filter));
|
||||||
$interval = db_get_value('tgraph_analytics_filter.interval', 'tgraph_analytics_filter', 'id', $filter);
|
$interval = db_get_value('tgraph_analytics_filter.interval', 'tgraph_analytics_filter', 'id', $filter);
|
||||||
|
|
||||||
foreach ($graphs as $graph) {
|
$id_graph = db_process_sql_insert(
|
||||||
$id_graph = db_process_sql_insert(
|
'tgraph',
|
||||||
'tgraph',
|
[
|
||||||
[
|
'id_user' => $config['id_user'],
|
||||||
'id_user' => $config['id_user'],
|
'id_group' => $group,
|
||||||
'id_group' => $group,
|
'name' => $filter_name.' ('.__('Graph').') ',
|
||||||
'name' => $filter_name.' ('.__('Graph').' '.($counter + 1).')',
|
'description' => __('Created from Graph analytics. Filter:').' '.$filter_name.'. '.__('Graph'),
|
||||||
'description' => __('Created from Graph analytics. Filter:').' '.$filter_name.'. '.__('Graph').' '.($counter + 1),
|
'period' => $interval,
|
||||||
'period' => $interval,
|
'stacked' => 2,
|
||||||
'stacked' => 2,
|
]
|
||||||
]
|
);
|
||||||
);
|
|
||||||
|
|
||||||
|
foreach ($graphs as $graph) {
|
||||||
if ($id_graph > 0) {
|
if ($id_graph > 0) {
|
||||||
$counter++;
|
$counter++;
|
||||||
$field_order = 1;
|
$field_order = 1;
|
||||||
|
@ -357,7 +364,16 @@ if (is_ajax()) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
echo $counter;
|
if ($id_graph > 0) {
|
||||||
|
echo 'created';
|
||||||
|
} else {
|
||||||
|
echo '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($load_list_filters) === false) {
|
||||||
|
$filters = graph_analytics_filter_select();
|
||||||
|
echo json_encode($filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -384,7 +400,7 @@ if (check_acl($config['id_user'], 0, 'RW') === 1 || check_acl($config['id_user']
|
||||||
'content' => html_print_radio_button(
|
'content' => html_print_radio_button(
|
||||||
'filter_mode',
|
'filter_mode',
|
||||||
'new',
|
'new',
|
||||||
__('New filter'),
|
__('Create'),
|
||||||
true,
|
true,
|
||||||
true
|
true
|
||||||
),
|
),
|
||||||
|
@ -398,7 +414,21 @@ if (check_acl($config['id_user'], 0, 'RW') === 1 || check_acl($config['id_user']
|
||||||
'content' => html_print_radio_button(
|
'content' => html_print_radio_button(
|
||||||
'filter_mode',
|
'filter_mode',
|
||||||
'update',
|
'update',
|
||||||
__('Update filter'),
|
__('Update'),
|
||||||
|
false,
|
||||||
|
true
|
||||||
|
),
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
$data[2] = html_print_div(
|
||||||
|
[
|
||||||
|
'style' => 'display: flex;',
|
||||||
|
'content' => html_print_radio_button(
|
||||||
|
'filter_mode',
|
||||||
|
'delete',
|
||||||
|
__('Delete'),
|
||||||
false,
|
false,
|
||||||
true
|
true
|
||||||
),
|
),
|
||||||
|
@ -466,7 +496,37 @@ if (check_acl($config['id_user'], 0, 'RW') === 1 || check_acl($config['id_user']
|
||||||
);
|
);
|
||||||
|
|
||||||
$table->data[] = $data;
|
$table->data[] = $data;
|
||||||
$table->rowclass[] = '';
|
$table->rowclass[] = 'display-grid';
|
||||||
|
|
||||||
|
$data = [];
|
||||||
|
$table->rowid[4] = 'delete_filter_row2';
|
||||||
|
$data[0] = __('Delete filter');
|
||||||
|
|
||||||
|
$select_filters_delete = graph_analytics_filter_select();
|
||||||
|
|
||||||
|
$data[0] .= html_print_select(
|
||||||
|
$select_filters_delete,
|
||||||
|
'delete_filter',
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
0,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
$data[1] = html_print_submit_button(
|
||||||
|
__('Delete filter'),
|
||||||
|
'delete_filter',
|
||||||
|
false,
|
||||||
|
[
|
||||||
|
'class' => 'mini ',
|
||||||
|
'icon' => 'delete',
|
||||||
|
'style' => 'margin-left: 155px; width: 145px;',
|
||||||
|
'onclick' => 'delete_filter();',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
$table->data[] = $data;
|
||||||
|
|
||||||
html_print_table($table);
|
html_print_table($table);
|
||||||
} else {
|
} else {
|
||||||
|
@ -583,7 +643,7 @@ echo '</div>';
|
||||||
echo '<div id="export-select" class="load-filter-modal invisible">';
|
echo '<div id="export-select" class="load-filter-modal invisible">';
|
||||||
|
|
||||||
$table = new StdClass;
|
$table = new StdClass;
|
||||||
$table->id = 'share_form';
|
$table->id = 'export_form';
|
||||||
$table->width = '100%';
|
$table->width = '100%';
|
||||||
$table->cellspacing = 4;
|
$table->cellspacing = 4;
|
||||||
$table->cellpadding = 4;
|
$table->cellpadding = 4;
|
||||||
|
@ -771,30 +831,31 @@ $left_content .= '
|
||||||
</div>
|
</div>
|
||||||
<div class="filters-div-submain">
|
<div class="filters-div-submain">
|
||||||
<div class="filter-div filters-left-div">
|
<div class="filter-div filters-left-div">
|
||||||
|
<span><b>'.__('Agents').'</b></span>
|
||||||
<input id="search-left" name="search-left" placeholder="Enter keywords to search" type="search" class="search-graph-analytics">
|
<input id="search-left" name="search-left" placeholder="Enter keywords to search" type="search" class="search-graph-analytics">
|
||||||
<br>
|
<br>
|
||||||
'.ui_toggle(
|
'.ui_toggle(
|
||||||
'',
|
'',
|
||||||
__('Agents'),
|
__('Agents'),
|
||||||
'agents-toggle',
|
'agents-toggle',
|
||||||
'agents-toggle',
|
'agents-toggle',
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
'',
|
'',
|
||||||
'white-box-content',
|
'white-box-content',
|
||||||
'box-flat white_table_graph',
|
'box-flat white_table_graph',
|
||||||
'images/arrow@svg.svg',
|
'images/arrow@svg.svg',
|
||||||
'images/arrow@svg.svg',
|
'images/arrow@svg.svg',
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
'',
|
'',
|
||||||
'',
|
'',
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
'static'
|
'static'
|
||||||
).ui_toggle(
|
).ui_toggle(
|
||||||
'',
|
'',
|
||||||
__('Groups'),
|
__('Groups'),
|
||||||
|
@ -842,6 +903,7 @@ $left_content .= '
|
||||||
).'
|
).'
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-div filters-right-div ">
|
<div class="filter-div filters-right-div ">
|
||||||
|
<span><b>'.__('Modules').'</b></span>
|
||||||
<input id="search-right" placeholder="Enter keywords to search" type="search" class="search-graph-analytics">
|
<input id="search-right" placeholder="Enter keywords to search" type="search" class="search-graph-analytics">
|
||||||
<input id="search-agent" type="hidden" value="">
|
<input id="search-agent" type="hidden" value="">
|
||||||
<input id="search-group" type="hidden" value="">
|
<input id="search-group" type="hidden" value="">
|
||||||
|
@ -920,6 +982,15 @@ const titleError = "<?php echo __('Error'); ?>";
|
||||||
const titleUpdate = "<?php echo __('Override filter?'); ?>";
|
const titleUpdate = "<?php echo __('Override filter?'); ?>";
|
||||||
const messageUpdate = "<?php echo __('Do you want to overwrite the filter?'); ?>";
|
const messageUpdate = "<?php echo __('Do you want to overwrite the filter?'); ?>";
|
||||||
|
|
||||||
|
const titleDelete = "<?php echo __('Delete filter?'); ?>";
|
||||||
|
const messageDelete = "<?php echo __('Do you want to delete the filter?'); ?>";
|
||||||
|
|
||||||
|
const titleDeleteConfirm = "<?php echo __('Deleted successfully'); ?>";
|
||||||
|
const messageDeleteConfirm = "<?php echo __('The filter has been deleted successfully'); ?>";
|
||||||
|
|
||||||
|
const titleDeleteError = "<?php echo __('Error'); ?>";
|
||||||
|
const messageDeleteError = "<?php echo __('It is not possible delete the filter'); ?>";
|
||||||
|
|
||||||
const titleUpdateConfirm = "<?php echo __('Updated successfully'); ?>";
|
const titleUpdateConfirm = "<?php echo __('Updated successfully'); ?>";
|
||||||
const messageUpdateConfirm = "<?php echo __('The filter has been updated successfully'); ?>";
|
const messageUpdateConfirm = "<?php echo __('The filter has been updated successfully'); ?>";
|
||||||
|
|
||||||
|
@ -935,7 +1006,7 @@ const messageLoadConfirm = "<?php echo __('Error loading filter'); ?>";
|
||||||
const titleExport = "<?php echo __('Export to custom graph'); ?>";
|
const titleExport = "<?php echo __('Export to custom graph'); ?>";
|
||||||
|
|
||||||
const titleExportConfirm = "<?php echo __('Exported successfully'); ?>";
|
const titleExportConfirm = "<?php echo __('Exported successfully'); ?>";
|
||||||
const messageExportConfirm = "<?php echo __('graphs have been created in Custom graphs'); ?>";
|
const messageExportConfirm = "<?php echo __('Graph have been created in Custom graphs'); ?>";
|
||||||
|
|
||||||
const titleExportError = "<?php echo __('Error to export'); ?>";
|
const titleExportError = "<?php echo __('Error to export'); ?>";
|
||||||
const messageExportError = "<?php echo __('Filter cannot be None'); ?>";
|
const messageExportError = "<?php echo __('Filter cannot be None'); ?>";
|
||||||
|
@ -943,4 +1014,6 @@ const messageExportError = "<?php echo __('Filter cannot be None'); ?>";
|
||||||
const titleRemoveConfirm = "<?php echo __('Delete graph'); ?>";
|
const titleRemoveConfirm = "<?php echo __('Delete graph'); ?>";
|
||||||
const messageRemoveConfirm = "<?php echo __('Do you want to delete the graph? Remember to save the changes.'); ?>";
|
const messageRemoveConfirm = "<?php echo __('Do you want to delete the graph? Remember to save the changes.'); ?>";
|
||||||
|
|
||||||
|
const titleModalActions = "<?php echo __('Filter actions'); ?>"
|
||||||
|
|
||||||
</script>
|
</script>
|
|
@ -170,12 +170,26 @@ if ($searchAgents) {
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($agents as $key => $agent) {
|
foreach ($agents as $key => $agent) {
|
||||||
|
$agent_quiet = '';
|
||||||
|
if ((bool) $agent['quiet'] === true) {
|
||||||
|
$agent_quiet = html_print_image(
|
||||||
|
'images/dot_blue.png',
|
||||||
|
true,
|
||||||
|
[
|
||||||
|
'border' => '0',
|
||||||
|
'title' => __('Quiet'),
|
||||||
|
'alt' => '',
|
||||||
|
'class' => 'mrgn_lft_5px',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if ($agent['disabled']) {
|
if ($agent['disabled']) {
|
||||||
$agents[$key]['agent'] = '<em><a style href=index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$agent['id_agente'].'
|
$agents[$key]['agent'] = '<em><a style href=index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$agent['id_agente'].'
|
||||||
title="'.$agent['id_agente'].'"><b><span style>'.ucfirst(strtolower($agent['alias'])).'</span></b></a>'.ui_print_help_tip(__('Disabled'), true).'</em>';
|
title="'.$agent['id_agente'].'"><b><span style>'.ucfirst(strtolower($agent['alias'])).'</span></b></a>'.ui_print_help_tip(__('Disabled'), true).'</em>'.$agent_quiet;
|
||||||
} else {
|
} else {
|
||||||
$agents[$key]['agent'] = '<a style href=index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$agent['id_agente'].'
|
$agents[$key]['agent'] = '<a style href=index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$agent['id_agente'].'
|
||||||
title='.$agent['nombre'].'><b><span style>'.ucfirst(strtolower($agent['alias'])).'</span></b></a>';
|
title='.$agent['nombre'].'><b><span style>'.ucfirst(strtolower($agent['alias'])).'</span></b></a>'.$agent_quiet;
|
||||||
}
|
}
|
||||||
|
|
||||||
$agents[$key]['os'] = ui_print_os_icon($agent['id_os'], false, true);
|
$agents[$key]['os'] = ui_print_os_icon($agent['id_os'], false, true);
|
||||||
|
|
|
@ -33,7 +33,7 @@ foreach ($arrayKeywords as $keyword) {
|
||||||
array_push($temp, '%'.$keyword.'%');
|
array_push($temp, '%'.$keyword.'%');
|
||||||
}
|
}
|
||||||
|
|
||||||
$stringSearchSQL = implode(' ', $temp);
|
$stringSearchSQL = implode('', $temp);
|
||||||
$stringSearchSQL = str_replace('_', '\_', $stringSearchSQL);
|
$stringSearchSQL = str_replace('_', '\_', $stringSearchSQL);
|
||||||
|
|
||||||
$_SESSION['stringSearchSQL'] = $stringSearchSQL;
|
$_SESSION['stringSearchSQL'] = $stringSearchSQL;
|
||||||
|
@ -206,7 +206,7 @@ ui_print_standard_header(
|
||||||
);
|
);
|
||||||
|
|
||||||
$only_count = false;
|
$only_count = false;
|
||||||
|
hd(io_safe_input($_SESSION['stringSearchSQL']), true);
|
||||||
switch ($searchTab) {
|
switch ($searchTab) {
|
||||||
case 'main':
|
case 'main':
|
||||||
$only_count = true;
|
$only_count = true;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
%define debug_package %{nil}
|
%define debug_package %{nil}
|
||||||
%define name pandorafms_console
|
%define name pandorafms_console
|
||||||
%define version 7.0NG.775
|
%define version 7.0NG.775
|
||||||
%define release 240117
|
%define release 240119
|
||||||
|
|
||||||
# User and Group under which Apache is running
|
# User and Group under which Apache is running
|
||||||
%define httpd_name httpd
|
%define httpd_name httpd
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
%define debug_package %{nil}
|
%define debug_package %{nil}
|
||||||
%define name pandorafms_console
|
%define name pandorafms_console
|
||||||
%define version 7.0NG.775
|
%define version 7.0NG.775
|
||||||
%define release 240117
|
%define release 240119
|
||||||
|
|
||||||
# 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.775
|
%define version 7.0NG.775
|
||||||
%define release 240117
|
%define release 240119
|
||||||
%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
|
||||||
|
|
|
@ -1294,7 +1294,7 @@ CREATE TABLE IF NOT EXISTS `tusuario` (
|
||||||
`section` TEXT,
|
`section` TEXT,
|
||||||
`data_section` TEXT,
|
`data_section` TEXT,
|
||||||
`metaconsole_section` VARCHAR(255) NOT NULL DEFAULT 'Default',
|
`metaconsole_section` VARCHAR(255) NOT NULL DEFAULT 'Default',
|
||||||
`metaconsole_data_section` VARCHAR(255) NOT NULL DEFAULT '',
|
`metaconsole_data_section` TEXT,
|
||||||
`force_change_pass` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
`force_change_pass` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
`last_pass_change` DATETIME,
|
`last_pass_change` DATETIME,
|
||||||
`last_failed_login` DATETIME,
|
`last_failed_login` DATETIME,
|
||||||
|
|
|
@ -2841,8 +2841,8 @@ INSERT INTO `treport_content` (`id_rc`,`id_report`,`id_gs`,`id_agent_module`,`ty
|
||||||
(2,1,0,0,'top_n',28800,0,2,'Top CPU per agent','',0,'<p>This type of report implies loading a lot of data. Therefore it is recommended for scheduled reports, not real-time view.</p>',NULL,0,'','','','00:00:00','00:00:00',1,1,1,1,1,1,1,0,3,10,0,10,0,1,1,0,'{"show_in_same_row":0,"hide_notinit_agents":0,"priority_mode":"1","dyn_height":"250","text_agent":"Lio=","text_agent_module":"Y3B1Lio="}',0,0,'',0,0,300,0,0,NULL,NULL,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,NULL,NULL,1,0,0,NULL),
|
(2,1,0,0,'top_n',28800,0,2,'Top CPU per agent','',0,'<p>This type of report implies loading a lot of data. Therefore it is recommended for scheduled reports, not real-time view.</p>',NULL,0,'','','','00:00:00','00:00:00',1,1,1,1,1,1,1,0,3,10,0,10,0,1,1,0,'{"show_in_same_row":0,"hide_notinit_agents":0,"priority_mode":"1","dyn_height":"250","text_agent":"Lio=","text_agent_module":"Y3B1Lio="}',0,0,'',0,0,300,0,0,NULL,NULL,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,NULL,NULL,1,0,0,NULL),
|
||||||
(3,1,0,0,'event_report_group',21600,0,3,'General event report','This is a sample of not normal events for any agent available in the last 6 hours',0,'<p>This type of report implies loading a lot of data. Therefore it is recommended for scheduled reports, not real-time view.</p>',NULL,0,'','','','00:00:00','00:00:00',1,1,1,1,1,1,1,0,0,10,0,10,0,0,0,0,'{"show_in_same_row":0,"hide_notinit_agents":0,"priority_mode":"1","dyn_height":"250","server_multiple":"\"\"","show_summary_group":0,"filter_event_severity":"[\"20\"]","filter_event_type":"[\"all\"]","filter_event_status":"[\"-1\"]","event_graph_by_agent":"1","event_graph_by_user_validator":"1","event_graph_by_criticity":"1","event_graph_validated_vs_unvalidated":0,"event_filter_search":"","event_filter_exclude":"","custom_data_events":"1","label":""}',0,0,'',0,0,300,0,0,NULL,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,NULL,NULL,1,0,0,NULL);
|
(3,1,0,0,'event_report_group',21600,0,3,'General event report','This is a sample of not normal events for any agent available in the last 6 hours',0,'<p>This type of report implies loading a lot of data. Therefore it is recommended for scheduled reports, not real-time view.</p>',NULL,0,'','','','00:00:00','00:00:00',1,1,1,1,1,1,1,0,0,10,0,10,0,0,0,0,'{"show_in_same_row":0,"hide_notinit_agents":0,"priority_mode":"1","dyn_height":"250","server_multiple":"\"\"","show_summary_group":0,"filter_event_severity":"[\"20\"]","filter_event_type":"[\"all\"]","filter_event_status":"[\"-1\"]","event_graph_by_agent":"1","event_graph_by_user_validator":"1","event_graph_by_criticity":"1","event_graph_validated_vs_unvalidated":0,"event_filter_search":"","event_filter_exclude":"","custom_data_events":"1","label":""}',0,0,'',0,0,300,0,0,NULL,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,NULL,NULL,1,0,0,NULL);
|
||||||
INSERT INTO `tdashboard` (`id`,`name`,`id_user`,`id_group`,`active`,`cells`,`cells_slideshow`) VALUES
|
INSERT INTO `tdashboard` (`id`,`name`,`id_user`,`id_group`,`active`,`cells`,`cells_slideshow`) VALUES
|
||||||
(1,'Sample Dashboard #1','',0,0,0,0),
|
(1,'Sample Dashboard #1','',0,0,7,0),
|
||||||
(2,'Sample Dashboard #2','',0,0,0,0);
|
(2,'Sample Dashboard #2','',0,0,10,0);
|
||||||
INSERT INTO `twidget_dashboard` (`id`,`position`,`options`,`order`,`id_dashboard`,`id_widget`,`prop_width`,`prop_height`) VALUES
|
INSERT INTO `twidget_dashboard` (`id`,`position`,`options`,`order`,`id_dashboard`,`id_widget`,`prop_width`,`prop_height`) VALUES
|
||||||
(1,'{\"x\":\"0\",\"y\":\"0\",\"width\":\"4\",\"height\":\"4\"}','{\"title\":\"Agents hive\",\"background\":\"#ffffff\",\"groups\":[\"12,8,4,9,2,10,13,11\"]}',0,1,1,0.32,0.32),
|
(1,'{\"x\":\"0\",\"y\":\"0\",\"width\":\"4\",\"height\":\"4\"}','{\"title\":\"Agents hive\",\"background\":\"#ffffff\",\"groups\":[\"12,8,4,9,2,10,13,11\"]}',0,1,1,0.32,0.32),
|
||||||
(2,'{\"x\":\"4\",\"y\":\"0\",\"width\":\"3\",\"height\":\"4\"}','{\"title\":\"Clock\",\"background\":\"#ffffff\",\"clockType\":\"analogic\"}',1,1,12,0.32,0.32),
|
(2,'{\"x\":\"4\",\"y\":\"0\",\"width\":\"3\",\"height\":\"4\"}','{\"title\":\"Clock\",\"background\":\"#ffffff\",\"clockType\":\"analogic\"}',1,1,12,0.32,0.32),
|
||||||
|
|
|
@ -214,7 +214,7 @@ $enable_disable['text'] = html_print_div(
|
||||||
);
|
);
|
||||||
|
|
||||||
// New Widget.
|
// New Widget.
|
||||||
$newWidget['text'] = '<a href="#" id="add-widget" class="invisible">';
|
$newWidget['text'] = '<a href="#" id="add-widget" class="invisible_important">';
|
||||||
$newWidget['text'] .= html_print_image(
|
$newWidget['text'] .= html_print_image(
|
||||||
'images/plus@svg.svg',
|
'images/plus@svg.svg',
|
||||||
true,
|
true,
|
||||||
|
|
|
@ -112,7 +112,11 @@ if (empty($dashboards) === true) {
|
||||||
'manageDashboards' => $manageDashboards,
|
'manageDashboards' => $manageDashboards,
|
||||||
],
|
],
|
||||||
'default_pagination' => $config['block_size'],
|
'default_pagination' => $config['block_size'],
|
||||||
'no_sortable_columns' => [],
|
'no_sortable_columns' => [
|
||||||
|
4,
|
||||||
|
5,
|
||||||
|
6,
|
||||||
|
],
|
||||||
'order' => [
|
'order' => [
|
||||||
'field' => 'name',
|
'field' => 'name',
|
||||||
'direction' => 'desc',
|
'direction' => 'desc',
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
package: pandorafms-server
|
package: pandorafms-server
|
||||||
Version: 7.0NG.775-240117
|
Version: 7.0NG.775-240119
|
||||||
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.775-240117"
|
pandora_version="7.0NG.775-240119"
|
||||||
|
|
||||||
package_cpan=0
|
package_cpan=0
|
||||||
package_pandora=1
|
package_pandora=1
|
||||||
|
|
|
@ -46,7 +46,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.775";
|
my $pandora_version = "7.0NG.775";
|
||||||
my $pandora_build = "240117";
|
my $pandora_build = "240119";
|
||||||
our $VERSION = $pandora_version." ".$pandora_build;
|
our $VERSION = $pandora_version." ".$pandora_build;
|
||||||
|
|
||||||
# Setup hash
|
# Setup hash
|
||||||
|
|
|
@ -1662,9 +1662,6 @@ sub PandoraFMS::Recon::Base::report_scanned_agents($;$) {
|
||||||
$os_id = $self->guess_os($data->{'agent'}{'direccion'});
|
$os_id = $self->guess_os($data->{'agent'}{'direccion'});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_empty($data->{'agent'}{'os_version'})) {
|
|
||||||
$data->{'agent'}{'os_version'} = $self->guess_os($data->{'agent'}{'direccion'}, undef, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
$self->call('message', "Agent accepted: ".$data->{'agent'}{'nombre'}, 5);
|
$self->call('message', "Agent accepted: ".$data->{'agent'}{'nombre'}, 5);
|
||||||
|
|
||||||
|
@ -2022,8 +2019,14 @@ sub PandoraFMS::Recon::Base::report_scanned_agents($;$) {
|
||||||
# Retrieve target agent OS.
|
# Retrieve target agent OS.
|
||||||
$self->{'agents_found'}->{$addr}{'agent'}{'id_os'} = $self->guess_os($addr);
|
$self->{'agents_found'}->{$addr}{'agent'}{'id_os'} = $self->guess_os($addr);
|
||||||
|
|
||||||
|
my $os_version = $self->get_os_version($addr);
|
||||||
|
|
||||||
|
if (is_empty($os_version)) {
|
||||||
|
$os_version = $self->guess_os($addr, undef, 1);
|
||||||
|
}
|
||||||
|
|
||||||
# Retrieve target agent OS version.
|
# Retrieve target agent OS version.
|
||||||
$self->{'agents_found'}->{$addr}{'agent'}{'os_version'} = $self->get_os_version($addr);
|
$self->{'agents_found'}->{$addr}{'agent'}{'os_version'} = $os_version;
|
||||||
|
|
||||||
$self->call('update_progress', $progress);
|
$self->call('update_progress', $progress);
|
||||||
$progress += $step;
|
$progress += $step;
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue