2009-03-17 16:15:55 +01:00
< ? php
2021-02-12 11:28:13 +01:00
/**
* Main view for Massive Operations
*
* @ category Configuration
* @ package Pandora FMS
* @ subpackage Massive Operations
* @ version 1.0 . 0
* @ license See below
*
* ______ ___ _______ _______ ________
* | __ \ .-----.--.--.--| |.-----.----.-----. | ___ | | | __ |
* | __ /| _ | | _ || _ | _ | _ | | ___ | | __ |
* | ___ | | ___ . _ | __ | __ | _____ || _____ | __ | | ___ . _ | | ___ | | __ | _ | __ | _______ |
*
* ============================================================================
* Copyright ( c ) 2005 - 2021 Artica Soluciones Tecnologicas
* Please see http :// pandorafms . org for full contribution list
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
* ============================================================================
*/
// Begin.
2019-01-30 16:18:44 +01:00
check_login ();
if ( ! check_acl ( $config [ 'id_user' ], 0 , 'AW' )) {
db_pandora_audit (
'ACL Violation' ,
'Trying to access massive operation section'
);
include 'general/noaccess.php' ;
return ;
2009-03-17 16:15:55 +01:00
}
2019-01-30 16:18:44 +01:00
require_once 'include/functions_agents.php' ;
require_once 'include/functions_alerts.php' ;
require_once 'include/functions_modules.php' ;
2021-02-12 11:28:13 +01:00
require_once 'include/functions_massive_operations.php' ;
2019-01-30 16:18:44 +01:00
enterprise_include ( 'godmode/massive/massive_operations.php' );
$tab = ( string ) get_parameter ( 'tab' , 'massive_agents' );
2020-05-29 11:37:06 +02:00
$option = ( string ) get_parameter ( 'option' );
2019-01-30 16:18:44 +01:00
$options_alerts = [
'add_alerts' => __ ( 'Bulk alert add' ),
'delete_alerts' => __ ( 'Bulk alert delete' ),
'add_action_alerts' => __ ( 'Bulk alert actions add' ),
'delete_action_alerts' => __ ( 'Bulk alert actions delete' ),
'enable_disable_alerts' => __ ( 'Bulk alert enable/disable' ),
'standby_alerts' => __ ( 'Bulk alert setting standby' ),
];
$options_agents = [
'edit_agents' => __ ( 'Bulk agent edit' ),
'delete_agents' => __ ( 'Bulk agent delete' ),
];
2020-09-23 11:36:15 +02:00
if ( check_acl ( $config [ 'id_user' ], 0 , 'UM' )) {
2019-01-30 16:18:44 +01:00
$options_users = [
'add_profiles' => __ ( 'Bulk profile add' ),
'delete_profiles' => __ ( 'Bulk profile delete' ),
];
} else {
$options_users = [];
2011-07-18 15:14:33 +02:00
}
2010-09-03 09:20:39 +02:00
2019-01-30 16:18:44 +01:00
$options_modules = [
'edit_modules' => __ ( 'Bulk module edit' ),
'copy_modules' => __ ( 'Bulk module copy' ),
2019-02-04 11:00:50 +01:00
'delete_modules' => __ ( 'Bulk module delete' ),
2019-01-30 16:18:44 +01:00
];
2010-08-17 19:06:27 +02:00
2019-01-30 16:18:44 +01:00
$options_plugins = [
'edit_plugins' => __ ( 'Bulk plugin edit' ),
];
2015-06-29 18:45:15 +02:00
2019-01-30 16:18:44 +01:00
if ( ! check_acl ( $config [ 'id_user' ], 0 , 'AW' )) {
unset ( $options_modules [ 'edit_modules' ]);
2013-07-25 13:00:22 +02:00
}
2019-01-30 16:18:44 +01:00
$options_policies = [];
2010-08-17 19:06:27 +02:00
$policies_options = enterprise_hook ( 'massive_policies_options' );
2019-04-22 16:37:06 +02:00
$policies_options = array_unique ( $policies_options );
2010-08-17 19:06:27 +02:00
2013-08-06 14:53:39 +02:00
if ( $policies_options != ENTERPRISE_NOT_HOOK ) {
2019-01-30 16:18:44 +01:00
$options_policies = array_merge ( $options_policies , $policies_options );
2010-08-17 19:06:27 +02:00
}
2019-01-30 16:18:44 +01:00
$options_snmp = [];
2013-08-06 14:53:39 +02:00
$snmp_options = enterprise_hook ( 'massive_snmp_options' );
2019-01-22 11:03:52 +01:00
$snmp_options = array_reverse ( $snmp_options );
2013-08-06 14:53:39 +02:00
if ( $snmp_options != ENTERPRISE_NOT_HOOK ) {
2019-01-30 16:18:44 +01:00
$options_snmp = array_merge ( $options_snmp , $snmp_options );
2013-08-06 14:53:39 +02:00
}
2019-01-30 16:18:44 +01:00
$options_satellite = [];
2014-05-08 09:54:51 +02:00
$satellite_options = enterprise_hook ( 'massive_satellite_options' );
if ( $satellite_options != ENTERPRISE_NOT_HOOK ) {
2019-01-30 16:18:44 +01:00
$options_satellite = array_merge ( $options_satellite , $satellite_options );
2014-05-08 09:54:51 +02:00
}
2020-07-06 19:35:31 +02:00
$options_services = enterprise_hook ( 'massive_services_options' );
if ( $options_services === ENTERPRISE_NOT_HOOK ) {
$options_services = [];
}
2010-10-29 Miguel de Dios <miguel.dedios@artica.es>
* extensions/dbmanager.php, godmode/agentes/module_manager_editor.php,
godmode/massive/massive_add_alerts.php,
godmode/massive/massive_copy_modules.php,
godmode/massive/massive_delete_agents.php,
godmode/massive/massive_enable_disable_alerts.php,
godmode/massive/massive_operations.php,
godmode/massive/massive_delete_profiles.php,
godmode/massive/massive_edit_agents.php,
godmode/massive/massive_delete_action_alerts.php,
godmode/massive/massive_delete_modules.php,
godmode/massive/massive_add_profiles.php,
godmode/massive/massive_delete_alerts.php,
godmode/massive/massive_edit_modules.php,
godmode/massive/massive_standby_alerts.php,
godmode/massive/massive_add_action_alerts.php: now in the source code pick
more info in the audit for actions.
Pending tasks: #3089687
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@3480 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-10-29 14:35:34 +02:00
if ( in_array ( $option , array_keys ( $options_alerts ))) {
2019-01-30 16:18:44 +01:00
$tab = 'massive_alerts' ;
} else if ( in_array ( $option , array_keys ( $options_agents ))) {
$tab = 'massive_agents' ;
} else if ( in_array ( $option , array_keys ( $options_users ))) {
$tab = 'massive_users' ;
} else if ( in_array ( $option , array_keys ( $options_modules ))) {
$tab = 'massive_modules' ;
} else if ( in_array ( $option , array_keys ( $options_policies ))) {
$tab = 'massive_policies' ;
} else if ( in_array ( $option , array_keys ( $options_snmp ))) {
$tab = 'massive_snmp' ;
} else if ( in_array ( $option , array_keys ( $options_satellite ))) {
$tab = 'massive_satellite' ;
} else if ( in_array ( $option , array_keys ( $options_plugins ))) {
$tab = 'massive_plugins' ;
2020-07-06 19:35:31 +02:00
} else if ( in_array ( $option , array_keys ( $options_services ))) {
$tab = 'massive_services' ;
2020-05-29 11:37:06 +02:00
}
if ( $tab == 'massive_agents' && $option == '' ) {
$option = 'edit_agents' ;
}
if ( $tab == 'massive_modules' && $option == '' ) {
$option = 'edit_modules' ;
}
if ( $tab == 'massive_policies' && $option == '' ) {
$option = 'edit_policy_modules' ;
}
switch ( $option ) {
case 'edit_agents' :
$help_header = 'massive_agents_tab' ;
break ;
case 'edit_modules' :
$help_header = 'massive_modules_tab' ;
break ;
case 'edit_policy_modules' :
$help_header = 'massive_policies_tab' ;
break ;
default :
$help_header = '' ;
break ;
2010-08-17 19:06:27 +02:00
}
2013-08-06 14:53:39 +02:00
switch ( $tab ) {
2019-01-30 16:18:44 +01:00
case 'massive_alerts' :
$options = $options_alerts ;
break ;
2010-08-17 19:06:27 +02:00
2019-01-30 16:18:44 +01:00
case 'massive_agents' :
$options = $options_agents ;
break ;
case 'massive_modules' :
$options = $options_modules ;
break ;
case 'massive_users' :
$options = $options_users ;
break ;
2010-08-17 19:06:27 +02:00
2019-01-30 16:18:44 +01:00
case 'massive_policies' :
$options = $options_policies ;
break ;
2015-06-23 12:15:09 +02:00
2019-01-30 16:18:44 +01:00
case 'massive_snmp' :
$options = $options_snmp ;
break ;
2015-06-23 12:15:09 +02:00
2019-01-30 16:18:44 +01:00
case 'massive_satellite' :
$options = $options_satellite ;
break ;
2012-07-10 Miguel de Dios <miguel.dedios@artica.es>
* install.php, operation/reporting/reporting_xml.php,
operation/netflow/nf_live_view.php, operation/netflow/nf_view.php,
operation/tree.php, operation/agentes/gis_view.php,
operation/agentes/estado_monitores.php,
operation/agentes/networkmap.php,
operation/agentes/datos_agente.php,
operation/agentes/alerts_status.php, operation/menu.php,
operation/snmpconsole/snmp_view.php, operation/users/user_edit.php,
godmode/groups/configure_group.php,
godmode/groups/configure_modu_group.php,
godmode/agentes/module_manager_editor_prediction.php,
godmode/servers/manage_recontask.php,
godmode/alerts/alert_compounds.php,
godmode/alerts/configure_alert_template.php,
godmode/alerts/alert_special_days.php, godmode/setup/links.php,
godmode/setup/os.php, godmode/users/configure_profile.php,
godmode/events/events.php,
godmode/massive/massive_delete_modules.php,
godmode/massive/massive_edit_modules.php,
godmode/massive/massive_standby_alerts.php,
godmode/massive/massive_add_action_alerts.php,
godmode/massive/massive_enable_disable_alerts.php,
godmode/massive/massive_operations.php,
godmode/massive/massive_delete_profiles.php,
godmode/modules/manage_network_components.php,
godmode/modules/manage_nc_groups.php,
godmode/reporting/graph_builder.php,
godmode/reporting/reporting_builder.item_editor.php,
include/functions_menu.php, include/functions_visual_map.php,
include/functions_db.php: cleaned source code style.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@6759 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2012-07-10 12:38:02 +02:00
2019-01-30 16:18:44 +01:00
case 'massive_plugins' :
$options = $options_plugins ;
break ;
2019-05-06 16:59:31 +02:00
2020-07-06 19:35:31 +02:00
case 'massive_services' :
$options = $options_services ;
break ;
2019-05-06 16:59:31 +02:00
default :
// Default.
break ;
2019-01-30 16:18:44 +01:00
}
2019-05-06 16:59:31 +02:00
// Set the default option of the category.
2019-01-30 16:18:44 +01:00
if ( $option == '' ) {
$option = array_shift ( array_keys ( $options ));
}
2013-08-06 14:53:39 +02:00
2019-01-30 16:18:44 +01:00
$alertstab = [
'text' => '<a href="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&tab=massive_alerts">' . html_print_image (
2021-03-11 15:40:23 +01:00
'images/bell.png' ,
2019-01-30 16:18:44 +01:00
true ,
2021-03-11 15:40:23 +01:00
[
'title' => __ ( 'Alerts operations' ),
'class' => 'invert_filter' ,
]
2019-01-30 16:18:44 +01:00
) . '</a>' , 'active' => $tab == 'massive_alerts' ,
];
$userstab = [
'text' => '<a href="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&tab=massive_users">' . html_print_image (
2021-03-11 15:40:23 +01:00
'images/user.png' ,
2019-01-30 16:18:44 +01:00
true ,
2021-03-11 15:40:23 +01:00
[
'title' => __ ( 'Users operations' ),
'class' => 'invert_filter' ,
]
2019-01-30 16:18:44 +01:00
) . '</a>' , 'active' => $tab == 'massive_users' ,
];
$agentstab = [
'text' => '<a href="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&tab=massive_agents">' . html_print_image (
2021-03-11 15:40:23 +01:00
'images/agent.png' ,
2019-01-30 16:18:44 +01:00
true ,
2021-03-11 15:40:23 +01:00
[
'title' => __ ( 'Agents operations' ),
'class' => 'invert_filter' ,
]
2019-01-30 16:18:44 +01:00
) . '</a>' , 'active' => $tab == 'massive_agents' ,
];
2021-03-11 15:40:23 +01:00
$modulestab = [
'text' => '<a href="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&tab=massive_modules">' . html_print_image (
'images/module.png' ,
true ,
[
'title' => __ ( 'Modules operations' ),
'class' => 'invert_filter' ,
]
) . '</a>' , 'active' => $tab == 'massive_modules' ,
];
$pluginstab = [
'text' => '<a href="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&tab=massive_plugins">' . html_print_image (
'images/plugin.png' ,
true ,
[
'title' => __ ( 'Plugins operations' ),
'class' => 'invert_filter' ,
]
) . '</a>' , 'active' => $tab == 'massive_plugins' ,
];
$policiestab = enterprise_hook ( 'massive_policies_tab' );
if ( $policiestab == ENTERPRISE_NOT_HOOK ) {
$policiestab = '' ;
}
$snmptab = enterprise_hook ( 'massive_snmp_tab' );
if ( $snmptab == ENTERPRISE_NOT_HOOK ) {
$snmptab = '' ;
}
$satellitetab = enterprise_hook ( 'massive_satellite_tab' );
if ( $satellitetab == ENTERPRISE_NOT_HOOK ) {
$satellitetab = '' ;
}
$servicestab = enterprise_hook ( 'massive_services_tab' );
if ( $servicestab == ENTERPRISE_NOT_HOOK ) {
$servicestab = '' ;
}
$onheader = [];
$onheader [ 'massive_agents' ] = $agentstab ;
$onheader [ 'massive_modules' ] = $modulestab ;
$onheader [ 'massive_plugins' ] = $pluginstab ;
if ( check_acl ( $config [ 'id_user' ], 0 , 'UM' )) {
$onheader [ 'user_agents' ] = $userstab ;
}
$onheader [ 'massive_alerts' ] = $alertstab ;
$onheader [ 'policies' ] = $policiestab ;
$onheader [ 'snmp' ] = $snmptab ;
$onheader [ 'satellite' ] = $satellitetab ;
$onheader [ 'services' ] = $servicestab ;
/*
Hello there ! : )
We added some of what seems to be " buggy " messages to the openSource version recently . This is not to force open - source users to move to the enterprise version , this is just to inform people using Pandora FMS open source that it requires skilled people to maintain and keep it running smoothly without professional support . This does not imply open - source version is limited in any way . If you check the recently added code , it contains only warnings and messages , no limitations except one : we removed the option to add custom logo in header . In the Update Manager section , it warns about the 'danger’ of applying automated updates without a proper backup, remembering in the process that the Enterprise version comes with a human-tested package. Maintaining an OpenSource version with more than 500 agents is not so easy, that' s why someone using a Pandora with 8000 agents should consider asking for support . It ' s not a joke , we know of many setups with a huge number of agents , and we hate to hear that “its becoming unstable and slow” : (
You can of course remove the warnings , that 's why we include the source and do not use any kind of trick. And that' s why we added here this comment , to let you know this does not reflect any change in our opensource mentality of does the last 14 years .
*/
ui_print_page_header (
__ ( 'Bulk operations' ) . ' » ' . $options [ $option ],
'images/gm_massive_operations.png' ,
false ,
$help_header ,
true ,
$onheader ,
false ,
'massivemodal'
);
// Checks if the PHP configuration is correctly.
if (( get_cfg_var ( 'max_execution_time' ) != 0 )
|| ( get_cfg_var ( 'max_input_time' ) != - 1 )
) {
echo '<div id="notify_conf" class="notify">' ;
echo __ ( 'In order to perform massive operations, PHP needs a correct configuration in timeout parameters. Please, open your PHP configuration file (php.ini) for example: <i>sudo vi /etc/php5/apache2/php.ini;</i><br> And set your timeout parameters to a correct value: <br><i> max_execution_time = 0</i> and <i>max_input_time = -1</i>' );
echo '</div>' ;
}
if ( $tab == 'massive_policies' && is_central_policies_on_node ()) {
ui_print_warning_message ( __ ( 'This node is configured with centralized mode. All policies information is read only. Go to metaconsole to manage it.' ));
return ;
}
// Catch all submit operations in this view to display Wait banner.
$submit_action = get_parameter ( 'go' );
$submit_update = get_parameter ( 'updbutton' );
$submit_del = get_parameter ( 'del' );
$submit_template_disabled = get_parameter ( 'id_alert_template_disabled' );
$submit_template_enabled = get_parameter ( 'id_alert_template_enabled' );
$submit_template_not_standby = get_parameter ( 'id_alert_template_not_standby' );
$submit_template_standby = get_parameter ( 'id_alert_template_standby' );
$submit_add = get_parameter ( 'crtbutton' );
// Waiting spinner.
ui_print_spinner ( __ ( 'Loading' ));
// Modal for show messages.
html_print_div (
[
'id' => 'massive_modal' ,
'content' => '' ,
]
);
// Load common JS files.
ui_require_javascript_file ( 'massive_operations' );
?>
2011-11-10 20:19:38 +01:00
< script language = " javascript " type = " text/javascript " >
2021-02-12 11:28:13 +01:00
/* <![CDATA[ */
2019-01-30 16:18:44 +01:00
$ ( document ) . ready ( function () {
2021-02-12 11:28:13 +01:00
$ ( '#button-go' ) . click ( function ( e ) {
var limitParametersMassive = < ? php echo $config [ 'limit_parameters_massive' ]; ?> ;
var thisForm = e . target . form . id ;
var get_parameters_count = window . location . href . slice (
window . location . href . indexOf ( '?' ) + 1 ) . split ( '&' ) . length ;
var post_parameters_count = $ ( '#' + thisForm ) . serializeArray () . length ;
var totalCount = get_parameters_count + post_parameters_count ;
var contents = {};
contents . html = '<?php echo __(' No changes have been made because they exceed the maximum allowed ( % d ) . Make fewer changes or contact the administrator . ', $config[' limit_parameters_massive ']); ?>' ;
contents . title = '<?php echo __(' Massive operations '); ?>' ;
contents . question = '<?php echo __(' Are you sure ? '); ?>' ;
contents . ok = '<?php echo __(' OK '); ?>' ;
contents . cancel = '<?php echo __(' Cancel '); ?>' ;
var operation = massiveOperationValidation ( contents , totalCount , limitParametersMassive , thisForm );
if ( operation == false ) {
2019-01-30 16:18:44 +01:00
return false ;
2021-02-12 11:28:13 +01:00
}
2019-01-30 16:18:44 +01:00
});
});
2021-02-12 11:28:13 +01:00
/* ]]> */
2011-11-10 20:19:38 +01:00
</ script >
< ? php
2020-03-20 12:34:58 +01:00
if ( is_central_policies_on_node () && $option == 'delete_agents' ) {
ui_print_warning_message ( __ ( 'This node is configured with centralized mode. To delete an agent go to metaconsole.' ));
}
2019-01-30 16:18:44 +01:00
echo '<br />' ;
2013-02-14 11:05:16 +01:00
echo '<form method="post" id="form_options" action="index.php?sec=gmassive&sec2=godmode/massive/massive_operations">' ;
2015-06-29 18:45:15 +02:00
echo '<table border="0"><tr><td>' ;
2019-01-30 16:18:44 +01:00
echo __ ( 'Action' );
2015-06-29 18:45:15 +02:00
echo '</td><td>' ;
2019-01-30 16:18:44 +01:00
html_print_select (
$options ,
'option' ,
$option ,
'this.form.submit()' ,
'' ,
0 ,
false ,
false ,
false
);
if ( $option == 'edit_agents' || $option == 'edit_modules' ) {
ui_print_help_tip ( __ ( 'The blank fields will not be updated' ));
}
2015-06-29 18:45:15 +02:00
echo '</td></tr></table>' ;
2012-07-10 Miguel de Dios <miguel.dedios@artica.es>
* install.php, operation/reporting/reporting_xml.php,
operation/netflow/nf_live_view.php, operation/netflow/nf_view.php,
operation/tree.php, operation/agentes/gis_view.php,
operation/agentes/estado_monitores.php,
operation/agentes/networkmap.php,
operation/agentes/datos_agente.php,
operation/agentes/alerts_status.php, operation/menu.php,
operation/snmpconsole/snmp_view.php, operation/users/user_edit.php,
godmode/groups/configure_group.php,
godmode/groups/configure_modu_group.php,
godmode/agentes/module_manager_editor_prediction.php,
godmode/servers/manage_recontask.php,
godmode/alerts/alert_compounds.php,
godmode/alerts/configure_alert_template.php,
godmode/alerts/alert_special_days.php, godmode/setup/links.php,
godmode/setup/os.php, godmode/users/configure_profile.php,
godmode/events/events.php,
godmode/massive/massive_delete_modules.php,
godmode/massive/massive_edit_modules.php,
godmode/massive/massive_standby_alerts.php,
godmode/massive/massive_add_action_alerts.php,
godmode/massive/massive_enable_disable_alerts.php,
godmode/massive/massive_operations.php,
godmode/massive/massive_delete_profiles.php,
godmode/modules/manage_network_components.php,
godmode/modules/manage_nc_groups.php,
godmode/reporting/graph_builder.php,
godmode/reporting/reporting_builder.item_editor.php,
include/functions_menu.php, include/functions_visual_map.php,
include/functions_db.php: cleaned source code style.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@6759 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2012-07-10 12:38:02 +02:00
echo '</form>' ;
2019-01-30 16:18:44 +01:00
echo '<br />' ;
2009-03-17 16:15:55 +01:00
2010-08-17 19:06:27 +02:00
switch ( $option ) {
2019-01-30 16:18:44 +01:00
case 'delete_alerts' :
include_once 'godmode/massive/massive_delete_alerts.php' ;
break ;
case 'add_alerts' :
include_once 'godmode/massive/massive_add_alerts.php' ;
break ;
case 'delete_action_alerts' :
include_once 'godmode/massive/massive_delete_action_alerts.php' ;
break ;
case 'add_action_alerts' :
include_once 'godmode/massive/massive_add_action_alerts.php' ;
break ;
case 'enable_disable_alerts' :
include_once 'godmode/massive/massive_enable_disable_alerts.php' ;
break ;
case 'standby_alerts' :
include_once 'godmode/massive/massive_standby_alerts.php' ;
break ;
case 'add_profiles' :
include_once 'godmode/massive/massive_add_profiles.php' ;
break ;
case 'delete_profiles' :
include_once 'godmode/massive/massive_delete_profiles.php' ;
break ;
case 'delete_agents' :
include_once 'godmode/massive/massive_delete_agents.php' ;
break ;
case 'edit_agents' :
include_once 'godmode/massive/massive_edit_agents.php' ;
break ;
case 'delete_modules' :
include_once 'godmode/massive/massive_delete_modules.php' ;
break ;
case 'edit_modules' :
include_once 'godmode/massive/massive_edit_modules.php' ;
break ;
case 'copy_modules' :
include_once 'godmode/massive/massive_copy_modules.php' ;
break ;
case 'edit_plugins' :
include_once 'godmode/massive/massive_edit_plugins.php' ;
break ;
default :
if ( ! enterprise_hook ( 'massive_operations' , [ $option ])) {
include_once 'godmode/massive/massive_config.php' ;
}
break ;
2009-03-17 16:15:55 +01:00
}