2 if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
3 /*********************************************************************************
4 * SugarCRM is a customer relationship management program developed by
5 * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
7 * This program is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU Affero General Public License version 3 as published by the
9 * Free Software Foundation with the addition of the following permission added
10 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
11 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
12 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
14 * This program is distributed in the hope that it will be useful, but WITHOUT
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
19 * You should have received a copy of the GNU Affero General Public License along with
20 * this program; if not, see http://www.gnu.org/licenses or write to the Free
21 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
24 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
25 * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
27 * The interactive user interfaces in modified source and object code versions
28 * of this program must display Appropriate Legal Notices, as required under
29 * Section 5 of the GNU Affero General Public License version 3.
31 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
32 * these Appropriate Legal Notices must retain the display of the "Powered by
33 * SugarCRM" logo. If the display of the logo is not reasonably feasible for
34 * technical reasons, the Appropriate Legal Notices must display the words
35 * "Powered by SugarCRM".
36 ********************************************************************************/
38 /*********************************************************************************
40 * Description: TODO: To be written.
41 * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
42 * All Rights Reserved.
43 * Contributor(s): ______________________________________..
44 ********************************************************************************/
47 require_once('modules/MySettings/TabController.php');
49 $display_tabs_def = isset($_REQUEST['display_tabs_def']) ? urldecode($_REQUEST['display_tabs_def']) : '';
50 $hide_tabs_def = isset($_REQUEST['hide_tabs_def']) ? urldecode($_REQUEST['hide_tabs_def']): '';
51 $remove_tabs_def = isset($_REQUEST['remove_tabs_def']) ? urldecode($_REQUEST['remove_tabs_def']): '';
53 $DISPLAY_ARR = array();
55 $REMOVE_ARR = array();
57 parse_str($display_tabs_def,$DISPLAY_ARR);
58 parse_str($hide_tabs_def,$HIDE_ARR);
59 parse_str($remove_tabs_def,$REMOVE_ARR);
61 if (isset($_POST['id']))
62 sugar_die("Unauthorized access to administration.");
63 if (isset($_POST['record']) && !is_admin($current_user)
64 && !is_admin_for_module($GLOBALS['current_user'],'Users')
65 && $_POST['record'] != $current_user->id)
66 sugar_die("Unauthorized access to administration.");
67 elseif (!isset($_POST['record']) && !is_admin($current_user)
68 && !is_admin_for_module($GLOBALS['current_user'],'Users'))
69 sugar_die ("Unauthorized access to user administration.");
71 $focus->retrieve($_POST['record']);
73 // Flag to determine whether to save a new password or not.
74 if(empty($focus->id)) $newUser = true;
75 else $newUser = false;
78 if(!$current_user->is_admin && !is_admin_for_module($GLOBALS['current_user'],'Users')
79 && $current_user->id != $focus->id) {
80 $GLOBALS['log']->fatal("SECURITY:Non-Admin ". $current_user->id . " attempted to change settings for user:". $focus->id);
81 header("Location: index.php?module=Users&action=Logout");
84 if(!$current_user->is_admin && !is_admin_for_module($GLOBALS['current_user'],'Users')
85 && !empty($_POST['is_admin'])) {
86 $GLOBALS['log']->fatal("SECURITY:Non-Admin ". $current_user->id . " attempted to change is_admin settings for user:". $focus->id);
87 header("Location: index.php?module=Users&action=Logout");
92 $portal=array("sugar_user_name","last_name","status","portal_only");
93 $group=array("sugar_user_name","last_name","status","is_group");
94 if(isset($_POST['portal_only']) && ($_POST['portal_only']=='1' || $focus->portal_only)){
95 foreach($portal as $field){
96 if(isset($_POST[$field]))
98 $value = $_POST[$field];
99 $focus->$field = $value;
105 if(isset($_POST['is_group']) && ($_POST['is_group']=='1' || $focus->is_group)){
106 foreach($group as $field){
107 if(isset($_POST[$field]))
109 $value = $_POST[$field];
110 $focus->$field = $value;
117 // copy the group or portal user name over. We renamed the field in order to ensure auto-complete would not change the value
118 if(isset($_POST['sugar_user_name']))
120 $focus->user_name = $_POST['sugar_user_name'];
123 // if the user saved is a Regular User
124 if(!$focus->is_group && !$focus->portal_only){
126 foreach($focus->column_fields as $field)
128 if(isset($_POST[$field]))
130 $value = $_POST[$field];
131 $focus->$field = $value;
134 foreach($focus->additional_column_fields as $field)
136 if(isset($_POST[$field]))
138 $value = $_POST[$field];
139 $focus->$field = $value;
144 $focus->portal_only=0;
146 if(isset($_POST['sugar_user_name']))
148 $focus->user_name = $_POST['sugar_user_name'];
150 if(isset($_POST['is_admin']) && ($_POST['is_admin'] == 'on' || $_POST['is_admin'] == '1')) $focus->is_admin = 1;
151 elseif(empty($_POST['is_admin'])) $focus->is_admin = 0;
152 //if(empty($_POST['portal_only']) || !empty($_POST['is_admin'])) $focus->portal_only = 0;
153 //if(empty($_POST['is_group']) || !empty($_POST['is_admin'])) $focus->is_group = 0;
154 if(empty($_POST['receive_notifications'])) $focus->receive_notifications = 0;
156 if(isset($_POST['mailmerge_on']) && !empty($_POST['mailmerge_on'])) {
157 $focus->setPreference('mailmerge_on','on', 0, 'global');
159 $focus->setPreference('mailmerge_on','off', 0, 'global');
162 if(isset($_POST['user_max_tabs']))
164 $current_theme_max_tabs = SugarThemeRegistry::current()->maxTabs;
165 if(empty($current_theme_max_tabs) || $_POST['user_max_tabs'] <= SugarThemeRegistry::current()->maxTabs){
166 $focus->setPreference('max_tabs', $_POST['user_max_tabs'], 0, 'global');
170 if(isset($_POST['user_swap_last_viewed']))
172 $focus->setPreference('swap_last_viewed', $_POST['user_swap_last_viewed'], 0, 'global');
176 $focus->setPreference('swap_last_viewed', '', 0, 'global');
179 if(isset($_POST['user_swap_shortcuts']))
181 $focus->setPreference('swap_shortcuts', $_POST['user_swap_shortcuts'], 0, 'global');
185 $focus->setPreference('swap_shortcuts', '', 0, 'global');
188 if(isset($_POST['use_group_tabs']))
190 $focus->setPreference('navigation_paradigm', $_POST['use_group_tabs'], 0, 'global');
194 $focus->setPreference('navigation_paradigm', 'gm', 0, 'global');
197 if(isset($_POST['user_subpanel_tabs']))
199 $focus->setPreference('subpanel_tabs', $_POST['user_subpanel_tabs'], 0, 'global');
203 $focus->setPreference('subpanel_tabs', '', 0, 'global');
206 if(isset($_POST['user_theme']))
208 $focus->setPreference('user_theme', $_POST['user_theme'], 0, 'global');
209 $_SESSION['authenticated_user_theme'] = $_POST['user_theme'];
212 if(isset($_POST['user_module_favicon']))
214 $focus->setPreference('module_favicon', $_POST['user_module_favicon'], 0, 'global');
218 $focus->setPreference('module_favicon', '', 0, 'global');
221 $tabs = new TabController();
222 if(isset($_POST['display_tabs']))
223 $tabs->set_user_tabs($DISPLAY_ARR['display_tabs'], $focus, 'display');
224 if(isset($HIDE_ARR['hide_tabs'])){
225 $tabs->set_user_tabs($HIDE_ARR['hide_tabs'], $focus, 'hide');
228 $tabs->set_user_tabs(array(), $focus, 'hide');
230 if(is_admin($current_user)){
231 if(isset($REMOVE_ARR['remove_tabs'])){
232 $tabs->set_user_tabs($REMOVE_ARR['remove_tabs'], $focus, 'remove');
234 $tabs->set_user_tabs(array(), $focus, 'remove');
238 if(isset($_POST['no_opps'])) {
239 $focus->setPreference('no_opps',$_POST['no_opps'], 0, 'global');
242 $focus->setPreference('no_opps','off', 0, 'global');
245 if( isset($_POST['should_remind'])
246 && $_POST['should_remind'] == '1'
247 && isset($_POST['reminder_time'])) {
248 $focus->setPreference('reminder_time', $_POST['reminder_time'], 0, 'global');
250 // cn: bug 5522, need to unset reminder time if unchecked.
251 $focus->setPreference('reminder_time', -1, 0, 'global');
253 if(isset($_POST['timezone'])) $focus->setPreference('timezone',$_POST['timezone'], 0, 'global');
254 if(isset($_POST['ut'])) $focus->setPreference('ut', '0', 0, 'global');
255 else $focus->setPreference('ut', '1', 0, 'global');
256 if(isset($_POST['currency'])) $focus->setPreference('currency',$_POST['currency'], 0, 'global');
257 if(isset($_POST['default_currency_significant_digits'])) $focus->setPreference('default_currency_significant_digits',$_POST['default_currency_significant_digits'], 0, 'global');
258 if(isset($_POST['num_grp_sep'])) $focus->setPreference('num_grp_sep', $_POST['num_grp_sep'], 0, 'global');
259 if(isset($_POST['dec_sep'])) $focus->setPreference('dec_sep', $_POST['dec_sep'], 0, 'global');
260 if(isset($_POST['dateformat'])) $focus->setPreference('datef',$_POST['dateformat'], 0, 'global');
261 if(isset($_POST['timeformat'])) $focus->setPreference('timef',$_POST['timeformat'], 0, 'global');
262 if(isset($_POST['timezone'])) $focus->setPreference('timezone',$_POST['timezone'], 0, 'global');
263 if(isset($_POST['mail_fromname'])) $focus->setPreference('mail_fromname',$_POST['mail_fromname'], 0, 'global');
264 if(isset($_POST['mail_fromaddress'])) $focus->setPreference('mail_fromaddress',$_POST['mail_fromaddress'], 0, 'global');
265 if(isset($_POST['mail_sendtype'])) $focus->setPreference('mail_sendtype', $_POST['mail_sendtype'], 0, 'global');
266 if(isset($_POST['mail_smtpserver'])) $focus->setPreference('mail_smtpserver',$_POST['mail_smtpserver'], 0, 'global');
267 if(isset($_POST['mail_smtpport'])) $focus->setPreference('mail_smtpport',$_POST['mail_smtpport'], 0, 'global');
268 if(isset($_POST['mail_smtpuser'])) $focus->setPreference('mail_smtpuser',$_POST['mail_smtpuser'], 0, 'global');
269 if(isset($_POST['mail_smtppass'])) $focus->setPreference('mail_smtppass',$_POST['mail_smtppass'], 0, 'global');
270 if(isset($_POST['default_locale_name_format'])) $focus->setPreference('default_locale_name_format',$_POST['default_locale_name_format'], 0, 'global');
271 if(isset($_POST['export_delimiter'])) $focus->setPreference('export_delimiter', $_POST['export_delimiter'], 0, 'global');
272 if(isset($_POST['default_export_charset'])) $focus->setPreference('default_export_charset', $_POST['default_export_charset'], 0, 'global');
273 if(isset($_POST['use_real_names'])) $focus->setPreference('use_real_names', 'on', 0, 'global');
274 else $focus->setPreference('use_real_names', 'off', 0, 'global');
276 if(isset($_POST['mail_smtpauth_req'])) {
277 $focus->setPreference('mail_smtpauth_req',$_POST['mail_smtpauth_req'] , 0, 'global');
279 $focus->setPreference('mail_smtpauth_req','', 0, 'global');
282 // SSL-enabled SMTP connection
283 if(isset($_POST['mail_smtpssl'])) {
284 $focus->setPreference('mail_smtpssl', 1, 0, 'global');
286 $focus->setPreference('mail_smtpssl', 0, 0, 'global');
288 ///////////////////////////////////////////////////////////////////////////
290 foreach($_POST as $k=>$v){
291 if(strpos($k,"sugarpdf_pdf") !== false){
292 $focus->setPreference($k, $v, 0, 'global');
296 ///////////////////////////////////////////////////////////////////////////
298 ///////////////////////////////////////////////////////////////////////////
300 if(isset($_POST['signature_id']))
301 $focus->setPreference('signature_default', $_POST['signature_id'], 0, 'global');
303 if(isset($_POST['signature_prepend'])) $focus->setPreference('signature_prepend',$_POST['signature_prepend'], 0, 'global');
305 ///////////////////////////////////////////////////////////////////////////
308 if(isset($_POST['email_link_type'])) $focus->setPreference('email_link_type', $_REQUEST['email_link_type']);
309 if(isset($_REQUEST['email_show_counts'])) {
310 $focus->setPreference('email_show_counts', $_REQUEST['email_show_counts'], 0, 'global');
312 $focus->setPreference('email_show_counts', 0, 0, 'global');
314 if(isset($_REQUEST['email_editor_option']))
315 $focus->setPreference('email_editor_option', $_REQUEST['email_editor_option'], 0, 'global');
316 if(isset($_REQUEST['default_email_charset']))
317 $focus->setPreference('default_email_charset', $_REQUEST['default_email_charset'], 0, 'global');
319 if(isset($_POST['calendar_publish_key'])) $focus->setPreference('calendar_publish_key',$_POST['calendar_publish_key'], 0, 'global');
322 if (!$focus->verify_data())
324 header("Location: index.php?action=Error&module=Users&error_string=".urlencode($focus->error_string));
328 { $GLOBALS['sugar_config']['disable_team_access_check'] = true;
330 $GLOBALS['sugar_config']['disable_team_access_check'] = false;
331 $return_id = $focus->id;
336 if((isset($_POST['old_password']) || $focus->portal_only) &&
337 (isset($_POST['new_password']) && !empty($_POST['new_password'])) &&
338 (isset($_POST['password_change']) && $_POST['password_change'] == 'true') ) {
339 if (!$focus->change_password($_POST['old_password'], $_POST['new_password'])) {
340 if((isset($_POST['page']) && $_POST['page'] == 'EditView')){
341 header("Location: index.php?action=EditView&module=Users&record=".$_POST['record']."&error_password=".urlencode($focus->error_string));
344 if((isset($_POST['page']) && $_POST['page'] == 'Change')){
345 header("Location: index.php?action=ChangePassword&module=Users&record=".$_POST['record']."&error_password=".urlencode($focus->error_string));
357 ///////////////////////////////////////////////////////////////////////////
358 //// OUTBOUND EMAIL SAVES
359 ///////////////////////////////////////////////////////////////////////////
361 $sysOutboundAccunt = new OutboundEmail();
363 //If a user is not alloweed to use the default system outbound account then they will be
364 //saving their own username/password for the system account
365 if( ! $sysOutboundAccunt->isAllowUserAccessToSystemDefaultOutbound() )
367 $userOverrideOE = $sysOutboundAccunt->getUsersMailerForSystemOverride($focus->id);
368 if($userOverrideOE != null)
370 //User is alloweed to clear username and pass so no need to check for blanks.
371 $userOverrideOE->mail_smtpuser = $_REQUEST['mail_smtpuser'];
372 $userOverrideOE->mail_smtppass = $_REQUEST['mail_smtppass'];
373 $userOverrideOE->save();
377 //If a user name and password for the mail account is set, create the users override account.
378 if( ! (empty($_REQUEST['mail_smtpuser']) || empty($_REQUEST['mail_smtppass'])) )
379 $sysOutboundAccunt->createUserSystemOverrideAccount($focus->id,$_REQUEST['mail_smtpuser'],$_REQUEST['mail_smtppass'] );
384 ///////////////////////////////////////////////////////////////////////////
385 //// INBOUND EMAIL SAVES
386 if(isset($_REQUEST['server_url']) && !empty($_REQUEST['server_url'])) {
388 $ie = new InboundEmail();
389 if(false === $ie->savePersonalEmailAccount($return_id, $focus->user_name)) {
390 header("Location: index.php?action=Error&module=Users&error_string=&ie_error=true&id=".$return_id);
391 die(); // die here, else the header redirect below takes over.
393 } elseif(isset($_REQUEST['ie_id']) && !empty($_REQUEST['ie_id']) && empty($_REQUEST['server_url'])) {
394 // user is deleting their I-E
396 $ie = new InboundEmail();
397 $ie->deletePersonalEmailAccount($_REQUEST['ie_id'], $focus->user_name);
399 //// END INBOUND EMAIL SAVES
400 ///////////////////////////////////////////////////////////////////////////
401 if(($newUser) && !($focus->is_group) && !($focus->portal_only) && isset($sugar_config['passwordsetting']['SystemGeneratedPasswordON']) && $sugar_config['passwordsetting']['SystemGeneratedPasswordON']){
403 require_once('modules/Users/GeneratePassword.php');
408 if(isset($_REQUEST['return_module']) && $_REQUEST['return_module'] != "") $return_module = $_REQUEST['return_module'];
409 else $return_module = "Users";
410 if(isset($_REQUEST['return_action']) && $_REQUEST['return_action'] != "") $return_action = $_REQUEST['return_action'];
411 else $return_action = "DetailView";
412 if(isset($_REQUEST['return_id']) && $_REQUEST['return_id'] != "") $return_id = $_REQUEST['return_id'];
414 $GLOBALS['log']->debug("Saved record with id of ".$return_id);
416 $redirect = "index.php?action={$return_action}&module={$return_module}&record={$return_id}";
417 $redirect .= isset($_REQUEST['type']) ? "&type={$_REQUEST['type']}" : ''; // cn: bug 6897 - detect redirect to Email compose
418 $redirect .= isset($_REQUEST['return_id']) ? "&return_id={$_REQUEST['return_id']}" : '';
419 $redirect .= ($new_pwd!='') ? "&pwd_set=".$new_pwd : '';
420 header("Location: {$redirect}");