2023-02-03 14:10:26 +01:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* User management.
|
|
|
|
*
|
|
|
|
* @category Users
|
|
|
|
* @package Pandora FMS
|
|
|
|
* @subpackage Community
|
|
|
|
* @version 1.0.0
|
|
|
|
* @license See below
|
|
|
|
*
|
|
|
|
* ______ ___ _______ _______ ________
|
|
|
|
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
|
|
|
|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
|
|
|
|
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
|
|
|
|
*
|
|
|
|
* ============================================================================
|
|
|
|
* Copyright (c) 2005-2023 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.
|
|
|
|
* ============================================================================
|
|
|
|
*/
|
|
|
|
|
|
|
|
// Load global vars.
|
|
|
|
global $config;
|
|
|
|
|
|
|
|
check_login();
|
|
|
|
|
|
|
|
// Bussiness Logic.
|
|
|
|
// Data for homescreen section.
|
|
|
|
$homeScreenValues = [
|
|
|
|
HOME_SCREEN_DEFAULT => __('Default'),
|
|
|
|
HOME_SCREEN_VISUAL_CONSOLE => __('Visual console'),
|
|
|
|
HOME_SCREEN_EVENT_LIST => __('Event list'),
|
|
|
|
HOME_SCREEN_GROUP_VIEW => __('Group view'),
|
|
|
|
HOME_SCREEN_TACTICAL_VIEW => __('Tactical view'),
|
|
|
|
HOME_SCREEN_ALERT_DETAIL => __('Alert detail'),
|
|
|
|
HOME_SCREEN_EXTERNAL_LINK => __('External link'),
|
|
|
|
HOME_SCREEN_OTHER => __('Other'),
|
|
|
|
HOME_SCREEN_DASHBOARD => __('Dashboard'),
|
|
|
|
];
|
|
|
|
|
|
|
|
// Custom Home Screen controls.
|
|
|
|
$customHomeScreenAddition = [];
|
|
|
|
// Home screen. Dashboard.
|
2023-02-06 23:10:28 +01:00
|
|
|
$customHomeScreenAddition[HOME_SCREEN_DASHBOARD] = html_print_select($dashboards_aux, 'dashboard', $user_info['data_section'], '', '', '', true, false, true, 'w100p', false, 'width: 100%');
|
2023-02-03 14:10:26 +01:00
|
|
|
// Home screen. Visual consoles.
|
2023-02-06 23:10:28 +01:00
|
|
|
$customHomeScreenAddition[HOME_SCREEN_VISUAL_CONSOLE] = html_print_select($layouts_aux, 'visual_console', $user_info['data_section'], '', '', '', true, false, true, 'w100p', false, 'width: 100%');
|
2023-02-03 14:10:26 +01:00
|
|
|
// Home screen. External link and Other.
|
2023-02-06 23:10:28 +01:00
|
|
|
$customHomeScreenAddition[HOME_SCREEN_EXTERNAL_LINK] = html_print_input_text('data_section', $user_info['data_section'], '', 60, 255, true);
|
|
|
|
$customHomeScreenAddition[HOME_SCREEN_OTHER] = html_print_input_text('data_section', $user_info['data_section'], '', 60, 255, true);
|
2023-02-03 14:10:26 +01:00
|
|
|
|
|
|
|
$customHomeScreenDataField = '';
|
|
|
|
foreach ($customHomeScreenAddition as $key => $customField) {
|
|
|
|
$customHomeScreenDataField .= html_print_div(
|
|
|
|
[
|
|
|
|
'id' => sprintf('custom_home_screen_%s', $key),
|
|
|
|
'content' => $customField,
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Timezone creation canvas.
|
|
|
|
$timezoneContent = [];
|
|
|
|
if (is_metaconsole() === false) {
|
|
|
|
date_default_timezone_set('UTC');
|
|
|
|
include_once 'include/javascript/timezonepicker/includes/parser.inc';
|
|
|
|
|
|
|
|
// Read in options for map builder.
|
|
|
|
$bases = [
|
|
|
|
'gray' => 'Gray',
|
|
|
|
'blue-marble' => 'Blue marble',
|
|
|
|
'night-electric' => 'Night Electric',
|
|
|
|
'living' => 'Living Earth',
|
|
|
|
];
|
|
|
|
|
|
|
|
$local_file = 'include/javascript/timezonepicker/images/gray-400.png';
|
|
|
|
|
|
|
|
// Dimensions must always be exact since the imagemap does not scale.
|
|
|
|
$array_size = getimagesize($local_file);
|
|
|
|
|
|
|
|
$map_width = $array_size[0];
|
|
|
|
$map_height = $array_size[1];
|
|
|
|
|
|
|
|
$timezones = timezone_picker_parse_files(
|
|
|
|
$map_width,
|
|
|
|
$map_height,
|
|
|
|
'include/javascript/timezonepicker/tz_world.txt',
|
|
|
|
'include/javascript/timezonepicker/tz_islands.txt'
|
|
|
|
);
|
|
|
|
|
2023-02-06 23:10:28 +01:00
|
|
|
// Initial definition of vars.
|
|
|
|
$area_data_timezone_polys = '';
|
|
|
|
$area_data_timezone_rects = '';
|
|
|
|
|
2023-02-03 14:10:26 +01:00
|
|
|
foreach ($timezones as $timezone_name => $tz) {
|
|
|
|
if ($timezone_name === 'America/Montreal') {
|
|
|
|
$timezone_name = 'America/Toronto';
|
|
|
|
} else if ($timezone_name === 'Asia/Chongqing') {
|
|
|
|
$timezone_name = 'Asia/Shanghai';
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($tz['polys'] as $coords) {
|
|
|
|
$area_data_timezone_polys .= '<area data-timezone="'.$timezone_name.'" data-country="'.$tz['country'].'" data-pin="'.implode(',', $tz['pin']).'" data-offset="'.$tz['offset'].'" shape="poly" coords="'.implode(',', $coords).'" />';
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($tz['rects'] as $coords) {
|
|
|
|
$area_data_timezone_rects .= '<area data-timezone="'.$timezone_name.'" data-country="'.$tz['country'].'" data-pin="'.implode(',', $tz['pin']).'" data-offset="'.$tz['offset'].'" shape="rect" coords="'.implode(',', $coords).'" />';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$timezoneContent[] = '<img id="timezone-image" src="'.$local_file.'" width="'.$map_width.'" height="'.$map_height.'" usemap="#timezone-map" />';
|
|
|
|
$timezoneContent[] = '<img class="timezone-pin" src="include/javascript/timezonepicker/images/pin.png" class="pdd_t_4px" />';
|
|
|
|
$timezoneContent[] = '<map name="timezone-map" id="timezone-map">'.$area_data_timezone_polys.$area_data_timezone_rects.'</map>';
|
|
|
|
}
|
|
|
|
|
|
|
|
// Create the view.
|
|
|
|
$userManagementTable = new stdClass();
|
|
|
|
$userManagementTable->id = 'advanced';
|
|
|
|
$userManagementTable->width = '100%';
|
2023-02-07 13:19:40 +01:00
|
|
|
$userManagementTable->class = 'principal_table floating_form white_box';
|
2023-02-03 14:10:26 +01:00
|
|
|
$userManagementTable->data = [];
|
|
|
|
$userManagementTable->style = [];
|
|
|
|
$userManagementTable->rowclass = [];
|
|
|
|
$userManagementTable->cellclass = [];
|
|
|
|
$userManagementTable->colspan = [];
|
|
|
|
$userManagementTable->rowspan = [];
|
|
|
|
|
|
|
|
// Title for Profile information.
|
2023-02-13 14:23:31 +01:00
|
|
|
$sustitleTable = ($new_user === true) ? __('Profile information') : sprintf('%s [ %s ]', __('Profile information for'), $id);
|
2023-02-08 17:20:52 +01:00
|
|
|
$userManagementTable->data['title_profile_information'] = html_print_subtitle_table($sustitleTable);
|
2023-02-03 14:10:26 +01:00
|
|
|
|
|
|
|
// Id user.
|
|
|
|
if ($new_user === true) {
|
2023-02-06 10:17:51 +01:00
|
|
|
$userManagementTable->rowclass['captions_iduser'] = 'field_half_width';
|
2023-02-03 14:10:26 +01:00
|
|
|
$userManagementTable->rowclass['fields_iduser'] = 'field_half_width';
|
|
|
|
$userManagementTable->data['captions_iduser'][0] = __('User ID');
|
|
|
|
$userManagementTable->data['fields_iduser'][0] = html_print_input_text_extended(
|
|
|
|
'id_user',
|
|
|
|
$id,
|
|
|
|
'',
|
|
|
|
'',
|
|
|
|
20,
|
|
|
|
255,
|
|
|
|
!$new_user || $view_mode,
|
|
|
|
'',
|
|
|
|
[
|
2023-02-06 10:17:51 +01:00
|
|
|
'class' => 'input',
|
2023-02-03 14:10:26 +01:00
|
|
|
'placeholder' => __('User ID'),
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
} else {
|
2023-03-27 17:13:23 +02:00
|
|
|
$userManagementTable->data['fields_iduser'][0] = html_print_input_hidden('id', $id, false, false, false, 'id');
|
2023-02-03 14:10:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// User Full name.
|
2023-02-06 10:17:51 +01:00
|
|
|
$userManagementTable->rowclass['captions_fullname'] = 'field_half_width';
|
2023-02-03 14:10:26 +01:00
|
|
|
$userManagementTable->rowclass['fields_fullname'] = 'field_half_width';
|
|
|
|
$userManagementTable->data['captions_fullname'][0] = __('Full name');
|
|
|
|
$userManagementTable->data['fields_fullname'][0] = html_print_input_text_extended(
|
|
|
|
'fullname',
|
|
|
|
$user_info['fullname'],
|
|
|
|
'fullname',
|
|
|
|
'',
|
|
|
|
20,
|
|
|
|
100,
|
|
|
|
$view_mode,
|
|
|
|
'',
|
|
|
|
[
|
|
|
|
'class' => 'input',
|
|
|
|
'placeholder' => __('Full (display) name'),
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
|
|
|
// User Email.
|
2023-02-06 10:17:51 +01:00
|
|
|
$userManagementTable->rowclass['captions_email'] = 'field_half_width';
|
2023-02-03 14:10:26 +01:00
|
|
|
$userManagementTable->rowclass['fields_email'] = 'field_half_width';
|
|
|
|
$userManagementTable->data['captions_email'][0] = __('Email');
|
|
|
|
$userManagementTable->data['fields_email'][0] = html_print_input_text_extended(
|
|
|
|
'email',
|
|
|
|
$user_info['email'],
|
|
|
|
'email',
|
|
|
|
'',
|
|
|
|
'25',
|
|
|
|
'100',
|
|
|
|
$view_mode,
|
|
|
|
'',
|
|
|
|
[
|
2023-02-06 10:17:51 +01:00
|
|
|
'class' => 'input',
|
2023-02-03 14:10:26 +01:00
|
|
|
'placeholder' => __('E-mail'),
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
|
|
|
// User phone number.
|
2023-02-06 10:17:51 +01:00
|
|
|
$userManagementTable->rowclass['captions_phone'] = 'field_half_width';
|
2023-02-03 14:10:26 +01:00
|
|
|
$userManagementTable->rowclass['fields_phone'] = 'field_half_width';
|
|
|
|
$userManagementTable->data['captions_phone'][0] = __('Phone number');
|
|
|
|
$userManagementTable->data['fields_phone'][0] = html_print_input_text_extended(
|
|
|
|
'phone',
|
|
|
|
$user_info['phone'],
|
|
|
|
'phone',
|
|
|
|
'',
|
|
|
|
'20',
|
|
|
|
'30',
|
|
|
|
$view_mode,
|
|
|
|
'',
|
|
|
|
[
|
2023-02-06 10:17:51 +01:00
|
|
|
'class' => 'input',
|
2023-02-03 14:10:26 +01:00
|
|
|
'placeholder' => __('Phone number'),
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
2023-02-16 12:59:23 +01:00
|
|
|
$fieldsAdminUserCount = 0;
|
2023-02-16 07:25:26 +01:00
|
|
|
$userManagementTable->rowclass['captions_fields_admin_user'] = 'field_half_width w50p';
|
2023-02-16 12:59:23 +01:00
|
|
|
$userManagementTable->cellclass['captions_fields_admin_user'][$fieldsAdminUserCount] = 'wrap';
|
|
|
|
if (empty($doubleAuthentication) === false) {
|
|
|
|
$userManagementTable->data['captions_fields_admin_user'][$fieldsAdminUserCount] = $doubleAuthentication;
|
|
|
|
$fieldsAdminUserCount++;
|
|
|
|
}
|
|
|
|
|
2023-02-07 13:19:40 +01:00
|
|
|
if (users_is_admin() === true) {
|
|
|
|
$globalProfileContent = [];
|
|
|
|
$globalProfileContent[] = '<span>'.__('Administrator user').'</span>';
|
|
|
|
$globalProfileContent[] = html_print_checkbox_switch(
|
|
|
|
'is_admin',
|
|
|
|
0,
|
|
|
|
$user_info['is_admin'],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
2023-02-16 12:59:23 +01:00
|
|
|
$userManagementTable->cellclass['captions_fields_admin_user'][$fieldsAdminUserCount] = 'wrap';
|
|
|
|
$userManagementTable->data['captions_fields_admin_user'][$fieldsAdminUserCount] = html_print_div(
|
2023-02-07 13:19:40 +01:00
|
|
|
[
|
|
|
|
'class' => 'margin-top-10',
|
|
|
|
'style' => 'display: flex; flex-direction: row-reverse; align-items: center;',
|
|
|
|
'content' => implode('', $globalProfileContent),
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
// Insert in the latest row this hidden input avoiding create empty rows.
|
|
|
|
$userManagementTable->data['fields_phone'][0] .= html_print_input_hidden(
|
|
|
|
'is_admin_sent',
|
|
|
|
0,
|
|
|
|
true
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2023-02-03 14:10:26 +01:00
|
|
|
// Password management.
|
|
|
|
$passwordManageTable = new stdClass();
|
2023-04-04 09:24:29 +02:00
|
|
|
$passwordManageTable->class = 'full_section';
|
2023-02-03 14:10:26 +01:00
|
|
|
$passwordManageTable->id = 'password_manage';
|
|
|
|
$passwordManageTable->style = [];
|
|
|
|
$passwordManageTable->rowclass = [];
|
|
|
|
$passwordManageTable->data = [];
|
|
|
|
|
|
|
|
$passwordManageTable->data['captions_newpassword'][0] = __('New password');
|
|
|
|
$passwordManageTable->rowclass['fields_newpassword'] = 'w540px';
|
|
|
|
$passwordManageTable->data['fields_newpassword'][0] = html_print_input_text_extended(
|
|
|
|
'password_new',
|
|
|
|
'',
|
|
|
|
'password_new',
|
|
|
|
'',
|
|
|
|
'25',
|
|
|
|
'45',
|
|
|
|
$view_mode,
|
|
|
|
'',
|
|
|
|
[
|
2023-02-06 23:10:28 +01:00
|
|
|
'class' => 'input w100p',
|
2023-02-03 14:10:26 +01:00
|
|
|
'placeholder' => __('Password'),
|
|
|
|
],
|
|
|
|
true,
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
|
|
|
$passwordManageTable->data['captions_repeatpassword'][0] = __('Repeat new password');
|
|
|
|
$passwordManageTable->rowclass['fields_repeatpassword'] = 'w540px';
|
|
|
|
$passwordManageTable->data['fields_repeatpassword'][0] = html_print_input_text_extended(
|
|
|
|
'password_confirm',
|
|
|
|
'',
|
|
|
|
'password_conf',
|
|
|
|
'',
|
|
|
|
'20',
|
|
|
|
'45',
|
|
|
|
$view_mode,
|
|
|
|
'',
|
|
|
|
[
|
2023-02-06 23:10:28 +01:00
|
|
|
'class' => 'input w100p',
|
2023-02-03 14:10:26 +01:00
|
|
|
'placeholder' => __('Password confirmation'),
|
|
|
|
],
|
|
|
|
true,
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
|
|
|
if ($new_user === false) {
|
|
|
|
$passwordManageTable->data['captions_currentpassword'][0] = __('Current password');
|
|
|
|
$passwordManageTable->rowclass['fields_currentpassword'] = 'w540px';
|
|
|
|
$passwordManageTable->data['fields_currentpassword'][0] = html_print_input_text_extended(
|
|
|
|
'own_password_confirm',
|
|
|
|
'',
|
|
|
|
'own_password_confirm',
|
|
|
|
'',
|
|
|
|
'20',
|
|
|
|
'45',
|
|
|
|
$view_mode,
|
|
|
|
'',
|
|
|
|
[
|
2023-02-06 23:10:28 +01:00
|
|
|
'class' => 'input w100p',
|
2023-02-03 14:10:26 +01:00
|
|
|
'placeholder' => __('Own password confirmation'),
|
|
|
|
],
|
|
|
|
true,
|
|
|
|
true
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
$userManagementTable->data['passwordManage_table'] = html_print_table($passwordManageTable, true);
|
|
|
|
|
2023-03-14 13:11:57 +01:00
|
|
|
if (users_is_admin() === true) {
|
|
|
|
$userManagementTable->rowclass['captions_loginErrorUser'] = 'field_half_width w50p';
|
|
|
|
$userManagementTable->cellclass['captions_loginErrorUser'][0] = 'wrap';
|
|
|
|
$userManagementTable->cellclass['captions_loginErrorUser'][1] = 'wrap';
|
|
|
|
$notLoginCheckContent = [];
|
|
|
|
$notLoginCheckContent[] = '<span>'.__('Not Login').'</span>';
|
|
|
|
$notLoginCheckContent[] = html_print_checkbox_switch(
|
|
|
|
'not_login',
|
|
|
|
1,
|
|
|
|
$user_info['not_login'],
|
|
|
|
true
|
|
|
|
);
|
2023-02-07 13:19:40 +01:00
|
|
|
|
2023-03-14 13:11:57 +01:00
|
|
|
$userManagementTable->data['captions_loginErrorUser'][0] = html_print_div(
|
|
|
|
[
|
|
|
|
'class' => 'margin-top-10',
|
|
|
|
'style' => 'display: flex; flex-direction: row-reverse; align-items: center;',
|
|
|
|
'content' => implode('', $notLoginCheckContent),
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
$userManagementTable->data['captions_loginErrorUser'][0] .= ui_print_input_placeholder(
|
|
|
|
__('The user with not login set only can access to API.'),
|
|
|
|
true
|
|
|
|
);
|
2023-02-07 13:19:40 +01:00
|
|
|
|
2023-03-14 13:11:57 +01:00
|
|
|
$localUserCheckContent = [];
|
|
|
|
$localUserCheckContent[] = '<span>'.__('Local User').'</span>';
|
|
|
|
$localUserCheckContent[] = html_print_checkbox_switch(
|
|
|
|
'local_user',
|
|
|
|
1,
|
|
|
|
$user_info['local_user'],
|
|
|
|
true
|
|
|
|
);
|
2023-02-07 13:19:40 +01:00
|
|
|
|
2023-03-14 13:11:57 +01:00
|
|
|
$userManagementTable->data['captions_loginErrorUser'][1] = html_print_div(
|
|
|
|
[
|
|
|
|
'class' => 'margin-top-10',
|
|
|
|
'style' => 'display: flex; flex-direction: row-reverse; align-items: center;',
|
|
|
|
'content' => implode('', $localUserCheckContent),
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
$userManagementTable->data['captions_loginErrorUser'][1] .= ui_print_input_placeholder(
|
|
|
|
__('The user with local authentication enabled will always use local authentication.'),
|
|
|
|
true
|
|
|
|
);
|
|
|
|
}
|
2023-02-07 13:19:40 +01:00
|
|
|
|
2023-04-14 10:02:41 +02:00
|
|
|
$userManagementTable->data['show_tips_startup'][0] = html_print_checkbox_switch(
|
|
|
|
'show_tips_startup',
|
|
|
|
1,
|
|
|
|
(isset($user_info['show_tips_startup']) === false) ? true : $user_info['show_tips_startup'],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
2023-03-08 09:13:04 +01:00
|
|
|
$userManagementTable->data['show_tips_startup'][1] = '<span>'.__('Show usage tips at startup').'</span>';
|
2023-02-07 13:19:40 +01:00
|
|
|
|
|
|
|
// Session time input.
|
|
|
|
$userManagementTable->rowclass['captions_userSessionTime'] = 'field_half_width';
|
|
|
|
$userManagementTable->rowclass['fields_userSessionTime'] = 'field_half_width';
|
|
|
|
$userManagementTable->cellclass['fields_userSessionTime'][0] = 'wrap';
|
|
|
|
$userManagementTable->data['captions_userSessionTime'][0] = __('Session time');
|
|
|
|
$userManagementTable->data['fields_userSessionTime'][0] = html_print_input_text(
|
|
|
|
'session_time',
|
|
|
|
$user_info['session_time'],
|
|
|
|
'',
|
|
|
|
5,
|
|
|
|
5,
|
|
|
|
true
|
|
|
|
);
|
|
|
|
$userManagementTable->data['fields_userSessionTime'][0] .= ui_print_input_placeholder(
|
|
|
|
__('This is defined in minutes, If you wish a permanent session should putting -1 in this field.'),
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
2023-02-03 14:10:26 +01:00
|
|
|
// Title for Autorefresh.
|
2023-02-07 15:39:53 +01:00
|
|
|
$userManagementTable->data['title_autorefresh'] = html_print_subtitle_table(__('Autorefresh'));
|
2023-02-03 14:10:26 +01:00
|
|
|
|
|
|
|
// Autorefresh selects.
|
|
|
|
$select_out = html_print_select(
|
|
|
|
$autorefresh_list_out,
|
|
|
|
'autorefresh_list_out[]',
|
|
|
|
'',
|
|
|
|
'',
|
|
|
|
'',
|
|
|
|
'',
|
|
|
|
true,
|
|
|
|
true,
|
|
|
|
true,
|
|
|
|
'',
|
|
|
|
false,
|
2023-02-22 16:24:11 +01:00
|
|
|
'width:100%;'
|
2023-02-03 14:10:26 +01:00
|
|
|
);
|
|
|
|
|
|
|
|
$select_in = html_print_select(
|
|
|
|
$autorefresh_list,
|
|
|
|
'autorefresh_list[]',
|
|
|
|
'',
|
|
|
|
'',
|
|
|
|
'',
|
|
|
|
'',
|
|
|
|
true,
|
|
|
|
true,
|
|
|
|
true,
|
|
|
|
'',
|
|
|
|
false,
|
2023-02-22 16:24:11 +01:00
|
|
|
'width:100%;'
|
2023-02-03 14:10:26 +01:00
|
|
|
);
|
|
|
|
|
|
|
|
// Full list pages generation.
|
|
|
|
$autorefreshFullListContent = [];
|
|
|
|
$autorefreshFullListContent[] = '<p class="autorefresh_select_text">'.__('Full list of pages').'</p>';
|
|
|
|
$autorefreshFullListContent[] = html_print_div(
|
|
|
|
[
|
|
|
|
'id' => 'autorefreshAllPagesList',
|
|
|
|
'content' => $select_out,
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
|
|
|
// Selected pages generation.
|
|
|
|
$autorefreshSelectedListContent = [];
|
|
|
|
$autorefreshSelectedListContent[] = '<p class="autorefresh_select_text">'.__('Pages with autorefresh').'</p>';
|
|
|
|
$autorefreshSelectedListContent[] = html_print_div(
|
|
|
|
[
|
|
|
|
'id' => 'autorefreshSelectedPagesList',
|
|
|
|
'content' => $select_in,
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
|
|
|
// Controls generation.
|
|
|
|
$autorefreshControlsContent = [];
|
|
|
|
$autorefreshControlsContent[] = html_print_anchor(
|
|
|
|
[
|
|
|
|
'id' => 'addAutorefreshPage',
|
|
|
|
'href' => 'javascript:',
|
|
|
|
'content' => html_print_image(
|
2023-02-06 10:17:51 +01:00
|
|
|
'images/plus.svg',
|
2023-02-03 14:10:26 +01:00
|
|
|
true,
|
|
|
|
[
|
|
|
|
'id' => 'right_autorefreshlist',
|
2023-02-06 23:10:28 +01:00
|
|
|
'style' => 'width: 24px; margin: 10px 10px 0;',
|
2023-02-03 14:10:26 +01:00
|
|
|
'alt' => __('Push selected pages into autorefresh list'),
|
|
|
|
'title' => __('Push selected pages into autorefresh list'),
|
|
|
|
]
|
|
|
|
),
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
$autorefreshControlsContent[] = html_print_anchor(
|
|
|
|
[
|
|
|
|
'id' => 'removeAutorefreshPage',
|
|
|
|
'href' => 'javascript:',
|
|
|
|
'content' => html_print_image(
|
2023-02-06 10:17:51 +01:00
|
|
|
'images/minus.svg',
|
2023-02-03 14:10:26 +01:00
|
|
|
true,
|
|
|
|
[
|
|
|
|
'id' => 'left_autorefreshlist',
|
2023-02-06 23:10:28 +01:00
|
|
|
'style' => 'width: 24px; margin: 10px 10px 0;',
|
2023-02-03 14:10:26 +01:00
|
|
|
'alt' => __('Pop selected pages out of autorefresh list'),
|
|
|
|
'title' => __('Pop selected pages out of autorefresh list'),
|
|
|
|
]
|
|
|
|
),
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
|
|
|
// Container with all pages list.
|
|
|
|
$autorefreshFullList = html_print_div(
|
|
|
|
[
|
|
|
|
'class' => 'autorefresh_select_list_out',
|
|
|
|
'content' => implode('', $autorefreshFullListContent),
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
|
|
|
// Container with selected pages list.
|
|
|
|
$autorefreshSelectedList = html_print_div(
|
|
|
|
[
|
|
|
|
'class' => 'autorefresh_select_list',
|
|
|
|
'content' => implode('', $autorefreshSelectedListContent),
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
|
|
|
// Container with controls.
|
|
|
|
$autorefreshControls = html_print_div(
|
|
|
|
[
|
|
|
|
'class' => 'autorefresh_select_arrows',
|
|
|
|
'content' => implode('', $autorefreshControlsContent),
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
|
|
|
// Generate final control table.
|
|
|
|
$autorefreshTable = html_print_div(
|
|
|
|
[
|
|
|
|
'class' => 'autorefresh_select',
|
|
|
|
'content' => $autorefreshFullList.$autorefreshControls.$autorefreshSelectedList,
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
2023-02-06 10:17:51 +01:00
|
|
|
$userManagementTable->rowclass['captions_autorefreshList'] = 'field_half_width';
|
|
|
|
$userManagementTable->rowclass['fields_autorefreshList'] = 'field_half_width';
|
2023-02-06 23:10:28 +01:00
|
|
|
$userManagementTable->cellstyle['fields_autorefreshList'][0] = 'width: 100%';
|
2023-02-03 14:10:26 +01:00
|
|
|
$userManagementTable->data['captions_autorefreshList'] = __('Autorefresh pages');
|
|
|
|
$userManagementTable->data['fields_autorefreshList'] = $autorefreshTable;
|
|
|
|
|
2023-02-06 10:17:51 +01:00
|
|
|
$userManagementTable->rowclass['captions_autorefreshTime'] = 'field_half_width';
|
2023-02-03 14:10:26 +01:00
|
|
|
$userManagementTable->rowclass['fields_autorefreshTime'] = 'field_half_width';
|
2023-02-07 13:19:40 +01:00
|
|
|
$userManagementTable->cellclass['fields_autorefreshTime'][0] = 'wrap';
|
2023-02-03 14:10:26 +01:00
|
|
|
$userManagementTable->data['captions_autorefreshTime'][0] = __('Time for autorefresh');
|
|
|
|
$userManagementTable->data['fields_autorefreshTime'][0] = html_print_select(
|
|
|
|
get_refresh_time_array(),
|
|
|
|
'time_autorefresh',
|
2023-04-14 10:02:41 +02:00
|
|
|
($user_info['time_autorefresh'] ?? 0),
|
2023-02-03 14:10:26 +01:00
|
|
|
'',
|
|
|
|
'',
|
|
|
|
'',
|
|
|
|
true,
|
|
|
|
false,
|
|
|
|
false
|
|
|
|
);
|
2023-02-07 13:19:40 +01:00
|
|
|
$userManagementTable->data['fields_autorefreshTime'][0] .= ui_print_input_placeholder(
|
|
|
|
__('Interval of autorefresh of the elements, by default they are 30 seconds, needing to enable the autorefresh first'),
|
|
|
|
true
|
|
|
|
);
|
2023-02-03 14:10:26 +01:00
|
|
|
|
|
|
|
// Title for Language and Appearance.
|
2023-02-07 15:39:53 +01:00
|
|
|
$userManagementTable->data['title_lookAndFeel'] = html_print_subtitle_table(__('Language and Appearance'));
|
2023-02-07 15:33:29 +01:00
|
|
|
// Language and color scheme.
|
2023-03-14 13:11:57 +01:00
|
|
|
$userManagementTable->rowclass['line1_looknfeel'] = 'field_half_width';
|
|
|
|
$userManagementTable->rowclass['line2_looknfeel'] = 'field_half_width';
|
|
|
|
$userManagementTable->data['line1_looknfeel'][0] = __('Language');
|
|
|
|
$userManagementTable->data['line2_looknfeel'][0] = html_print_select_from_sql(
|
2023-02-03 14:10:26 +01:00
|
|
|
'SELECT id_language, name FROM tlanguage',
|
|
|
|
'language',
|
|
|
|
$user_info['language'],
|
|
|
|
'',
|
|
|
|
__('Default'),
|
|
|
|
'default',
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
2023-03-14 13:11:57 +01:00
|
|
|
if (is_metaconsole() === true) {
|
|
|
|
if (users_is_admin() === true) {
|
|
|
|
$userManagementTable->data['line1_looknfeel'][1] = $outputMetaAccess[0];
|
|
|
|
$userManagementTable->data['line2_looknfeel'][1] = $outputMetaAccess[1];
|
|
|
|
}
|
|
|
|
} else {
|
2023-03-27 12:11:59 +02:00
|
|
|
if (function_exists('skins_print_select')) {
|
|
|
|
$userManagementTable->data['line1_looknfeel'][1] = __('User color scheme');
|
|
|
|
$userManagementTable->data['line2_looknfeel'][1] = skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true);
|
|
|
|
}
|
2023-03-14 13:11:57 +01:00
|
|
|
}
|
2023-02-03 14:10:26 +01:00
|
|
|
|
2023-02-06 10:17:51 +01:00
|
|
|
$userManagementTable->rowclass['captions_blocksize_eventfilter'] = 'field_half_width';
|
2023-02-03 14:10:26 +01:00
|
|
|
$userManagementTable->rowclass['fields_blocksize_eventfilter'] = 'field_half_width';
|
|
|
|
$userManagementTable->data['captions_blocksize_eventfilter'][0] = __('Block size for pagination');
|
|
|
|
$userManagementTable->data['fields_blocksize_eventfilter'][0] = html_print_input_text(
|
|
|
|
'block_size',
|
|
|
|
$user_info['block_size'],
|
|
|
|
'',
|
|
|
|
5,
|
|
|
|
5,
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
|
|
|
$userManagementTable->data['captions_blocksize_eventfilter'][1] = __('Event filter');
|
|
|
|
$userManagementTable->data['fields_blocksize_eventfilter'][1] = html_print_select(
|
|
|
|
$event_filter,
|
|
|
|
'default_event_filter',
|
2023-04-14 10:02:41 +02:00
|
|
|
($user_info['default_event_filter'] ?? 0),
|
2023-02-03 14:10:26 +01:00
|
|
|
'',
|
|
|
|
'',
|
|
|
|
__('None'),
|
|
|
|
true,
|
|
|
|
false,
|
|
|
|
false
|
|
|
|
);
|
2023-03-14 13:11:57 +01:00
|
|
|
if (is_metaconsole() === false) {
|
|
|
|
// Home screen table.
|
|
|
|
$homeScreenTable = new stdClass();
|
2023-04-04 09:24:29 +02:00
|
|
|
$homeScreenTable->class = 'w100p full_section';
|
2023-03-14 13:11:57 +01:00
|
|
|
$homeScreenTable->id = 'home_screen_table';
|
|
|
|
$homeScreenTable->style = [];
|
|
|
|
$homeScreenTable->rowclass = [];
|
|
|
|
$homeScreenTable->data = [];
|
|
|
|
// Home screen.
|
|
|
|
$homeScreenTable->data['captions_homescreen'][0] = __('Home screen');
|
|
|
|
$homeScreenTable->colspan['captions_homescreen'][0] = 2;
|
|
|
|
$homeScreenTable->rowclass['captions_homescreen'] = 'field_half_width';
|
|
|
|
$homeScreenTable->rowclass['fields_homescreen'] = 'field_half_width flex';
|
|
|
|
$homeScreenTable->data['fields_homescreen'][0] = html_print_select(
|
|
|
|
$homeScreenValues,
|
|
|
|
'section',
|
|
|
|
io_safe_output($user_info['section']),
|
|
|
|
'show_data_section();',
|
|
|
|
'',
|
|
|
|
-1,
|
|
|
|
true,
|
|
|
|
false,
|
|
|
|
false
|
|
|
|
);
|
|
|
|
$homeScreenTable->data['fields_homescreen'][1] = html_print_div(
|
|
|
|
[
|
|
|
|
'class' => 'w100p',
|
|
|
|
'content' => $customHomeScreenDataField,
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
2023-02-03 14:10:26 +01:00
|
|
|
|
2023-03-14 13:11:57 +01:00
|
|
|
$userManagementTable->rowclass['homescreen_table'] = 'w100p';
|
|
|
|
$userManagementTable->data['homescreen_table'] = html_print_table($homeScreenTable, true);
|
|
|
|
}
|
2023-02-03 14:10:26 +01:00
|
|
|
|
2023-03-14 13:11:57 +01:00
|
|
|
if (is_metaconsole() === true && users_is_admin() === true) {
|
|
|
|
$userManagementTable->rowclass['search_custom1_looknfeel'] = 'field_half_width';
|
|
|
|
$userManagementTable->rowclass['search_custom2_looknfeel'] = 'field_half_width flex-column';
|
|
|
|
$userManagementTable->data['search_custom1_looknfeel'][0] = $searchCustomFieldView[0];
|
|
|
|
$userManagementTable->data['search_custom2_looknfeel'][0] = $searchCustomFieldView[1];
|
|
|
|
|
|
|
|
$userManagementTable->rowclass['agent_manager1_looknfeel'] = 'field_half_width';
|
|
|
|
$userManagementTable->rowclass['agent_manager2_looknfeel'] = 'field_half_width flex-column';
|
|
|
|
$userManagementTable->data['agent_manager1_looknfeel'][0] = $metaconsoleAgentManager[0];
|
|
|
|
$userManagementTable->data['agent_manager1_looknfeel'][1] = $metaconsoleAgentManager[2];
|
|
|
|
$userManagementTable->data['agent_manager2_looknfeel'][0] = $metaconsoleAgentManager[1];
|
|
|
|
$userManagementTable->data['agent_manager2_looknfeel'][1] = $metaconsoleAgentManager[3];
|
|
|
|
}
|
2023-02-03 14:10:26 +01:00
|
|
|
|
|
|
|
// Timezone.
|
2023-02-06 10:17:51 +01:00
|
|
|
$userManagementTable->rowclass['captions_timezone'] = 'field_half_width';
|
2023-02-03 14:10:26 +01:00
|
|
|
$userManagementTable->rowclass['fields_timezone'] = 'field_half_width';
|
|
|
|
$userManagementTable->colspan['captions_timezone'][0] = 2;
|
2023-02-06 10:17:51 +01:00
|
|
|
$userManagementTable->cellstyle['fields_timezone'][0] = 'align-self: baseline;';
|
2023-02-07 13:19:40 +01:00
|
|
|
$userManagementTable->cellclass['fields_timezone'][0] = 'wrap';
|
2023-02-03 14:10:26 +01:00
|
|
|
$userManagementTable->data['captions_timezone'][0] = __('Time zone');
|
|
|
|
$userManagementTable->data['fields_timezone'][0] = html_print_timezone_select('timezone', $user_info['timezone']);
|
2023-02-07 13:19:40 +01:00
|
|
|
$userManagementTable->data['fields_timezone'][0] .= ui_print_input_placeholder(
|
2023-02-03 14:10:26 +01:00
|
|
|
__('The timezone must be that of the associated server.'),
|
|
|
|
true
|
|
|
|
);
|
2023-03-14 13:11:57 +01:00
|
|
|
if (is_metaconsole() === false) {
|
|
|
|
$userManagementTable->data['fields_timezone'][1] = html_print_div(
|
|
|
|
[
|
|
|
|
'id' => 'timezone-picker',
|
|
|
|
'content' => implode('', $timezoneContent),
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
}
|
2023-02-03 14:10:26 +01:00
|
|
|
|
|
|
|
// Title for Language and Appearance.
|
2023-02-07 15:39:53 +01:00
|
|
|
$userManagementTable->data['title_additionalSettings'] = html_print_subtitle_table(__('Additional settings'));
|
2023-02-03 14:10:26 +01:00
|
|
|
|
2023-02-06 10:17:51 +01:00
|
|
|
$userManagementTable->rowclass['captions_addSettings'] = 'field_half_width';
|
2023-02-03 14:10:26 +01:00
|
|
|
$userManagementTable->rowclass['fields_addSettings'] = 'field_half_width';
|
2023-02-06 23:10:28 +01:00
|
|
|
$userManagementTable->cellstyle['fields_addSettings'][0] = 'align-self: baseline';
|
|
|
|
$userManagementTable->cellstyle['fields_addSettings'][1] = 'width: 50%;flex-direction: column;align-items: flex-start;';
|
2023-02-03 14:10:26 +01:00
|
|
|
$userManagementTable->data['captions_addSettings'][0] = __('Comments');
|
|
|
|
$userManagementTable->data['fields_addSettings'][0] = html_print_textarea(
|
|
|
|
'comments',
|
2023-02-06 10:17:51 +01:00
|
|
|
5,
|
2023-02-03 14:10:26 +01:00
|
|
|
65,
|
|
|
|
$user_info['comments'],
|
|
|
|
($view_mode ? 'readonly="readonly"' : ''),
|
2023-02-06 23:10:28 +01:00
|
|
|
true,
|
|
|
|
''
|
2023-02-03 14:10:26 +01:00
|
|
|
);
|
|
|
|
|
|
|
|
$userManagementTable->data['captions_addSettings'][1] = __('Login allowed IP list');
|
2023-02-03 16:36:04 +01:00
|
|
|
$userManagementTable->data['fields_addSettings'][1] = html_print_div(
|
|
|
|
[
|
|
|
|
'class' => 'edit_user_allowed_ip',
|
|
|
|
'content' => html_print_textarea(
|
|
|
|
'allowed_ip_list',
|
2023-02-06 10:17:51 +01:00
|
|
|
5,
|
2023-02-03 16:36:04 +01:00
|
|
|
65,
|
2023-04-14 10:02:41 +02:00
|
|
|
($user_info['allowed_ip_list'] ?? ''),
|
2023-02-03 16:36:04 +01:00
|
|
|
(((bool) $view_mode === true) ? 'readonly="readonly"' : ''),
|
|
|
|
true
|
|
|
|
),
|
|
|
|
],
|
2023-02-03 14:10:26 +01:00
|
|
|
true
|
|
|
|
);
|
|
|
|
|
2023-02-07 13:19:40 +01:00
|
|
|
$userManagementTable->data['fields_addSettings'][1] .= ui_print_input_placeholder(
|
|
|
|
__('Add the source IPs that will allow console access. Each IP must be separated only by comma. * allows all.'),
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
2023-02-06 23:10:28 +01:00
|
|
|
$allowAllIpsContent = [];
|
|
|
|
$allowAllIpsContent[] = '<span>'.__('Allow all IPs').'</span>';
|
|
|
|
$allowAllIpsContent[] = html_print_div(
|
2023-02-03 14:10:26 +01:00
|
|
|
[
|
|
|
|
'content' => html_print_checkbox_switch(
|
|
|
|
'allowed_ip_active',
|
|
|
|
0,
|
2023-04-14 10:02:41 +02:00
|
|
|
($user_info['allowed_ip_active'] ?? 0),
|
2023-02-03 14:10:26 +01:00
|
|
|
true
|
2023-02-03 16:36:04 +01:00
|
|
|
),
|
2023-02-03 14:10:26 +01:00
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
|
|
|
|
2023-02-06 23:10:28 +01:00
|
|
|
$userManagementTable->data['fields_addSettings'][1] .= html_print_div(
|
|
|
|
[
|
|
|
|
'class' => 'margin-top-10',
|
|
|
|
'style' => 'display: flex; flex-direction: row-reverse; align-items: center;',
|
|
|
|
'content' => implode('', $allowAllIpsContent),
|
|
|
|
],
|
|
|
|
true
|
|
|
|
);
|
2023-02-03 16:36:04 +01:00
|
|
|
|
2023-04-14 10:02:41 +02:00
|
|
|
if (isset($CodeQRTable) === true || isset($apiTokenContent) === true) {
|
|
|
|
// QR Code and API Token advice.
|
|
|
|
html_print_div(
|
|
|
|
[
|
|
|
|
'id' => 'api_qrcode_display',
|
|
|
|
'content' => $CodeQRTable.$apiTokenContent,
|
|
|
|
]
|
|
|
|
);
|
|
|
|
}
|
2023-02-16 12:44:11 +01:00
|
|
|
|
2023-02-03 14:10:26 +01:00
|
|
|
html_print_table($userManagementTable);
|
2023-03-29 15:34:03 +02:00
|
|
|
|
|
|
|
$vcard_data = [];
|
|
|
|
$vcard_data['version'] = '3.0';
|
2023-03-30 16:50:30 +02:00
|
|
|
$vcard_data['firstName'] = $user_info['fullname'];
|
|
|
|
$vcard_data['lastName'] = '';
|
|
|
|
$vcard_data['middleName'] = '';
|
2023-03-29 15:34:03 +02:00
|
|
|
$vcard_data['workPhone'] = $user_info['phone'];
|
|
|
|
$vcard_data['email'] = $user_info['email'];
|
|
|
|
$vcard_data['organization'] = io_safe_output(get_product_name());
|
|
|
|
$vcard_data['url'] = ui_get_full_url('index.php');
|
|
|
|
|
|
|
|
$vcard_json = json_encode($vcard_data);
|
|
|
|
?>
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
|
|
$(document).ready(function () {
|
|
|
|
paint_vcard(
|
|
|
|
<?php echo $vcard_json; ?>,
|
|
|
|
"#qr_code_agent_view",
|
|
|
|
128,
|
|
|
|
128
|
|
|
|
);
|
|
|
|
});
|
|
|
|
</script>
|