* Copyright (C) 2010-2017 Regis Houssin * Copyright (C) 2015 Alexandre Spangaro * Copyright (C) 2018 Ferran Marcet * Copyright (C) 2021-2023 Anthony Berton * Copyright (C) 2024 Frédéric France * Copyright (C) 2024 MDW * * 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; either version 3 of the License, or * (at your option) any later version. * * 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * or see https://www.gnu.org/ */ /** * \file htdocs/core/lib/usergroups.lib.php * \brief Set of function to manage users, groups and permissions */ /** * Prepare array with list of tabs * * @param User $object Object related to tabs * @return array Array of tabs to show */ function user_prepare_head(User $object) { global $langs, $conf, $user, $db; $langs->load("users"); $canreadperms = true; if (getDolGlobalString('MAIN_USE_ADVANCED_PERMS')) { $canreadperms = ($user->admin || ($user->id != $object->id && $user->hasRight('user', 'user_advance', 'readperms')) || ($user->id == $object->id && $user->hasRight('user', 'self_advance', 'readperms'))); } $h = 0; $head = array(); $head[$h][0] = DOL_URL_ROOT.'/user/card.php?id='.$object->id; $head[$h][1] = $langs->trans("User"); $head[$h][2] = 'user'; $h++; if ((!empty($conf->ldap->enabled) && getDolGlobalString('LDAP_SYNCHRO_ACTIVE')) && (!getDolGlobalString('MAIN_DISABLE_LDAP_TAB') || !empty($user->admin))) { $langs->load("ldap"); $head[$h][0] = DOL_URL_ROOT.'/user/ldap.php?id='.$object->id; $head[$h][1] = $langs->trans("LDAPCard"); $head[$h][2] = 'ldap'; $h++; } if ($canreadperms) { $head[$h][0] = DOL_URL_ROOT.'/user/perms.php?id='.$object->id; $head[$h][1] = $langs->trans("Rights").(!getDolGlobalString('MAIN_OPTIMIZEFORTEXTBROWSER') ? ''.($object->nb_rights).'' : ''); $head[$h][2] = 'rights'; $h++; } $head[$h][0] = DOL_URL_ROOT.'/user/param_ihm.php?id='.$object->id; $head[$h][1] = $langs->trans("UserGUISetup"); $head[$h][2] = 'guisetup'; $h++; if (isModEnabled('agenda')) { if (!getDolGlobalString('AGENDA_EXT_NB')) { $conf->global->AGENDA_EXT_NB = 5; } $MAXAGENDA = getDolGlobalString('AGENDA_EXT_NB'); $i = 1; $nbagenda = 0; while ($i <= $MAXAGENDA) { $key = $i; $name = 'AGENDA_EXT_NAME_'.$object->id.'_'.$key; $src = 'AGENDA_EXT_SRC_'.$object->id.'_'.$key; $offsettz = 'AGENDA_EXT_OFFSETTZ_'.$object->id.'_'.$key; $color = 'AGENDA_EXT_COLOR_'.$object->id.'_'.$key; $i++; if (!empty($object->conf->$name)) { $nbagenda++; } } $head[$h][0] = DOL_URL_ROOT.'/user/agenda_extsites.php?id='.$object->id; $head[$h][1] = $langs->trans("ExtSites").($nbagenda ? ''.$nbagenda.'' : ''); $head[$h][2] = 'extsites'; $h++; } if (isModEnabled('clicktodial')) { $head[$h][0] = DOL_URL_ROOT.'/user/clicktodial.php?id='.$object->id; $head[$h][1] = $langs->trans("ClickToDial"); $head[$h][2] = 'clicktodial'; $h++; } // Notifications if ($user->socid == 0 && isModEnabled('notification')) { $nbNote = 0; $sql = "SELECT COUNT(n.rowid) as nb"; $sql .= " FROM ".MAIN_DB_PREFIX."notify_def as n"; $sql .= " WHERE fk_user = ".((int) $object->id); $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); $i = 0; while ($i < $num) { $obj = $db->fetch_object($resql); $nbNote = $obj->nb; $i++; } } else { dol_print_error($db); } $langs->load("mails"); $head[$h][0] = DOL_URL_ROOT.'/user/notify/card.php?id='.$object->id; $head[$h][1] = $langs->trans("NotificationsAuto"); if ($nbNote > 0) { $head[$h][1] .= ''.$nbNote.''; } $head[$h][2] = 'notify'; $h++; } // Show more tabs from modules // Entries must be declared in modules descriptor with line // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab // $this->tabs = array('entity:-tabname); to remove a tab complete_head_from_modules($conf, $langs, $object, $head, $h, 'user'); if ((isModEnabled('salaries') && $user->hasRight('salaries', 'read')) || (isModEnabled('hrm') && $user->hasRight('hrm', 'employee', 'read')) || (isModEnabled('expensereport') && $user->hasRight('expensereport', 'lire') && ($user->id == $object->id || $user->hasRight('expensereport', 'readall'))) || (isModEnabled('holiday') && $user->hasRight('holiday', 'read') && ($user->id == $object->id || $user->hasRight('holiday', 'readall'))) ) { // Bank $head[$h][0] = DOL_URL_ROOT.'/user/bank.php?id='.$object->id; $head[$h][1] = $langs->trans("HRAndBank"); $head[$h][2] = 'bank'; $h++; } // Such info on users is visible only by internal user if (empty($user->socid)) { // Notes $nbNote = 0; if (!empty($object->note_public)) { $nbNote++; } if (!empty($object->note_private)) { $nbNote++; } $head[$h][0] = DOL_URL_ROOT.'/user/note.php?id='.$object->id; $head[$h][1] = $langs->trans("Note"); if ($nbNote > 0) { $head[$h][1] .= ''.$nbNote.''; } $head[$h][2] = 'note'; $h++; // Attached files require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php'; $upload_dir = $conf->user->dir_output."/".$object->id; $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $nbLinks = Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/user/document.php?userid='.$object->id; $head[$h][1] = $langs->trans("Documents"); if (($nbFiles + $nbLinks) > 0) { $head[$h][1] .= ''.($nbFiles + $nbLinks).''; } $head[$h][2] = 'document'; $h++; $head[$h][0] = DOL_URL_ROOT.'/user/agenda.php?id='.$object->id; $head[$h][1] = $langs->trans("Events"); if (isModEnabled('agenda') && ($user->hasRight('agenda', 'myactions', 'read') || $user->hasRight('agenda', 'allactions', 'read'))) { $nbEvent = 0; // Enable caching of thirdparty count actioncomm require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php'; $cachekey = 'count_events_user_'.$object->id; $dataretrieved = dol_getcache($cachekey); if (!is_null($dataretrieved)) { $nbEvent = $dataretrieved; } else { $sql = "SELECT COUNT(ac.id) as nb"; $sql .= " FROM ".MAIN_DB_PREFIX."actioncomm as ac"; $sql .= " WHERE ac.fk_user_action = ".((int) $object->id); $sql .= " AND ac.entity IN (".getEntity('agenda').")"; $resql = $db->query($sql); if ($resql) { $obj = $db->fetch_object($resql); $nbEvent = $obj->nb; } else { dol_syslog('Failed to count actioncomm '.$db->lasterror(), LOG_ERR); } dol_setcache($cachekey, $nbEvent, 120); // If setting cache fails, this is not a problem, so we do not test result. } $head[$h][1] .= '/'; $head[$h][1] .= $langs->trans("Agenda"); if ($nbEvent > 0) { $head[$h][1] .= ''.$nbEvent.''; } } $head[$h][2] = 'info'; $h++; } complete_head_from_modules($conf, $langs, $object, $head, $h, 'user', 'remove'); return $head; } /** * Prepare array with list of tabs * * @param UserGroup $object Object group * @return array Array of tabs */ function group_prepare_head($object) { global $langs, $conf, $user; $canreadperms = true; if (getDolGlobalString('MAIN_USE_ADVANCED_PERMS')) { $canreadperms = ($user->admin || $user->hasRight('user', 'group_advance', 'readperms')); } $h = 0; $head = array(); $head[$h][0] = DOL_URL_ROOT.'/user/group/card.php?id='.$object->id; $head[$h][1] = $langs->trans("Card"); $head[$h][2] = 'group'; $h++; if ((!empty($conf->ldap->enabled) && getDolGlobalString('LDAP_SYNCHRO_ACTIVE')) && (!getDolGlobalString('MAIN_DISABLE_LDAP_TAB') || !empty($user->admin))) { $langs->load("ldap"); $head[$h][0] = DOL_URL_ROOT.'/user/group/ldap.php?id='.$object->id; $head[$h][1] = $langs->trans("LDAPCard"); $head[$h][2] = 'ldap'; $h++; } if ($canreadperms) { $head[$h][0] = DOL_URL_ROOT.'/user/group/perms.php?id='.$object->id; $head[$h][1] = $langs->trans("GroupRights").''.($object->nb_rights).''; $head[$h][2] = 'rights'; $h++; } // Show more tabs from modules // Entries must be declared in modules descriptor with line // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab // $this->tabs = array('entity:-tabname); to remove a tab complete_head_from_modules($conf, $langs, $object, $head, $h, 'group'); complete_head_from_modules($conf, $langs, $object, $head, $h, 'group', 'remove'); return $head; } /** * Prepare array with list of tabs * * @return array Array of tabs to show */ function user_admin_prepare_head() { global $langs, $conf, $user, $db; $extrafields = new ExtraFields($db); $extrafields->fetch_name_optionals_label('user'); $extrafields->fetch_name_optionals_label('usergroup'); $langs->load("users"); $h = 0; $head = array(); $head[$h][0] = DOL_URL_ROOT.'/admin/user.php'; $head[$h][1] = $langs->trans("Parameters"); $head[$h][2] = 'card'; $h++; $head[$h][0] = DOL_URL_ROOT.'/admin/usergroup.php'; $head[$h][1] = $langs->trans("Group"); $head[$h][2] = 'usergroupcard'; $h++; $head[$h][0] = DOL_URL_ROOT.'/user/admin/user_extrafields.php'; $head[$h][1] = $langs->trans("ExtraFields")." (".$langs->trans("Users").")"; $nbExtrafields = $extrafields->attributes['user']['count']; if ($nbExtrafields > 0) { $head[$h][1] .= ''.$nbExtrafields.''; } $head[$h][2] = 'attributes'; $h++; $head[$h][0] = DOL_URL_ROOT.'/user/admin/group_extrafields.php'; $head[$h][1] = $langs->trans("ExtraFields")." (".$langs->trans("Groups").")"; $nbExtrafields = $extrafields->attributes['usergroup']['count']; if ($nbExtrafields > 0) { $head[$h][1] .= ''.$nbExtrafields.''; } $head[$h][2] = 'attributes_group'; $h++; // Show more tabs from modules // Entries must be declared in modules descriptor with line // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab // $this->tabs = array('entity:-tabname); to remove a tab complete_head_from_modules($conf, $langs, null, $head, $h, 'useradmin'); complete_head_from_modules($conf, $langs, null, $head, $h, 'useradmin', 'remove'); return $head; } /** * Show list of themes. Show all thumbs of themes * * @param User|null $fuser User concerned or null for global theme * @param int $edit 1 to add edit form * @param boolean $foruserprofile Show for user profile view * @return void */ function showSkins($fuser, $edit = 0, $foruserprofile = false) { global $conf, $langs, $db, $form; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; $formother = new FormOther($db); $dirthemes = array('/theme'); if (!empty($conf->modules_parts['theme'])) { // Using this feature slow down application foreach ($conf->modules_parts['theme'] as $reldir) { $dirthemes = array_merge($dirthemes, (array) ($reldir.'theme')); } } $dirthemes = array_unique($dirthemes); // Now dir_themes=array('/themes') or dir_themes=array('/theme','/mymodule/theme') $selected_theme = ''; if (empty($foruserprofile)) { $selected_theme = getDolGlobalString('MAIN_THEME'); } else { $selected_theme = ((is_object($fuser) && !empty($fuser->conf->MAIN_THEME)) ? $fuser->conf->MAIN_THEME : ''); } $hoverdisabled = ''; if (empty($foruserprofile)) { $hoverdisabled = (getDolGlobalString('THEME_ELDY_USE_HOVER') == '0'); } else { $hoverdisabled = (is_object($fuser) ? (empty($fuser->conf->THEME_ELDY_USE_HOVER) || $fuser->conf->THEME_ELDY_USE_HOVER == '0') : ''); } $checkeddisabled = ''; if (empty($foruserprofile)) { $checkeddisabled = (getDolGlobalString('THEME_ELDY_USE_CHECKED') == '0'); } else { $checkeddisabled = (is_object($fuser) ? (empty($fuser->conf->THEME_ELDY_USE_CHECKED) || $fuser->conf->THEME_ELDY_USE_CHECKED == '0') : ''); } $colspan = 2; if ($foruserprofile) { $colspan = 4; } $thumbsbyrow = 6; print '
'; print ''; // Title if ($foruserprofile) { print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; } else { $dirthemestring = ''; foreach ($dirthemes as $dirtheme) { $dirthemestring .= '"'.$dirtheme.'" '; } print ''; print ''; } print ''; // Set variables of theme $colorbackhmenu1 = ''; $colorbackvmenu1 = ''; $colortexttitlenotab = ''; $colortexttitlelink = ''; $colorbacktitle1 = ''; $colortexttitle = ''; $colorbacklineimpair1 = ''; $colorbacklineimpair2 = ''; $colorbacklinepair1 = ''; $colorbacklinepair2 = ''; $colortextlink = ''; $colorbacklinepairhover = ''; $colorbacklinepairchecked = ''; $butactionbg = ''; $textbutaction = ''; // Set the variables with the default value if (file_exists(DOL_DOCUMENT_ROOT.'/theme/'.$conf->theme.'/theme_vars.inc.php')) { include DOL_DOCUMENT_ROOT.'/theme/'.$conf->theme.'/theme_vars.inc.php'; } // Dark mode if ($foruserprofile) { //Nothing } else { $listofdarkmodes = array( $langs->trans("AlwaysDisabled"), $langs->trans("AccordingToBrowser"), $langs->trans("AlwaysEnabled") ); print ''; print ''; print ''; } // TopMenuDisableImages if ($foruserprofile) { /* print ''; print ''; print ''; print ''; print '';*/ } else { $listoftopmenumodes = array( $langs->transnoentitiesnoconv("IconAndText"), $langs->transnoentitiesnoconv("TextOnly"), $langs->transnoentitiesnoconv("IconOnlyAllTextsOnHover"), $langs->transnoentitiesnoconv("IconOnlyTextOnHover"), $langs->transnoentitiesnoconv("IconOnly"), ); print ''; print ''; print ''; print ''; } // Show logo if ($foruserprofile) { // Nothing } else { // Show logo print ''; print ''; print ''; } // Main menu color on pictos if ($foruserprofile) { // Nothing } else { // Show logo print ''; print ''; print ''; } // Use border on tables if ($foruserprofile) { } else { print ''; print ''; print ''; print ''; } // Table line height /* removed. height of column must use padding of td and not lineheight that has bad side effect if ($foruserprofile) { } else { $listoftopmenumodes = array( '0' => $langs->transnoentitiesnoconv("Normal"), '1' => $langs->transnoentitiesnoconv("LargeModern"), ); print ''; print ''; print ''; print ''; } */ // Background color for top menu - TopMenuBackgroundColor if ($foruserprofile) { /* print ''; print ''; print ''; print ''; print '';*/ } else { $default = (empty($colorbackhmenu1) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($colorbackhmenu1))); print ''; print ''; print ''; print ''; } // Background color for left menu - LeftMenuBackgroundColor if ($foruserprofile) { /* print ''; print ''; print ''; print ''; print '';*/ } else { $default = (empty($colorbackvmenu1) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($colorbackvmenu1))); print ''; print ''; print ''; print ''; } // Background color for main area THEME_ELDY_BACKBODY if ($foruserprofile) { /* print ''; print ''; print ''; print ''; print '';*/ } else { $default = 'ffffff'; print ''; print ''; print ''; print ''; } // TextTitleColor for title of Pages if ($foruserprofile) { } else { $default = (empty($colortexttitlenotab) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($colortexttitlenotab))); print ''; print ''; print ''; print ''; } // BackgroundTableTitleColor if ($foruserprofile) { } else { $default = (empty($colorbacktitle1) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($colorbacktitle1))); print ''; print ''; print ''; print ''; } // TextTitleColor if ($foruserprofile) { } else { $default = (empty($colortexttitle) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($colortexttitle))); print ''; print ''; print ''; print ''; } // TextTitleLinkColor if ($foruserprofile) { } else { $default = (empty($colortexttitlelink) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($colortexttitlelink))); print ''; print ''; print ''; print ''; } // BackgroundTableLineOddColor if ($foruserprofile) { } else { $default = (empty($colorbacklineimpair1) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($colorbacklineimpair1))); print ''; print ''; print ''; print ''; } // BackgroundTableLineEvenColor if ($foruserprofile) { } else { $default = (empty($colorbacklinepair1) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($colorbacklinepair1))); print ''; print ''; print ''; print ''; } // Text LinkColor if ($foruserprofile) { /* print ''; print ''; print ''; print ''; print '';*/ } else { $default = (empty($colortextlink) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($colortextlink))); print ''; print ''; print ''; print ''; } // Use Hover if ($foruserprofile) { /* Must first change option to choose color of highlight instead of yes or no. print ''; print ''; print ''; print ''; print ''; print ''; */ } else { $default = (empty($colorbacklinepairhover) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($colorbacklinepairhover))); print ''; print ''; print ''; } // Use Checked if ($foruserprofile) { /* Must first change option to choose color of highlight instead of yes or no. print ''; print ''; print ''; print ''; print ''; print ''; */ } else { $default = (empty($colorbacklinepairchecked) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($colorbacklinepairchecked))); print ''; print ''; print ''; print ''; } // Btn action if ($foruserprofile) { /* print ''; print ''; print ''; print ''; print '';*/ } else { $default = (empty($butactionbg) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($butactionbg))); print ''; print ''; print ''; print ''; } // Text btn action if ($foruserprofile) { /* print ''; print ''; print ''; print ''; print '';*/ } else { $default = (empty($textbutaction) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($textbutaction))); print ''; print ''; print ''; print ''; } // Use MAIN_OPTIMIZEFORTEXTBROWSER if ($foruserprofile) { //$default=yn($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER); $default = $langs->trans('No'); print ''; print ''; print ''; print ''; } else { //var_dump($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER); /* $default=$langs->trans('No'); print ''; print ''; print ''; print ''; */ } // Use MAIN_OPTIMIZEFORCOLORBLIND if ($foruserprofile) { //$default=yn($conf->global->MAIN_OPTIMIZEFORCOLORBLIND); $default = $langs->trans('No'); print ''; print ''; print ''; print ''; } else { } print '
'.$langs->trans("Parameter").''.$langs->trans("DefaultValue").' 
'.$langs->trans("DefaultSkin").'' . getDolGlobalString('MAIN_THEME').'  
'; print $form->textwithpicto($langs->trans("DefaultSkin"), $langs->trans("ThemeDir").' : '.$dirthemestring); print ''; $url = 'https://www.dolistore.com/9-skins'; print ''; print $langs->trans('DownloadMoreSkins'); print img_picto('', 'globe', 'class="paddingleft"'); print ''; print '
'; if (getDolGlobalString('MAIN_FORCETHEME')) { $langs->load("errors"); print $langs->trans("WarningThemeForcedTo", getDolGlobalString('MAIN_FORCETHEME')); } print '
'; $i = 0; foreach ($dirthemes as $dir) { //print $dirroot.$dir;exit; $dirtheme = dol_buildpath($dir, 0); // This include loop on $conf->file->dol_document_root $urltheme = dol_buildpath($dir, 1); if (is_dir($dirtheme)) { $handle = opendir($dirtheme); if (is_resource($handle)) { while (($subdir = readdir($handle)) !== false) { if (is_dir($dirtheme."/".$subdir) && substr($subdir, 0, 1) != '.' && substr($subdir, 0, 3) != 'CVS' && !preg_match('/common|phones/i', $subdir)) { // Disable not stable themes (dir ends with _exp or _dev) if (getDolGlobalInt('MAIN_FEATURES_LEVEL') < 2 && preg_match('/_dev$/i', $subdir)) { continue; } if (getDolGlobalInt('MAIN_FEATURES_LEVEL') < 1 && preg_match('/_exp$/i', $subdir)) { continue; } print '
'; $file = $dirtheme."/".$subdir."/thumb.png"; $url = $urltheme."/".$subdir."/thumb.png"; if (!file_exists($file)) { $url = DOL_URL_ROOT.'/public/theme/common/nophoto.png'; } print ''; if ($subdir == $conf->global->MAIN_THEME) { $title = $langs->trans("ThemeCurrentlyActive"); } else { $title = $langs->trans("ShowPreview"); } print ''.dol_escape_htmltag($title).''; print '
'; if ($subdir == $selected_theme) { print ''; } else { print ''; } print '
'; $i++; } } } } } print '
'; print '
'.$langs->trans("DarkThemeMode").''; if ($edit) { print $form->selectarray('THEME_DARKMODEENABLED', $listofdarkmodes, getDolGlobalInt('THEME_DARKMODEENABLED')); } else { print $listofdarkmodes[getDolGlobalInt('THEME_DARKMODEENABLED')]; } print $form->textwithpicto('', $langs->trans("DoesNotWorkWithAllThemes")); print '
'.$langs->trans("TopMenuDisableImages").''.(getDolGlobalString('THEME_TOPMENU_DISABLE_IMAGE',$langs->trans("Default")).'conf->THEME_ELDY_TEXTLINK)?" checked":""); print (empty($dolibarr_main_demo) && $edit)?'':' disabled="disabled"'; // Disabled for demo print '> '.$langs->trans("UsePersonalValue").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray(getDolGlobalString('THEME_TOPMENU_DISABLE_IMAGE'),array()),''),'THEME_TOPMENU_DISABLE_IMAGE','',1).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_TOPMENU_DISABLE_IMAGE,array()),''); if ($color) print ''; else print ''; } if ($edit) print '
('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; print '
'.$langs->trans("TopMenuDisableImages").''; if ($edit) { //print ajax_constantonoff('THEME_TOPMENU_DISABLE_IMAGE', array(), null, 0, 0, 1); print $form->selectarray('THEME_TOPMENU_DISABLE_IMAGE', $listoftopmenumodes, isset($conf->global->THEME_TOPMENU_DISABLE_IMAGE) ? $conf->global->THEME_TOPMENU_DISABLE_IMAGE : 0, 0, 0, 0, '', 0, 0, 0, '', 'widthcentpercentminusx maxwidth500'); } else { print $listoftopmenumodes[getDolGlobalInt('THEME_TOPMENU_DISABLE_IMAGE')]; //print yn($conf->global->THEME_TOPMENU_DISABLE_IMAGE); } print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes")); print '
'.$langs->trans("EnableShowLogo").''; if ($edit) { print ajax_constantonoff('MAIN_SHOW_LOGO', array(), null, 0, 0, 1); //print $form->selectyesno('MAIN_SHOW_LOGO', $conf->global->MAIN_SHOW_LOGO, 1); } else { print yn(getDolGlobalString('MAIN_SHOW_LOGO')); } print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes"), 1, 'help', 'inline-block'); print '
'.$langs->trans("THEME_MENU_COLORLOGO").''; if ($edit) { print ajax_constantonoff('THEME_MENU_COLORLOGO', array(), null, 0, 0, 1); } else { print yn(getDolGlobalString('THEME_MENU_COLORLOGO')); } print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes"), 1, 'help', 'inline-block'); print '
'.$langs->trans("UseBorderOnTable").''; if ($edit) { print ajax_constantonoff('THEME_ELDY_USEBORDERONTABLE', array(), null, 0, 0, 1); //print $form->selectyesno('THEME_ELDY_USEBORDERONTABLE', $conf->global->THEME_ELDY_USEBORDERONTABLE, 1); } else { print yn(getDolGlobalString('THEME_ELDY_USEBORDERONTABLE')); } print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes"), 1, 'help', 'inline-block'); print '
'.$langs->trans("TableLineHeight").''; if ($edit) { //print ajax_constantonoff('THEME_ELDY_USECOMOACTROW', array(), null, 0, 0, 1); print $form->selectarray('THEME_ELDY_USECOMOACTROW', $listoftopmenumodes, getDolGlobalString('THEME_ELDY_USECOMOACTROW'), 0, 0, 0, '', 0, 0, 0, '', 'widthcentpercentminusx maxwidth300'); } else { print $listoftopmenumodes[getDolGlobalString('THEME_ELDY_USECOMOACTROW')]; } print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes"), 1, 'help', 'inline-block'); print '
'.$langs->trans("TopMenuBackgroundColor").''.($conf->global->THEME_ELDY_TOPMENU_BACK1?$conf->global->THEME_ELDY_TOPMENU_BACK1:$langs->trans("Default")).'conf->THEME_ELDY_TOPMENU_BACK1)?" checked":""); print (empty($dolibarr_main_demo) && $edit)?'':' disabled="disabled"'; // Disabled for demo print '> '.$langs->trans("UsePersonalValue").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TOPMENU_BACK1,array()),''),'THEME_ELDY_TOPMENU_BACK1','',1).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TOPMENU_BACK1,array()),''); if ($color) print ''; else print ''; } if ($edit) print '
('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; print '
'.$langs->trans("TopMenuBackgroundColor").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_TOPMENU_BACK1') ? $conf->global->THEME_ELDY_TOPMENU_BACK1 : ''), array()), ''), 'THEME_ELDY_TOPMENU_BACK1', '', 1, '', '', 'colorbackhmenu1', $default).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TOPMENU_BACK1, array()), ''); if ($color) { print ''; } else { print $langs->trans("Default"); } } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis")); print '
'.$langs->trans("TopMenuBackgroundColor").''.($conf->global->THEME_ELDY_TOPMENU_BACK1?$conf->global->THEME_ELDY_VERMENU_BACK1:$langs->trans("Default")).'conf->THEME_ELDY_TOPMENU_BACK1)?" checked":""); print (empty($dolibarr_main_demo) && $edit)?'':' disabled="disabled"'; // Disabled for demo print '> '.$langs->trans("UsePersonalValue").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_VERMENU_BACK1,array()),''),'THEME_ELDY_VERMENU_BACK1','',1).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_VERMENU_BACK1,array()),''); if ($color) print ''; else print ''; } if ($edit) print '
('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; print '
'.$langs->trans("LeftMenuBackgroundColor").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_VERMENU_BACK1') ? $conf->global->THEME_ELDY_VERMENU_BACK1 : ''), array()), ''), 'THEME_ELDY_VERMENU_BACK1', '', 1, '', '', 'colorbackvmenu1', $default).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_VERMENU_BACK1, array()), ''); if ($color) { print ''; } else { print $langs->trans("Default"); } } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis")); print '
'.$langs->trans("TopMenuBackgroundColor").''.($conf->global->THEME_ELDY_TOPMENU_BACK1?$conf->global->THEME_ELDY_TOPMENU_BACK1:$langs->trans("Default")).'conf->THEME_ELDY_TOPMENU_BACK1)?" checked":""); print (empty($dolibarr_main_demo) && $edit)?'':' disabled="disabled"'; // Disabled for demo print '> '.$langs->trans("UsePersonalValue").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TOPMENU_BACK1,array()),''),'THEME_ELDY_TOPMENU_BACK1','',1).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TOPMENU_BACK1,array()),''); if ($color) print ''; else print ''; } if ($edit) print '
('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; print '
'.$langs->trans("BackgroundColor").''; //var_dump($conf->global->THEME_ELDY_BACKBODY); if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_BACKBODY') ? $conf->global->THEME_ELDY_BACKBODY : ''), array()), ''), 'THEME_ELDY_BACKBODY', '', 1, '', '', 'colorbackbody', $default).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_BACKBODY, array()), ''); if ($color) { print ''; } else { print $langs->trans("Default"); } } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis")); print '
'.$langs->trans("TextTitleColor").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_TEXTTITLENOTAB') ? $conf->global->THEME_ELDY_TEXTTITLENOTAB : ''), array()), ''), 'THEME_ELDY_TEXTTITLENOTAB', '', 1, '', '', 'colortexttitlenotab', $default).' '; } else { print $formother->showColor($conf->global->THEME_ELDY_TEXTTITLENOTAB, $langs->trans("Default")); } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis")); print '
'.$langs->trans("BackgroundTableTitleColor").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_BACKTITLE1') ? $conf->global->THEME_ELDY_BACKTITLE1 : ''), array()), ''), 'THEME_ELDY_BACKTITLE1', '', 1, '', '', 'colorbacktitle1', $default).' '; } else { print $formother->showColor($conf->global->THEME_ELDY_BACKTITLE1, $langs->trans("Default")); } print '   '.$langs->trans("Default").': '.$default.' '; // $colorbacktitle1 in CSS print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis")); print '
'.$langs->trans("BackgroundTableTitleTextColor").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_TEXTTITLE') ? $conf->global->THEME_ELDY_TEXTTITLE : ''), array()), ''), 'THEME_ELDY_TEXTTITLE', '', 1, '', '', 'colortexttitle', $default).' '; } else { print $formother->showColor($conf->global->THEME_ELDY_TEXTTITLE, $langs->trans("Default")); } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis")); print '
'.$langs->trans("BackgroundTableTitleTextlinkColor").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_TEXTTITLELINK') ? $conf->global->THEME_ELDY_TEXTTITLELINK : ''), array()), ''), 'THEME_ELDY_TEXTTITLELINK', '', 1, '', '', 'colortexttitlelink', $default).' '; } else { print $formother->showColor($conf->global->THEME_ELDY_TEXTTITLELINK, $langs->trans("Default")); } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis")); print ''; print '
'.$langs->trans("BackgroundTableLineOddColor").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_LINEIMPAIR1') ? $conf->global->THEME_ELDY_LINEIMPAIR1 : ''), array()), ''), 'THEME_ELDY_LINEIMPAIR1', '', 1, '', '', 'colorbacklineimpair2', $default).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_LINEIMPAIR1, array()), ''); if ($color) { print ''; } else { print $langs->trans("Default"); } } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis")); print '
'.$langs->trans("BackgroundTableLineEvenColor").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_LINEPAIR1') ? $conf->global->THEME_ELDY_LINEPAIR1 : ''), array()), ''), 'THEME_ELDY_LINEPAIR1', '', 1, '', '', 'colorbacklinepair2', $default).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_LINEPAIR1, array()), ''); if ($color) { print ''; } else { print $langs->trans("Default"); } } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis")); print '
'.$langs->trans("TopMenuBackgroundColor").''.($conf->global->THEME_ELDY_TOPMENU_BACK1?$conf->global->THEME_ELDY_TEXTLINK:$langs->trans("Default")).'conf->THEME_ELDY_TEXTLINK)?" checked":""); print (empty($dolibarr_main_demo) && $edit)?'':' disabled="disabled"'; // Disabled for demo print '> '.$langs->trans("UsePersonalValue").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TEXTLINK,array()),''),'THEME_ELDY_TEXTLINK','',1).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TEXTLINK,array()),''); if ($color) print ''; else print ''; } if ($edit) print '
('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; print '
'.$langs->trans("LinkColor").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_TEXTLINK') ? $conf->global->THEME_ELDY_TEXTLINK : ''), array()), ''), 'THEME_ELDY_TEXTLINK', '', 1, '', '', 'colortextlink', $default).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TEXTLINK, array()), ''); if ($color) { print ''; } else { //print ''; //print ''.$langs->trans("Default").''; print $langs->trans("Default"); } } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis")); print '
'.$langs->trans("HighlightLinesOnMouseHover").'global->THEME_ELDY_USE_HOVER?" checked":"").'> '.$langs->trans("UsePersonalValue").''; print '   ('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; print '
'.$langs->trans("HighlightLinesColor").''; //print ''; //print '   ('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; if ($edit) { if (getDolGlobalString('THEME_ELDY_USE_HOVER') == '1') { $color = colorArrayToHex(colorStringToArray($colorbacklinepairhover)); } else { $color = colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_USE_HOVER') ? $conf->global->THEME_ELDY_USE_HOVER : ''), array()), ''); } print $formother->selectColor($color, 'THEME_ELDY_USE_HOVER', '', 1, '', '', 'colorbacklinepairhover', $default).' '; } else { if (getDolGlobalString('THEME_ELDY_USE_HOVER') == '1') { $color = colorArrayToHex(colorStringToArray($colorbacklinepairhover)); } else { $color = colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_USE_HOVER') ? $conf->global->THEME_ELDY_USE_HOVER : ''), array()), ''); } if ($color) { if ($color != colorArrayToHex(colorStringToArray($colorbacklinepairhover))) { print ''; } else { print $langs->trans("Default"); } } else { print $langs->trans("Default"); } } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis")); print '
'.$langs->trans("HighlightLinesOnMouseHover").'global->THEME_ELDY_USE_HOVER?" checked":"").'> '.$langs->trans("UsePersonalValue").''; print '   ('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; print '
'.$langs->trans("HighlightLinesChecked").''; //print ''; //print '   ('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; if ($edit) { if (getDolGlobalString('THEME_ELDY_USE_CHECKED') == '1') { $color = 'e6edf0'; } else { $color = colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_USE_CHECKED') ? $conf->global->THEME_ELDY_USE_CHECKED : ''), array()), ''); } print $formother->selectColor($color, 'THEME_ELDY_USE_CHECKED', '', 1, '', '', 'colorbacklinepairchecked', $default).' '; } else { if (getDolGlobalString('THEME_ELDY_USE_CHECKED') == '1') { $color = 'e6edf0'; } else { $color = colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_USE_CHECKED') ? $conf->global->THEME_ELDY_USE_CHECKED : ''), array()), ''); } if ($color) { if ($color != 'e6edf0') { print ''; } else { print $langs->trans("Default"); } } else { print $langs->trans("Default"); } } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis")); print '
'.$langs->trans("TopMenuBackgroundColor").''.($conf->global->THEME_ELDY_TOPMENU_BACK1?$conf->global->THEME_ELDY_BTNACTION:$langs->trans("Default")).'conf->THEME_ELDY_BTNACTION)?" checked":""); print (empty($dolibarr_main_demo) && $edit)?'':' disabled="disabled"'; // Disabled for demo print '> '.$langs->trans("UsePersonalValue").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_BTNACTION,array()),''),'THEME_ELDY_BTNACTION','',1).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_BTNACTION,array()),''); if ($color) print ''; else print ''; } if ($edit) print '
('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; print '
'.$langs->trans("BtnActionColor").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_BTNACTION') ? $conf->global->THEME_ELDY_BTNACTION : ''), array()), ''), 'THEME_ELDY_BTNACTION', '', 1, '', '', 'butactionbg', $default).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_BTNACTION, array()), ''); if ($color) { print ''; } else { //print ''; //print ''.$langs->trans("Default").''; print $langs->trans("Default"); } } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis")); print '
'.$langs->trans("TopMenuBackgroundColor").''.($conf->global->THEME_ELDY_TOPMENU_BACK1?$conf->global->THEME_ELDY_TEXTBTNACTION:$langs->trans("Default")).'conf->THEME_ELDY_TEXTBTNACTION)?" checked":""); print (empty($dolibarr_main_demo) && $edit)?'':' disabled="disabled"'; // Disabled for demo print '> '.$langs->trans("UsePersonalValue").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TEXTBTNACTION,array()),''),'THEME_ELDY_TEXTBTNACTION','',1).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_BTNACTION,array()),''); if ($color) print ''; else print ''; } if ($edit) print '
('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; print '
'.$langs->trans("TextBtnActionColor").''; if ($edit) { print $formother->selectColor(colorArrayToHex(colorStringToArray((getDolGlobalString('THEME_ELDY_TEXTBTNACTION') ? $conf->global->THEME_ELDY_TEXTBTNACTION : ''), array()), ''), 'THEME_ELDY_TEXTBTNACTION', '', 1, '', '', 'textbutaction', $default).' '; } else { $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TEXTBTNACTION, array()), ''); if ($color) { print ''; } else { //print ''; //print ''.$langs->trans("Default").''; print $langs->trans("Default"); } } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis")); print '
'.$langs->trans("MAIN_OPTIMIZEFORTEXTBROWSER").''; //print ajax_constantonoff("MAIN_OPTIMIZEFORTEXTBROWSER", array(), null, 0, 0, 1, 0); if ($edit) { print $form->selectyesno('MAIN_OPTIMIZEFORTEXTBROWSER', (isset($fuser->conf->MAIN_OPTIMIZEFORTEXTBROWSER) ? $fuser->conf->MAIN_OPTIMIZEFORTEXTBROWSER : 0), 1); } else { if (!getDolGlobalString('MAIN_OPTIMIZEFORTEXTBROWSER')) { print yn(isset($fuser->conf->MAIN_OPTIMIZEFORTEXTBROWSER) ? $fuser->conf->MAIN_OPTIMIZEFORTEXTBROWSER : 0); } else { print yn(1); if (empty($fuser->conf->MAIN_OPTIMIZEFORTEXTBROWSER)) { print ' ('.$langs->trans("ForcedByGlobalSetup").')'; } } } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("MAIN_OPTIMIZEFORTEXTBROWSERDesc")); print '
'.$langs->trans("MAIN_OPTIMIZEFORTEXTBROWSER").''; if ($edit) { print $form->selectyesno('MAIN_OPTIMIZEFORTEXTBROWSER', $conf->global->MAIN_OPTIMIZEFORTEXTBROWSER, 1); } else { print yn($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER); } print '   wspan class="opacitymedium">'.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("MAIN_OPTIMIZEFORTEXTBROWSERDesc")); print ''; print '
'.$langs->trans("MAIN_OPTIMIZEFORCOLORBLIND").''; $colorBlindOptions = array( 0 => $langs->trans('No'), 'flashy' => $langs->trans('Flashy'), 'protanopia' => $langs->trans('Protanopia'), 'deuteranopes' => $langs->trans('Deuteranopes'), 'tritanopes' => $langs->trans('Tritanopes'), ); if ($edit) { print $form->selectArray('MAIN_OPTIMIZEFORCOLORBLIND', $colorBlindOptions, (isset($fuser->conf->MAIN_OPTIMIZEFORCOLORBLIND) ? $fuser->conf->MAIN_OPTIMIZEFORCOLORBLIND : 0), 0); } else { if (!empty($fuser->conf->MAIN_OPTIMIZEFORCOLORBLIND) && isset($colorBlindOptions[$fuser->conf->MAIN_OPTIMIZEFORCOLORBLIND])) { print $colorBlindOptions[$fuser->conf->MAIN_OPTIMIZEFORCOLORBLIND]; } else { print yn(0); } } print '   '.$langs->trans("Default").': '.$default.' '; print $form->textwithpicto('', $langs->trans("MAIN_OPTIMIZEFORCOLORBLINDDesc")); print '
'; print '
'; }