* SPDX-License-Identifier: AGPL-3.0-only
************************************/
// crmv@341228: rewrite and format, move checks to Users::save()
require_once('modules/Users/Users.php');
require_once('include/logging.php');
require_once('include/utils/UserInfoUtil.php');
global $adb, $table_prefix, $current_user;
$log = &LoggerManager::getLogger('index');
$is_admin = is_admin($current_user);
$focus = CRMEntity::getInstance('Users');
$focus->mode = '';
if (($_REQUEST["record"] ?? '') !== '') {
$focus->mode = 'edit';
$focus->id = RequestHandler::paramInt("record");
}
if (empty($_REQUEST['status'])) {
$_REQUEST['status'] = 'Active';
}
$mode = null;
foreach (['dup_check', 'deleteImage', 'changepassword'] as $k) {
if (($_REQUEST[$k] ?? '') !== '') {
$mode = $k;
break;
}
}
switch ($mode) {
case 'dup_check':
if (!$is_admin) {
echo 'Unauthorized';
exit;
}
$user_name = $_REQUEST['userName'] ?? '';
$user_query = "SELECT user_name FROM " . $table_prefix . "_users WHERE user_name =?";
$user_result = $adb->pquery($user_query, [$user_name]);
$group_query = "SELECT groupname FROM " . $table_prefix . "_groups WHERE groupname =?";
$group_result = $adb->pquery($group_query, [$user_name]);
if ($adb->num_rows($user_result) > 0) {
echo $mod_strings['LBL_USERNAME_EXIST'];
} elseif ($adb->num_rows($group_result) > 0) {
echo $mod_strings['LBL_GROUPNAME_EXIST'];
} else {
echo 'SUCCESS';
}
exit;
case 'deleteImage':
if (!$focus->filterOrDenySave()) {
echo 'Unauthorized';
exit;
}
$focus->id = $_REQUEST['recordid'];
$focus->deleteImage();
echo "SUCCESS";
exit;
case 'changepassword':
if (!$focus->filterOrDenySave()) {
echo 'Unauthorized';
exit;
}
$focus->retrieve_entity_info($_REQUEST['record'], 'Users');
$focus->id = $_REQUEST['record'];
if (!isset($_POST['new_password'])) {
exit;
}
$new_passwd = $_POST['new_password'];
if (!$focus->change_password('', $new_passwd, true, true)) {
RequestHandler::outputRedirect("index.php?action=Error&module=Users&error_string=" . urlencode($focus->error_string)); // crmv@150748
exit;
}
break;
default:
// normal save
$_REQUEST["is_admin"] = $_POST['is_admin'] ?? 'off';
$_REQUEST["deleted"] = $_POST['deleted'] ?? '0';
$_REQUEST["homeorder"] = $_POST['homeorder'] ?? ''; // crmv@283757
$_REQUEST["roleid"] = ($_POST['roleid'] ?? null) ?: ($_POST['user_role'] ?? null) ?: '';
$focus->column_fields['internal_mailer'] = intval(($_REQUEST['internal_mailer'] ?? '') === 'on');
if (VteSession::hasKey('internal_mailer') && VteSession::get('internal_mailer') != $focus->column_fields['internal_mailer'])
VteSession::set('internal_mailer', $focus->column_fields['internal_mailer']);
setObjectValuesFromRequest($focus);
// crmv@42024 - translate separators
$focus->column_fields['decimal_separator'] = $focus->convertToSeparatorValue($focus->column_fields['decimal_separator']);
$focus->column_fields['thousands_separator'] = $focus->convertToSeparatorValue($focus->column_fields['thousands_separator']);
// crmv@42024e
if (!$focus->filterOrDenySave()) {
RequestHandler::outputRedirect("index.php?module=Users&action=Logout"); // crmv@150748
exit;
}
$focus->save("Users"); //crmv@22622
$return_id = $focus->id;
//crmv@17001
if($_REQUEST['mode'] == 'create') {
$sql = "update ".$table_prefix."_users set hour_format=? where id=?";
$adb->pquery($sql, array('24', $focus->id));
}
//crmv@17001e
if (($focus->id ?? '') != '' && ($_POST['group_name'] ?? '') != '') {
updateUsers2GroupMapping($_POST['group_name'], $focus->id);
}
// crmv@187823
if ($_REQUEST['mode'] == 'create') {
$focus->initCalendarSharing();
} else {
$shareduser_ids = array_filter(explode(";", $_REQUEST['shar_userid']));
$shareduserocc_ids = array_filter(explode(";", $_REQUEST['sharocc_userid']));
$shownduser_ids = array_filter(explode(";", $_REQUEST['shown_userid']));
$focus->updateCalendarSharing($shareduser_ids, $shareduserocc_ids, $shownduser_ids);
}
// crmv@187823e
break;
}
$return_module = "Users";
$return_action = "DetailView";
if (($_POST['return_module'] ?? '') != "") $return_module = vtlib_purify($_REQUEST['return_module']);
if (($_POST['return_action'] ?? '') != "") $return_action = vtlib_purify($_REQUEST['return_action']);
if (($_POST['return_id'] ?? '') != "") $return_id = vtlib_purify($_REQUEST['return_id']);
if (isset($_REQUEST['activity_mode'])) $activitymode = '&activity_mode=' . vtlib_purify($_REQUEST['activity_mode']);
if (isset($_POST['parenttab'])) $parenttab = getParentTab();
$log->debug("Saved record with id of " . $return_id);
if ($_REQUEST['mode'] == 'create') {
global $app_strings, $mod_strings, $default_charset;
require_once('modules/Emails/mail.php');
$user_emailid = $focus->column_fields['email1'];
$subject = $mod_strings['User Login Details'];
$email_body = $app_strings['MSG_DEAR']." ". $focus->column_fields['last_name'] .",
";
$email_body .= $app_strings['LBL_PLEASE_CLICK'] . " "
. $app_strings['LBL_HERE'] . " " . $mod_strings['LBL_TO_LOGIN'] . "
";
$email_body .= $mod_strings['LBL_USER_NAME'] . " : " . $focus->column_fields['user_name'] . "
";
//crmv@36525
if (!($focus->column_fields['use_ldap'] == '1' || $focus->column_fields['use_ldap'] == 'on')) {
$email_body .= $mod_strings['LBL_PASSWORD'] . " : " . $focus->column_fields['user_password'] . "
";
}
//crmv@36525e
$email_body .= $mod_strings['LBL_ROLE_NAME'] . " : " . getRoleName($_POST['user_role']) . "
";
$email_body .= "
" . $app_strings['MSG_THANKS'] . "
" . $current_user->user_name;
$mail_status = send_mail('Users', $user_emailid, $HELPDESK_SUPPORT_NAME, $HELPDESK_SUPPORT_EMAIL_ID, $subject, $email_body);
if ($mail_status != 1) {
$mail_status_str = $user_emailid . "=" . $mail_status . "&&&";
$error_str = getMailErrorString($mail_status_str);
}
}
//crmv@29617
if (($_REQUEST['notification_module_settings'] ?? '') === 'yes') {
$ModNotificationsFocus = ModNotifications::getInstance(); // crmv@164122
$ModNotificationsFocus->saveModuleSettings($focus->id, $_REQUEST);
}
//crmv@29617e
//crmv@230349
if ($return_module == 'Calendar' && $return_action == 'index')
$location = "index.php?action=" . vtlib_purify($return_action) . "&module=" . vtlib_purify($return_module);
else
$location = "index.php?action=" . vtlib_purify($return_action) . "&module=" . vtlib_purify($return_module) . "&record=" . vtlib_purify($return_id);
//crmv@230349e
if ($_REQUEST['modechk'] != 'prefview') {
$location .= "&parenttab=" . vtlib_purify($parenttab);
}
if ($error_str != '') {
$user = $focus->column_fields['user_name'];
$location .= "&user=$user&$error_str";
}
RequestHandler::outputRedirect($location); // crmv@150748
// crmv@341228e