2 /*********************************************************************************
3 * SugarCRM Community Edition is a customer relationship management program developed by
4 * SugarCRM, Inc. Copyright (C) 2004-2012 SugarCRM Inc.
6 * This program is free software; you can redistribute it and/or modify it under
7 * the terms of the GNU Affero General Public License version 3 as published by the
8 * Free Software Foundation with the addition of the following permission added
9 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
11 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
13 * This program is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
18 * You should have received a copy of the GNU Affero General Public License along with
19 * this program; if not, see http://www.gnu.org/licenses or write to the Free
20 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
24 * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
26 * The interactive user interfaces in modified source and object code versions
27 * of this program must display Appropriate Legal Notices, as required under
28 * Section 5 of the GNU Affero General Public License version 3.
30 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31 * these Appropriate Legal Notices must retain the display of the "Powered by
32 * SugarCRM" logo. If the display of the logo is not reasonably feasible for
33 * technical reasons, the Appropriate Legal Notices must display the words
34 * "Powered by SugarCRM".
35 ********************************************************************************/
39 * This helper handles the rest of the fields for the Users Edit and Detail views.
40 * There are a lot of fields on those views that do not map directly to being used on the metadata based UI, so they are handled here.
42 class UserViewHelper {
44 * The smarty template handler for the template
49 * The bean that we are viewing.
54 * What type of view we are looking at, valid values are 'EditView' and 'DetailView'
59 * Is the current user an admin for the Users module
62 protected $is_current_admin;
64 * Is the current user a system wide admin
67 protected $is_super_admin;
69 * The current user type
70 * One of: REGULAR ADMIN GROUP PORTAL_ONLY
77 * Constructor, pass in the smarty template, the bean and the viewtype
79 public function __construct(Sugar_Smarty &$smarty, SugarBean &$bean, $viewType = 'EditView' ) {
82 $this->viewType = $viewType;
86 * This function populates the smarty class that was passed in through the constructor
88 public function setupAdditionalFields() {
89 $this->assignUserTypes();
90 $this->setupButtonsAndTabs();
91 $this->setupUserTypeDropdown();
92 $this->setupEmailSettings();
93 $this->setupPasswordTab();
94 $this->setupThemeTab();
95 $this->setupAdvancedTab();
99 protected function assignUserTypes() {
100 global $current_user, $app_list_strings;
102 // There is a lot of extra stuff that needs to go in here to properly render
103 $this->is_current_admin=is_admin($current_user)
104 ||$current_user->isAdminForModule('Users');
105 $this->is_super_admin = is_admin($current_user);
107 $this->usertype='REGULAR';
108 if($this->is_super_admin){
109 $this->usertype='Administrator';
113 // check if the user has access to the User Management
114 $this->ss->assign('USER_ADMIN',$current_user->isAdminForModule('Users')&& !is_admin($current_user));
117 if ($this->is_current_admin) {
118 $this->ss->assign('IS_ADMIN','1');
120 $this->ss->assign('IS_ADMIN', '0');
123 if ($this->is_super_admin) {
124 $this->ss->assign('IS_SUPER_ADMIN','1');
126 $this->ss->assign('IS_SUPER_ADMIN', '0');
129 $this->ss->assign('IS_PORTALONLY', '0');
130 $this->ss->assign('IS_GROUP', '0');
131 if((!empty($this->bean->is_group) && $this->bean->is_group) || (isset($_REQUEST['usertype']) && $_REQUEST['usertype']=='group')){
132 $this->ss->assign('IS_GROUP', '1');
133 $this->usertype='GROUP';
138 $edit_self = $current_user->id == $this->bean->id;
139 $admin_edit_self = is_admin($current_user) && $edit_self;
142 $this->ss->assign('IS_FOCUS_ADMIN', is_admin($this->bean));
145 $this->ss->assign('EDIT_SELF','1');
147 if($admin_edit_self) {
148 $this->ss->assign('ADMIN_EDIT_SELF','1');
153 protected function setupButtonsAndTabs() {
154 global $current_user;
156 if (isset($GLOBALS['sugar_config']['show_download_tab'])) {
157 $enable_download_tab = $GLOBALS['sugar_config']['show_download_tab'];
159 $enable_download_tab = true;
162 $this->ss->assign('SHOW_DOWNLOADS_TAB', $enable_download_tab);
165 $the_query_string = 'module=Users&action=DetailView';
166 if(isset($_REQUEST['record'])) {
167 $the_query_string .= '&record='.$_REQUEST['record'];
169 $buttons_header = array();
170 $buttons_footer = array();
171 if (!$this->bean->is_group){
172 if ($this->bean->id == $current_user->id) {
173 $reset_pref_warning = translate('LBL_RESET_PREFERENCES_WARNING','Users');
174 $reset_home_warning = translate('LBL_RESET_HOMEPAGE_WARNING','Users');
177 $reset_pref_warning = translate('LBL_RESET_PREFERENCES_WARNING_USER','Users');
178 $reset_home_warning = translate('LBL_RESET_HOMEPAGE_WARNING_USER','Users');
182 $user_preference_url = "module=Users&action=resetPreferences";
183 if(isset($_REQUEST['record'])){
184 $user_preference_url .= "&record=".$_REQUEST['record'];
186 $buttons_header[]="<input type='button' class='button' id='reset_user_preferences_header' onclick='if(confirm(\"{$reset_pref_warning}\"))window.location=\"".$_SERVER['PHP_SELF'] .'?'.$user_preference_url."&reset_preferences=true\";' value='".translate('LBL_RESET_PREFERENCES','Users')."' />";
187 $buttons_header[]="<input type='button' class='button' id='reset_homepage_header' onclick='if(confirm(\"{$reset_home_warning}\"))window.location=\"".$_SERVER['PHP_SELF'] .'?'.$the_query_string."&reset_homepage=true\";' value='".translate('LBL_RESET_HOMEPAGE','Users')."' />";
189 $buttons_footer[]="<input type='button' class='button' id='reset_user_preferences_footer' onclick='if(confirm(\"{$reset_pref_warning}\"))window.location=\"".$_SERVER['PHP_SELF'] .'?'.$user_preference_url."&reset_preferences=true\";' value='".translate('LBL_RESET_PREFERENCES','Users')."' />";
190 $buttons_footer[]="<input type='button' class='button' id='reset_homepage_footer' onclick='if(confirm(\"{$reset_home_warning}\"))window.location=\"".$_SERVER['PHP_SELF'] .'?'.$the_query_string."&reset_homepage=true\";' value='".translate('LBL_RESET_HOMEPAGE','Users')."' />";
193 if (isset($buttons_header)) $this->ss->assign("BUTTONS_HEADER", $buttons_header);
194 if (isset($buttons_footer)) $this->ss->assign("BUTTONS_FOOTER", $buttons_footer);
198 if (isset($this->bean->id)) {
199 $this->ss->assign('ID',$this->bean->id);
206 * setupUserTypeDropdown
208 * This function handles setting up the user type dropdown field. It determines which user types are available for the current user.
209 * At the end of the function two Smarty variables (USER_TYPE_DROPDOWN and USER_TYPE_READONLY) are assigned.
212 public function setupUserTypeDropdown() {
213 global $current_user;
216 //if this is an existing bean and the type is empty, then populate user type
217 if(!empty($this->bean->id) && empty($this->bean->user_type))
219 $this->setUserType($this->bean);
220 $userType = $this->bean->user_type;
222 $userType = $this->usertype;
225 $availableUserTypes = array();
227 'RegularUser' => array(
228 'label' => translate('LBL_REGULAR_USER','Users'),
229 'description' => translate('LBL_REGULAR_DESC','Users'),
232 'label' => translate('LBL_GROUP_USER','Users'),
233 'description' => translate('LBL_GROUP_DESC','Users'),
235 'Administrator' => array(
236 'label' => translate('LBL_ADMIN_USER','Users'),
237 'description' => translate('LBL_ADMIN_DESC','Users'),
241 if ( $userType == 'GROUP' || $userType == 'PORTAL_ONLY' ) {
242 $availableUserTypes = array($this->usertype);
244 if ( $this->ss->get_template_vars('USER_ADMIN') ) {
245 $availableUserTypes = array('RegularUser');
246 } elseif($this->ss->get_template_vars('ADMIN_EDIT_SELF')) {
247 $availableUserTypes = array('Administrator');
248 } elseif($this->ss->get_template_vars('IS_SUPER_ADMIN')) {
249 $availableUserTypes = array(
254 $availableUserTypes = array($userType);
258 $userTypeDropdown = '<select id="UserType" name="UserType" onchange="user_status_display(this);" ';
259 if ( count($availableUserTypes) == 1 ) {
260 $userTypeDropdown .= ' disabled ';
262 $userTypeDropdown .= '>';
264 $userTypeDescription = '';
266 $setSelected = !empty($this->bean->id);
268 foreach ( $availableUserTypes as $currType ) {
269 if ($setSelected && $currType == $userType ) {
270 $userTypeDropdown .= '<option value="'.$currType.'" SELECTED>'.$userTypes[$currType]['label'].'</option>';
272 $userTypeDropdown .= '<option value="'.$currType.'">'.$userTypes[$currType]['label'].'</option>';
275 $userTypeDropdown .= '</select><div id="UserTypeDesc"> </div>';
277 $this->ss->assign('USER_TYPE_DROPDOWN',$userTypeDropdown);
278 $this->ss->assign('USER_TYPE_READONLY',$userTypes[$userType]['label'] . "<input type='hidden' id='UserType' value='{$userType}'><div id='UserTypeDesc'> </div>");
282 protected function setupPasswordTab() {
283 global $current_user;
285 $this->ss->assign('PWDSETTINGS', isset($GLOBALS['sugar_config']['passwordsetting']) ? $GLOBALS['sugar_config']['passwordsetting'] : array());
288 $enable_syst_generate_pwd=false;
289 if(isset($GLOBALS['sugar_config']['passwordsetting']) && isset($GLOBALS['sugar_config']['passwordsetting']['SystemGeneratedPasswordON'])){
290 $enable_syst_generate_pwd=$GLOBALS['sugar_config']['passwordsetting']['SystemGeneratedPasswordON'];
293 // If new regular user without system generated password or new portal user
294 if(((isset($enable_syst_generate_pwd) && !$enable_syst_generate_pwd && $this->usertype!='GROUP') || $this->usertype =='PORTAL_ONLY') && empty($this->bean->id)) {
295 $this->ss->assign('REQUIRED_PASSWORD','1');
297 $this->ss->assign('REQUIRED_PASSWORD','0');
300 // If my account page or portal only user or regular user without system generated password or a duplicate user
301 if((($current_user->id == $this->bean->id) || $this->usertype=='PORTAL_ONLY' || (($this->usertype=='REGULAR' || $this->usertype == 'Administrator' || (isset($_REQUEST['isDuplicate']) && $_REQUEST['isDuplicate'] == 'true' && $this->usertype!='GROUP')) && !$enable_syst_generate_pwd)) && !$this->bean->external_auth_only ) {
302 $this->ss->assign('CHANGE_PWD', '1');
304 $this->ss->assign('CHANGE_PWD', '0');
307 // Make sure group users don't get a password change prompt
308 if ( $this->usertype == 'GROUP' ) {
309 $this->ss->assign('CHANGE_PWD', '0');
312 $configurator = new Configurator();
313 if ( isset($configurator->config['passwordsetting'])
314 && ($configurator->config['passwordsetting']['SystemGeneratedPasswordON']
315 || $configurator->config['passwordsetting']['forgotpasswordON'])
316 && $this->usertype != 'GROUP' && $this->usertype != 'PORTAL_ONLY' ) {
317 $this->ss->assign('REQUIRED_EMAIL_ADDRESS','1');
319 $this->ss->assign('REQUIRED_EMAIL_ADDRESS','0');
321 if($this->usertype=='GROUP' || $this->usertype=='PORTAL_ONLY') {
322 $this->ss->assign('HIDE_FOR_GROUP_AND_PORTAL', 'none');
323 $this->ss->assign('HIDE_CHANGE_USERTYPE','none');
325 $this->ss->assign('HIDE_FOR_NORMAL_AND_ADMIN','none');
326 if (!$this->is_current_admin) {
327 $this->ss->assign('HIDE_CHANGE_USERTYPE','none');
329 $this->ss->assign('HIDE_STATIC_USERTYPE','none');
335 protected function setupThemeTab() {
336 $user_theme = $this->bean->getPreference('user_theme');
337 if(isset($user_theme)) {
338 $this->ss->assign("THEMES", get_select_options_with_id(SugarThemeRegistry::availableThemes(), $user_theme));
340 $this->ss->assign("THEMES", get_select_options_with_id(SugarThemeRegistry::availableThemes(), $GLOBALS['sugar_config']['default_theme']));
342 $this->ss->assign("SHOW_THEMES",count(SugarThemeRegistry::availableThemes()) > 1);
343 $this->ss->assign("USER_THEME_COLOR", $this->bean->getPreference('user_theme_color'));
344 $this->ss->assign("USER_THEME_FONT", $this->bean->getPreference('user_theme_font'));
345 $this->ss->assign("USER_THEME", $user_theme);
347 // Build a list of themes that support group modules
348 $this->ss->assign("DISPLAY_GROUP_TAB", 'none');
350 $selectedTheme = $user_theme;
351 if(!isset($user_theme)) {
352 $selectedTheme = $GLOBALS['sugar_config']['default_theme'];
355 $themeList = SugarThemeRegistry::availableThemes();
356 $themeGroupList = array();
358 foreach ( $themeList as $themeId => $themeName ) {
359 $currThemeObj = SugarThemeRegistry::get($themeId);
360 if ( isset($currThemeObj->group_tabs) && $currThemeObj->group_tabs == 1 ) {
361 $themeGroupList[$themeId] = true;
362 if ( $themeId == $selectedTheme ) {
363 $this->ss->assign("DISPLAY_GROUP_TAB", '');
366 $themeGroupList[$themeId] = false;
369 $this->ss->assign("themeGroupListJSON",json_encode($themeGroupList));
373 protected function setupAdvancedTab() {
374 $this->setupAdvancedTabUserSettings();
375 $this->setupAdvancedTabTeamSettings();
376 $this->setupAdvancedTabNavSettings();
377 $this->setupAdvancedTabLocaleSettings();
378 $this->setupAdvancedTabPdfSettings();
381 protected function setupAdvancedTabUserSettings() {
382 global $current_user, $locale, $app_strings, $app_list_strings, $sugar_config;
383 // This is for the "Advanced" tab, it's not controlled by the metadata UI so we have to do more for it.
385 $this->ss->assign('EXPORT_DELIMITER', $this->bean->getPreference('export_delimiter'));
387 if($this->bean->receive_notifications ||(!isset($this->bean->id) && $admin->settings['notify_send_by_default'])) $this->ss->assign("RECEIVE_NOTIFICATIONS", "checked");
389 //jc:12293 - modifying to use the accessor method which will translate the
390 //available character sets using the translation files
391 $export_charset = $locale->getExportCharset('', $this->bean);
392 $export_charset_options = $locale->getCharsetSelect();
393 $this->ss->assign('EXPORT_CHARSET', get_select_options_with_id($export_charset_options, $export_charset));
394 $this->ss->assign('EXPORT_CHARSET_DISPLAY', $export_charset);
397 if( $this->bean->getPreference('use_real_names') == 'on'
398 || ( empty($this->bean->id)
399 && isset($GLOBALS['sugar_config']['use_real_names'])
400 && $GLOBALS['sugar_config']['use_real_names']
401 && $this->bean->getPreference('use_real_names') != 'off') ) {
402 $this->ss->assign('USE_REAL_NAMES', 'CHECKED');
405 if($this->bean->getPreference('mailmerge_on') == 'on') {
406 $this->ss->assign('MAILMERGE_ON', 'checked');
409 if($this->bean->getPreference('no_opps') == 'on') {
410 $this->ss->assign('NO_OPPS', 'CHECKED');
413 $reminder_time = $this->bean->getPreference('reminder_time');
414 if(empty($reminder_time)){
417 $email_reminder_time = $this->bean->getPreference('email_reminder_time');
418 if(empty($email_reminder_time)){
419 $email_reminder_time = -1;
421 $this->ss->assign("REMINDER_TIME_OPTIONS", $app_list_strings['reminder_time_options']);
422 $this->ss->assign("EMAIL_REMINDER_TIME_OPTIONS", $app_list_strings['reminder_time_options']);
423 $this->ss->assign("REMINDER_TIME", $reminder_time);
424 $this->ss->assign("EMAIL_REMINDER_TIME", $email_reminder_time);
425 $this->ss->assign("REMINDER_TABINDEX", "12");
426 $this->ss->assign('CALENDAR_PUBLISH_KEY', $this->bean->getPreference('calendar_publish_key' ));
428 $publish_url = $sugar_config['site_url'].'/vcal_server.php';
430 //determine if the web server is running IIS
431 //if so then change the publish url
432 if(isset($_SERVER) && !empty($_SERVER['SERVER_SOFTWARE'])){
433 $position = strpos(strtolower($_SERVER['SERVER_SOFTWARE']), 'iis');
434 if($position !== false){
439 $publish_url .= $token.'type=vfb&source=outlook&key=<span id="cal_pub_key_span">'.$this->bean->getPreference('calendar_publish_key' ) . '</span>';
440 if (! empty($this->bean->email1)) {
441 $publish_url .= '&email='.$this->bean->email1;
443 $publish_url .= '&user_name='.$this->bean->user_name;
445 $this->ss->assign("CALENDAR_PUBLISH_URL", $publish_url);
446 $this->ss->assign("CALENDAR_SEARCH_URL", $sugar_config['site_url'].'/vcal_server.php/type=vfb&email=%NAME%@%SERVER%');
447 $this->ss->assign("CALENDAR_ICAL_URL", $sugar_config['site_url'].'/ical_server.php');
449 $this->ss->assign("SETTINGS_URL", $sugar_config['site_url']);
453 protected function setupAdvancedTabTeamSettings() {
454 global $sugar_config;
457 if(!empty($sugar_config['authenticationClass'])){
458 $this->ss->assign('EXTERNAL_AUTH_CLASS_1', $sugar_config['authenticationClass']);
459 $this->ss->assign('EXTERNAL_AUTH_CLASS', $sugar_config['authenticationClass']);
460 $authclass = $sugar_config['authenticationClass'];
462 if(!empty($GLOBALS['system_config']->settings['system_ldap_enabled'])){
463 $this->ss->assign('EXTERNAL_AUTH_CLASS_1', translate('LBL_LDAP','Users'));
465 ->assign('EXTERNAL_AUTH_CLASS', translate('LBL_LDAP_AUTHENTICATION','Users'));
466 $authclass = 'LDAPAuthenticate';
469 if(!empty($this->bean->external_auth_only)) {
470 $this->ss->assign('EXTERNAL_AUTH_ONLY_CHECKED', 'CHECKED');
473 if($this->is_super_admin && !empty($authclass)) {
474 $this->ss->assign('DISPLAY_EXTERNAL_AUTH',true);
479 protected function setupAdvancedTabNavSettings() {
480 global $app_list_strings;
483 $useGroupTabs = $this->bean->getPreference('navigation_paradigm');
484 if ( ! isset($useGroupTabs) ) {
485 if ( ! isset($GLOBALS['sugar_config']['default_navigation_paradigm']) ) {
486 $GLOBALS['sugar_config']['default_navigation_paradigm'] = 'gm';
488 $useGroupTabs = $GLOBALS['sugar_config']['default_navigation_paradigm'];
490 $this->ss->assign("USE_GROUP_TABS",($useGroupTabs=='gm')?'checked':'');
492 $user_max_tabs = $this->bean->getPreference('max_tabs');
493 if(isset($user_max_tabs) && $user_max_tabs > 0) {
494 $this->ss->assign("MAX_TAB", $user_max_tabs);
495 } elseif(SugarThemeRegistry::current()->maxTabs > 0) {
496 $this->ss->assign("MAX_TAB", SugarThemeRegistry::current()->maxTabs);
498 $this->ss->assign("MAX_TAB", $GLOBALS['sugar_config']['default_max_tabs']);
500 $this->ss->assign("MAX_TAB_OPTIONS", range(1, ((!empty($GLOBALS['sugar_config']['default_max_tabs']) && $GLOBALS['sugar_config']['default_max_tabs'] > 10 ) ? $GLOBALS['sugar_config']['default_max_tabs'] : 10)));
502 $user_subpanel_tabs = $this->bean->getPreference('subpanel_tabs');
503 if(isset($user_subpanel_tabs)) {
504 $this->ss->assign("SUBPANEL_TABS", $user_subpanel_tabs?'checked':'');
506 $this->ss->assign("SUBPANEL_TABS", $GLOBALS['sugar_config']['default_subpanel_tabs']?'checked':'');
509 /* Module Tab Chooser */
510 require_once('include/templates/TemplateGroupChooser.php');
511 require_once('modules/MySettings/TabController.php');
512 $chooser = new TemplateGroupChooser();
513 $controller = new TabController();
516 if($this->is_current_admin || $controller->get_users_can_edit()) {
517 $chooser->display_hide_tabs = true;
519 $chooser->display_hide_tabs = false;
522 $chooser->args['id'] = 'edit_tabs';
523 $chooser->args['values_array'] = $controller->get_tabs($this->bean);
524 foreach($chooser->args['values_array'][0] as $key=>$value) {
525 $chooser->args['values_array'][0][$key] = $app_list_strings['moduleList'][$key];
528 foreach($chooser->args['values_array'][1] as $key=>$value) {
529 $chooser->args['values_array'][1][$key] = $app_list_strings['moduleList'][$key];
532 foreach($chooser->args['values_array'][2] as $key=>$value) {
533 $chooser->args['values_array'][2][$key] = $app_list_strings['moduleList'][$key];
536 $chooser->args['left_name'] = 'display_tabs';
537 $chooser->args['right_name'] = 'hide_tabs';
539 $chooser->args['left_label'] = translate('LBL_DISPLAY_TABS','Users');
540 $chooser->args['right_label'] = translate('LBL_HIDE_TABS','Users');
541 require_once('include/Smarty/plugins/function.sugar_help.php');
542 $chooser->args['title'] = translate('LBL_EDIT_TABS','Users').smarty_function_sugar_help(array("text"=>'Select which modules are accessible within the top navigation bar. Designate the order in which you would like the modules to appear. To select the number of modules that appear in the navigation bar, with the remainder appearing in the overflow menu, use the "Number of Modules in Navigation Bar" field.'),$ss);
544 $this->ss->assign('TAB_CHOOSER', $chooser->display());
545 $this->ss->assign('CHOOSER_SCRIPT','set_chooser();');
546 $this->ss->assign('CHOOSE_WHICH', translate('LBL_CHOOSE_WHICH','Users'));
550 protected function setupAdvancedTabLocaleSettings() {
551 global $locale, $sugar_config, $app_list_strings;
553 ///////////////////////////////////////////////////////////////////////////////
555 //// Date/time format
556 $dformat = $locale->getPrecedentPreference($this->bean->id?'datef':'default_date_format', $this->bean);
557 $tformat = $locale->getPrecedentPreference($this->bean->id?'timef':'default_time_format', $this->bean);
558 $nformat = $locale->getPrecedentPreference('default_locale_name_format', $this->bean);
559 if (!array_key_exists($nformat, $sugar_config['name_formats'])) {
560 $nformat = $sugar_config['default_locale_name_format'];
562 $timeOptions = get_select_options_with_id($sugar_config['time_formats'], $tformat);
563 $dateOptions = get_select_options_with_id($sugar_config['date_formats'], $dformat);
564 $nameOptions = get_select_options_with_id($locale->getUsableLocaleNameOptions($sugar_config['name_formats']), $nformat);
565 $this->ss->assign('TIMEOPTIONS', $timeOptions);
566 $this->ss->assign('DATEOPTIONS', $dateOptions);
567 $this->ss->assign('NAMEOPTIONS', $nameOptions);
568 $this->ss->assign('DATEFORMAT', $sugar_config['date_formats'][$dformat]);
569 $this->ss->assign('TIMEFORMAT', $sugar_config['time_formats'][$tformat]);
570 $this->ss->assign('NAMEFORMAT', $sugar_config['name_formats'][$nformat]);
573 if(empty($this->bean->id)) { // remove default timezone for new users(set later)
574 $this->bean->user_preferences['timezone'] = '';
577 $userTZ = $this->bean->getPreference('timezone');
579 if(empty($userTZ) && !$this->bean->is_group && !$this->bean->portal_only) {
580 $userTZ = TimeDate::guessTimezone();
581 $this->bean->setPreference('timezone', $userTZ);
584 if(!$this->bean->getPreference('ut')) {
585 $this->ss->assign('PROMPTTZ', ' checked');
587 $this->ss->assign('TIMEZONE_CURRENT', $userTZ);
588 $this->ss->assign('TIMEZONEOPTIONS', TimeDate::getTimezoneList());
589 $this->ss->assign("TIMEZONE", TimeDate::tzName($userTZ));
592 // FG - Bug 4236 - Managed First Day of Week
594 foreach ($app_list_strings['dom_cal_day_long'] as $d) {
599 $this->ss->assign("FDOWOPTIONS", $fdowDays);
600 $currentFDOW = $this->bean->get_first_day_of_week();
602 if (!isset($currentFDOW)) {$currentFDOW = 0;}
603 $this->ss->assign("FDOWCURRENT", $currentFDOW);
604 $this->ss->assign("FDOWDISPLAY", $app_list_strings['dom_cal_day_long'][$currentFDOW]);
606 //// Numbers and Currency display
607 require_once('modules/Currencies/ListCurrency.php');
608 $currency = new ListCurrency();
610 // 10/13/2006 Collin - Changed to use Localization.getConfigPreference
611 // This was the problem- Previously, the "-99" currency id always assumed
612 // to be defaulted to US Dollars. However, if someone set their install to use
613 // Euro or other type of currency then this setting would not apply as the
614 // default because it was being overridden by US Dollars.
615 $cur_id = $locale->getPrecedentPreference('currency', $this->bean);
617 $selectCurrency = $currency->getSelectOptions($cur_id);
618 $this->ss->assign("CURRENCY", $selectCurrency);
620 $selectCurrency = $currency->getSelectOptions();
621 $this->ss->assign("CURRENCY", $selectCurrency);
624 $currencyList = array();
625 foreach($locale->currencies as $id => $val ) {
626 $currencyList[$id] = $val['symbol'];
628 $currencySymbolJSON = json_encode($currencyList);
629 $this->ss->assign('currencySymbolJSON', $currencySymbolJSON);
631 $currencyDisplay = new Currency();
632 if(isset($cur_id) ) {
633 $currencyDisplay->retrieve($cur_id);
634 $this->ss->assign('CURRENCY_DISPLAY', $currencyDisplay->iso4217 .' '.$currencyDisplay->symbol );
636 $this->ss->assign("CURRENCY_DISPLAY", $currencyDisplay->getDefaultISO4217() .' '.$currencyDisplay->getDefaultCurrencySymbol() );
639 // fill significant digits dropdown
640 $significantDigits = $locale->getPrecedentPreference('default_currency_significant_digits', $this->bean);
642 for($i=0; $i<=6; $i++) {
643 if($significantDigits == $i) {
644 $sigDigits .= "<option value=\"$i\" selected=\"true\">$i</option>";
646 $sigDigits .= "<option value=\"$i\">{$i}</option>";
650 $this->ss->assign('sigDigits', $sigDigits);
651 $this->ss->assign('CURRENCY_SIG_DIGITS', $significantDigits);
653 $num_grp_sep = $this->bean->getPreference('num_grp_sep');
654 $dec_sep = $this->bean->getPreference('dec_sep');
655 $this->ss->assign("NUM_GRP_SEP",(empty($num_grp_sep) ? $GLOBALS['sugar_config']['default_number_grouping_seperator'] : $num_grp_sep));
656 $this->ss->assign("DEC_SEP",(empty($dec_sep) ? $GLOBALS['sugar_config']['default_decimal_seperator'] : $dec_sep));
657 $this->ss->assign('getNumberJs', $locale->getNumberJs());
659 //// Name display format
660 $this->ss->assign('default_locale_name_format', $locale->getLocaleFormatMacro($this->bean));
661 $this->ss->assign('getNameJs', $locale->getNameJs());
662 $this->ss->assign('NAME_FORMAT', $this->bean->getLocaleFormatDesc());
663 //// END LOCALE SETTINGS
666 protected function setupAdvancedTabPdfSettings() {
669 protected function setupEmailSettings() {
670 global $current_user, $app_list_strings;
672 $this->ss->assign("MAIL_SENDTYPE", get_select_options_with_id($app_list_strings['notifymail_sendtype'], $this->bean->getPreference('mail_sendtype')));
674 ///////////////////////////////////////////////////////////////////////////////
676 // We need to turn off the requiredness of emails if it is a group or portal user
677 if ($this->usertype == 'GROUP' || $this->usertype == 'PORTAL_ONLY' ) {
679 $dictionary['User']['fields']['email1']['required'] = false;
681 // hack to disable email field being required if it shouldn't be required
682 if ( $this->ss->get_template_vars("REQUIRED_EMAIL_ADDRESS") == '0' ) {
683 $GLOBALS['dictionary']['User']['fields']['email1']['required'] = false;
685 $this->ss->assign("NEW_EMAIL", '<span id="email_span">' . getEmailAddressWidget($this->bean, "email1", $this->bean->email1, $this->viewType) . '</span>');
686 // hack to undo that previous hack
687 if ( $this->ss->get_template_vars("REQUIRED_EMAIL_ADDRESS") == '0' ) {
688 $GLOBALS['dictionary']['User']['fields']['email1']['required'] = true;
690 $raw_email_link_type = $this->bean->getPreference('email_link_type');
691 if ( $this->viewType == 'EditView' ) {
692 $this->ss->assign('EMAIL_LINK_TYPE', get_select_options_with_id($app_list_strings['dom_email_link_type'], $raw_email_link_type));
694 $this->ss->assign('EMAIL_LINK_TYPE', $app_list_strings['dom_email_link_type'][$raw_email_link_type]);
697 ///// END EMAIL OPTIONS
698 ///////////////////////////////////////////////////////////////////////////////
701 /////////////////////////////////////////////
702 /// Handle email account selections for users
703 /////////////////////////////////////////////
704 $hide_if_can_use_default = true;
705 if( !($this->usertype=='GROUP' || $this->usertype=='PORTAL_ONLY') ) {
707 $systemOutboundEmail = new OutboundEmail();
708 $systemOutboundEmail = $systemOutboundEmail->getSystemMailerSettings();
709 $mail_smtpserver = $systemOutboundEmail->mail_smtpserver;
710 $mail_smtptype = $systemOutboundEmail->mail_smtptype;
711 $mail_smtpport = $systemOutboundEmail->mail_smtpport;
712 $mail_smtpssl = $systemOutboundEmail->mail_smtpssl;
715 $mail_smtpdisplay = $systemOutboundEmail->mail_smtpdisplay;
716 $mail_smtpauth_req=true;
718 if( !$systemOutboundEmail->isAllowUserAccessToSystemDefaultOutbound() ) {
719 $mail_smtpauth_req = $systemOutboundEmail->mail_smtpauth_req;
720 $userOverrideOE = $systemOutboundEmail->getUsersMailerForSystemOverride($this->bean->id);
721 if($userOverrideOE != null) {
722 $mail_smtpuser = $userOverrideOE->mail_smtpuser;
723 $mail_smtppass = $userOverrideOE->mail_smtppass;
727 if(!$mail_smtpauth_req && (empty($systemOutboundEmail->mail_smtpserver) || empty($systemOutboundEmail->mail_smtpuser) || empty($systemOutboundEmail->mail_smtppass))) {
728 $hide_if_can_use_default = true;
730 $hide_if_can_use_default = false;
734 $this->ss->assign("mail_smtpdisplay", $mail_smtpdisplay);
735 $this->ss->assign("mail_smtpserver", $mail_smtpserver);
736 $this->ss->assign("mail_smtpuser", $mail_smtpuser);
737 $this->ss->assign("mail_smtppass", "");
738 $this->ss->assign("mail_haspass", empty($systemOutboundEmail->mail_smtppass)?0:1);
739 $this->ss->assign("mail_smtpauth_req", $mail_smtpauth_req);
740 $this->ss->assign('MAIL_SMTPPORT',$mail_smtpport);
741 $this->ss->assign('MAIL_SMTPSSL',$mail_smtpssl);
743 $this->ss->assign('HIDE_IF_CAN_USE_DEFAULT_OUTBOUND',$hide_if_can_use_default );
750 * This function is used to set the user_type variable for a given User instance
752 * @param Mixed $user The user instance to set the user_type variable on
753 * @return String value representing the user type
755 function setUserType($user)
757 //bug #49175: user's always regular
758 //need to get user_type from bean
759 $user->user_type = '';
763 $user->user_type = 'Administrator';
765 else if ($user->is_group)
767 $user->user_type = 'GROUP';
771 $user->user_type = 'RegularUser';