dolibarr 24.0.0-beta
ihm.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005-2017 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2016 Juanjo Menent <jmenent@2byte.es>
6 * Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
7 * Copyright (C) 2021-2025 Alexandre Spangaro <alexandre@inovea-conseil.com>
8 * Copyright (C) 2021-2023 Anthony Berton <anthony.berton@bb2a.fr>
9 * Copyright (C) 2023 Eric Seigne <eric.seigne@cap-rel.fr>
10 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
11 * Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 3 of the License, or
16 * (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program. If not, see <https://www.gnu.org/licenses/>.
25 */
26
32// Load Dolibarr environment
33require '../main.inc.php';
42require_once DOL_DOCUMENT_ROOT.'/core/lib/usergroups.lib.php';
43require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
44require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
45require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
46require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
47require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
48require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
49
50// Load translation files required by the page
51$langs->loadLangs(array('admin', 'languages', 'other', 'companies', 'products', 'members', 'projects', 'hrm', 'agenda'));
52
53if (!$user->admin) {
55}
56
57$action = GETPOST('action', 'aZ09');
58$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'adminihm'; // To manage different context of search
59$mode = GETPOST('mode', 'aZ09') ? GETPOST('mode', 'aZ09') : 'other'; // 'template', 'dashboard', 'login', 'other'
60
61if (!defined("MAIN_MOTD")) {
62 define("MAIN_MOTD", "");
63}
64
65$object = new stdClass();
66
67
68/*
69 * Action
70 */
71
72$parameters = array();
73$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
74if ($reshook < 0) {
75 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
76}
77
78if (GETPOST('cancel', 'alpha')) {
79 $action = '';
80}
81
82// Convert action set_XXX and del_XXX to set var (this is used when no javascript on for ajax_constantonoff)
83$regs = array();
84if (preg_match('/^(set|del)_([A-Z_]+)$/', $action, $regs)) {
85 if ($regs[1] == 'set') {
86 dolibarr_set_const($db, $regs[2], 1, 'chaine', 0, '', $conf->entity);
87 } else {
88 dolibarr_del_const($db, $regs[2], $conf->entity);
89 }
90}
91
92if ($action == 'removebackgroundlogin' && getDolGlobalString('MAIN_LOGIN_BACKGROUND')) {
93 dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", getDolGlobalInt('MAIN_IHM_PARAMS_REV') + 1, 'chaine', 0, '', $conf->entity);
94 require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
95
96 $logofile = $conf->mycompany->dir_output.'/logos/' . getDolGlobalString('MAIN_LOGIN_BACKGROUND');
97 dol_delete_file($logofile);
98 dolibarr_del_const($db, "MAIN_LOGIN_BACKGROUND", $conf->entity);
99 $mysoc->logo = '';
100
101 /*$logosmallfile=$conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_small;
102 dol_delete_file($logosmallfile);
103 dolibarr_del_const($db, "MAIN_INFO_SOCIETE_LOGO_SMALL",$conf->entity);
104 $mysoc->logo_small='';
105
106 $logominifile=$conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini;
107 dol_delete_file($logominifile);
108 dolibarr_del_const($db, "MAIN_INFO_SOCIETE_LOGO_MINI",$conf->entity);
109 $mysoc->logo_mini='';*/
110}
111
112if ($action == 'update') {
113 $error = 0;
114
115 if ($mode == 'template') {
116 //dolibarr_del_const($db, "MAIN_THEME", 0); // To be sure we don't have this constant set for all entities
117
118 dolibarr_set_const($db, "MAIN_THEME", GETPOST("main_theme", 'aZ09'), 'chaine', 0, '', $conf->entity);
119 dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", getDolGlobalInt('MAIN_IHM_PARAMS_REV') + 1, 'chaine', 0, '', $conf->entity);
120
121 if (GETPOSTISSET('THEME_ELDY_USECOMOACTROW')) {
122 dolibarr_set_const($db, "THEME_ELDY_USECOMOACTROW", GETPOST('THEME_ELDY_USECOMOACTROW'), 'chaine', 0, '', $conf->entity);
123 }
124
125 if (GETPOSTISSET('THEME_DARKMODEENABLED')) {
126 $val = GETPOST('THEME_DARKMODEENABLED');
127 if (!$val) {
128 dolibarr_del_const($db, "THEME_DARKMODEENABLED", $conf->entity);
129 }
130 if ($val) {
131 dolibarr_set_const($db, "THEME_DARKMODEENABLED", $val, 'chaine', 0, '', $conf->entity);
132 }
133 }
134
135 if (GETPOSTISSET('THEME_TOPMENU_DISABLE_IMAGE')) {
136 $val = GETPOST('THEME_TOPMENU_DISABLE_IMAGE');
137 if (!$val) {
138 dolibarr_del_const($db, 'THEME_TOPMENU_DISABLE_IMAGE', $conf->entity);
139 } else {
140 dolibarr_set_const($db, 'THEME_TOPMENU_DISABLE_IMAGE', GETPOST('THEME_TOPMENU_DISABLE_IMAGE'), 'chaine', 0, '', $conf->entity);
141 }
142 }
143
144 if (GETPOSTISSET('THEME_ELDY_BORDER_RADIUS')) {
145 $val = GETPOST('THEME_ELDY_BORDER_RADIUS');
146 dolibarr_set_const($db, 'THEME_ELDY_BORDER_RADIUS', GETPOSTINT('THEME_ELDY_BORDER_RADIUS'), 'chaine', 0, '', $conf->entity);
147 }
148
149 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_BACKBODY'), array()))));
150 if ($val == '') {
151 dolibarr_del_const($db, 'THEME_ELDY_BACKBODY', $conf->entity);
152 } else {
153 dolibarr_set_const($db, 'THEME_ELDY_BACKBODY', $val, 'chaine', 0, '', $conf->entity);
154 }
155
156 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_TOPMENU_BACK1'), array()))));
157 if ($val == '') {
158 dolibarr_del_const($db, 'THEME_ELDY_TOPMENU_BACK1', $conf->entity);
159 } else {
160 dolibarr_set_const($db, 'THEME_ELDY_TOPMENU_BACK1', $val, 'chaine', 0, '', $conf->entity);
161 }
162
163 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_VERMENU_BACK1'), array()))));
164 if ($val == '') {
165 dolibarr_del_const($db, 'THEME_ELDY_VERMENU_BACK1', $conf->entity);
166 } else {
167 dolibarr_set_const($db, 'THEME_ELDY_VERMENU_BACK1', $val, 'chaine', 0, '', $conf->entity);
168 }
169
170 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_TEXTTITLENOTAB'), array()))));
171 if ($val == '') {
172 dolibarr_del_const($db, 'THEME_ELDY_TEXTTITLENOTAB', $conf->entity);
173 } else {
174 dolibarr_set_const($db, 'THEME_ELDY_TEXTTITLENOTAB', $val, 'chaine', 0, '', $conf->entity);
175 }
176
177 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_BACKTITLE1'), array()))));
178 if ($val == '') {
179 dolibarr_del_const($db, 'THEME_ELDY_BACKTITLE1', $conf->entity);
180 } else {
181 dolibarr_set_const($db, 'THEME_ELDY_BACKTITLE1', $val, 'chaine', 0, '', $conf->entity);
182 }
183
184 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_TEXTTITLE'), array()))));
185 if ($val == '') {
186 dolibarr_del_const($db, 'THEME_ELDY_TEXTTITLE', $conf->entity);
187 } else {
188 dolibarr_set_const($db, 'THEME_ELDY_TEXTTITLE', $val, 'chaine', 0, '', $conf->entity);
189 }
190
191 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_TEXTTITLELINK'), array()))));
192 if ($val == '') {
193 dolibarr_del_const($db, 'THEME_ELDY_TEXTTITLELINK', $conf->entity);
194 } else {
195 dolibarr_set_const($db, 'THEME_ELDY_TEXTTITLELINK', $val, 'chaine', 0, '', $conf->entity);
196 }
197
198 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_LINEIMPAIR1'), array()))));
199 if ($val == '') {
200 dolibarr_del_const($db, 'THEME_ELDY_LINEIMPAIR1', $conf->entity);
201 } else {
202 dolibarr_set_const($db, 'THEME_ELDY_LINEIMPAIR1', $val, 'chaine', 0, '', $conf->entity);
203 }
204 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_LINEIMPAIR1'), array()))));
205 if ($val == '') {
206 dolibarr_del_const($db, 'THEME_ELDY_LINEIMPAIR2', $conf->entity);
207 } else {
208 dolibarr_set_const($db, 'THEME_ELDY_LINEIMPAIR2', $val, 'chaine', 0, '', $conf->entity);
209 }
210
211 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_LINEPAIR1'), array()))));
212 if ($val == '') {
213 dolibarr_del_const($db, 'THEME_ELDY_LINEPAIR1', $conf->entity);
214 } else {
215 dolibarr_set_const($db, 'THEME_ELDY_LINEPAIR1', $val, 'chaine', 0, '', $conf->entity);
216 }
217 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_LINEPAIR1'), array()))));
218 if ($val == '') {
219 dolibarr_del_const($db, 'THEME_ELDY_LINEPAIR2', $conf->entity);
220 } else {
221 dolibarr_set_const($db, 'THEME_ELDY_LINEPAIR2', $val, 'chaine', 0, '', $conf->entity);
222 }
223
224 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_TEXTLINK'), array()))));
225 if ($val == '') {
226 dolibarr_del_const($db, 'THEME_ELDY_TEXTLINK', $conf->entity);
227 } else {
228 dolibarr_set_const($db, 'THEME_ELDY_TEXTLINK', $val, 'chaine', 0, '', $conf->entity);
229 }
230
231 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_USE_HOVER'), array()))));
232 if ($val == '') {
233 dolibarr_del_const($db, 'THEME_ELDY_USE_HOVER', $conf->entity);
234 } else {
235 dolibarr_set_const($db, "THEME_ELDY_USE_HOVER", $val, 'chaine', 0, '', $conf->entity);
236 }
237
238 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_USE_CHECKED'), array()))));
239 if ($val == '') {
240 dolibarr_del_const($db, 'THEME_ELDY_USE_CHECKED', $conf->entity);
241 } else {
242 dolibarr_set_const($db, "THEME_ELDY_USE_CHECKED", $val, 'chaine', 0, '', $conf->entity);
243 }
244
245 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_BTNACTION'), array()))));
246 if ($val == '') {
247 dolibarr_del_const($db, 'THEME_ELDY_BTNACTION', $conf->entity);
248 } else {
249 dolibarr_set_const($db, 'THEME_ELDY_BTNACTION', $val, 'chaine', 0, '', $conf->entity);
250 }
251
252 $val = (implode(',', (colorStringToArray(GETPOST('THEME_ELDY_TEXTBTNACTION'), array()))));
253 if ($val == '') {
254 dolibarr_del_const($db, 'THEME_ELDY_TEXTBTNACTION', $conf->entity);
255 } else {
256 dolibarr_set_const($db, 'THEME_ELDY_TEXTBTNACTION', $val, 'chaine', 0, '', $conf->entity);
257 }
258
259 setEventMessages($langs->trans("SetupSaved"), null);
260 }
261
262 if ($mode == 'dashboard') {
263 dolibarr_set_const($db, "MAIN_MOTD", dol_htmlcleanlastbr(GETPOST("main_motd", 'restricthtml')), 'chaine', 0, '', $conf->entity);
264
265 setEventMessages($langs->trans("SetupSaved"), null);
266 }
267
268 if ($mode == 'other') {
269 dolibarr_set_const($db, "MAIN_LANG_DEFAULT", GETPOST("MAIN_LANG_DEFAULT", 'aZ09'), 'chaine', 0, '', $conf->entity);
270 dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", getDolGlobalInt('MAIN_IHM_PARAMS_REV') + 1, 'chaine', 0, '', $conf->entity);
271
272 dolibarr_set_const($db, "MAIN_SIZE_LISTE_LIMIT", GETPOSTINT("MAIN_SIZE_LISTE_LIMIT"), 'chaine', 0, '', $conf->entity);
273 dolibarr_set_const($db, "MAIN_SIZE_SHORTLIST_LIMIT", GETPOSTINT("MAIN_SIZE_SHORTLIST_LIMIT"), 'chaine', 0, '', $conf->entity);
274
275 if (GETPOSTISSET("MAIN_CHECKBOX_LEFT_COLUMN")) {
276 dolibarr_set_const($db, "MAIN_CHECKBOX_LEFT_COLUMN", GETPOSTINT("MAIN_CHECKBOX_LEFT_COLUMN"), 'chaine', 0, '', $conf->entity);
277 }
278
279 //dolibarr_set_const($db, "MAIN_DISABLE_JAVASCRIPT", GETPOST("MAIN_DISABLE_JAVASCRIPT", 'aZ09'), 'chaine', 0, '', $conf->entity);
280 //dolibarr_set_const($db, "MAIN_BUTTON_HIDE_UNAUTHORIZED", GETPOST("MAIN_BUTTON_HIDE_UNAUTHORIZED", 'aZ09'), 'chaine', 0, '', $conf->entity);
281 //dolibarr_set_const($db, "MAIN_MENU_HIDE_UNAUTHORIZED", GETPOST("MAIN_MENU_HIDE_UNAUTHORIZED", 'aZ09'), 'chaine', 0, '', $conf->entity);
282 dolibarr_set_const($db, "MAIN_START_WEEK", GETPOSTINT("MAIN_START_WEEK"), 'chaine', 0, '', $conf->entity);
283
284 dolibarr_set_const($db, "MAIN_DEFAULT_WORKING_DAYS", GETPOST("MAIN_DEFAULT_WORKING_DAYS", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
285 dolibarr_set_const($db, "MAIN_DEFAULT_WORKING_HOURS", GETPOST("MAIN_DEFAULT_WORKING_HOURS", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
286
287 dolibarr_set_const($db, "MAIN_BUGTRACK_ENABLELINK", GETPOST("MAIN_BUGTRACK_ENABLELINK", 'alpha'), 'chaine', 0, '', $conf->entity);
288
289 dolibarr_set_const($db, "MAIN_FIRSTNAME_NAME_POSITION", GETPOST("MAIN_FIRSTNAME_NAME_POSITION", 'aZ09'), 'chaine', 0, '', $conf->entity);
290
291
292 setEventMessages($langs->trans("SetupSaved"), null);
293 }
294
295 if ($mode == 'login') {
296 dolibarr_set_const($db, "MAIN_HOME", dol_htmlcleanlastbr(GETPOST("main_home", 'restricthtml')), 'chaine', 0, '', $conf->entity);
297 //dolibarr_set_const($db, "MAIN_HELP_DISABLELINK", GETPOST("MAIN_HELP_DISABLELINK", 'aZ09'), 'chaine', 0, '', 0); // Param for all entities
298
299 $varforimage = 'imagebackground';
300 $dirforimage = $conf->mycompany->dir_output . '/logos/';
301 if ($_FILES[$varforimage]["tmp_name"]) {
302 $reg = array();
303 if (preg_match('/([^\\/:]+)$/i', (string) $_FILES[$varforimage]["name"], $reg)) {
304 $original_file = $reg[1];
305
306 $isimage = image_format_supported($original_file);
307 if ($isimage >= 0) {
308 dol_syslog("Move file " . $_FILES[$varforimage]["tmp_name"] . " to " . $dirforimage . $original_file);
309 if (!is_dir($dirforimage)) {
310 dol_mkdir($dirforimage);
311 }
312 $result = dol_move_uploaded_file($_FILES[$varforimage]["tmp_name"], $dirforimage . $original_file, 1, 0, $_FILES[$varforimage]['error']);
313 if ($result > 0) {
314 dolibarr_set_const($db, "MAIN_LOGIN_BACKGROUND", $original_file, 'chaine', 0, '', $conf->entity);
315 } elseif (preg_match('/^ErrorFileIsInfectedWithAVirus/', $result)) {
316 $error++;
317 $langs->load("errors");
318 $tmparray = explode(':', $result);
319 setEventMessages($langs->trans('ErrorFileIsInfectedWithAVirus', $tmparray[1]), null, 'errors');
320 } else {
321 $error++;
322 setEventMessages($langs->trans("ErrorFailedToSaveFile"), null, 'errors');
323 }
324 } else {
325 $error++;
326 $langs->load("errors");
327 setEventMessages($langs->trans("ErrorBadImageFormat"), null, 'errors');
328 }
329 }
330 }
331
332 if (!$error) {
333 setEventMessages($langs->trans("SetupSaved"), null);
334 }
335 }
336
337 if ($mode == 'css') {
338 $csscontent = GETPOST('MAIN_IHM_CUSTOM_CSS', 'restricthtml'); // Will return a sanitized HTML content (so with double spaes that may be replaced with one, ...
339 $csscontent = dol_string_nohtmltag($csscontent, 2, 'UTF-8', 0, 0);
340
341 dolibarr_set_const($db, "MAIN_IHM_CUSTOM_CSS", $csscontent, 'chaine', 0, '', $conf->entity);
342
343 setEventMessages($langs->trans("SetupSaved"), null);
344 }
345
346 $_SESSION["mainmenu"] = ""; // The menu manager may have changed
347
348 if (GETPOST('dol_resetcache')) {
349 dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", getDolGlobalInt('MAIN_IHM_PARAMS_REV') + 1, 'chaine', 0, '', $conf->entity);
350 }
351
352 header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup&mode=".$mode.(GETPOSTISSET('page_y') ? '&page_y='.GETPOSTINT('page_y') : ''));
353 exit;
354}
355
356
357/*
358 * View
359 */
360
361$wikihelp = 'EN:First_setup|FR:Premiers_param&eacute;trages|ES:Primeras_configuraciones';
362
364 '',
365 $langs->trans("Setup"),
366 $wikihelp,
367 '',
368 0,
369 0,
370 array(
371 '/includes/ace/src/ace.js',
372 '/includes/ace/src/ext-statusbar.js',
373 '/includes/ace/src/ext-language_tools.js',
374 ),
375 array(),
376 '',
377 'mod-admin page-ihm'
378);
379
380$form = new Form($db);
381$formother = new FormOther($db);
382$formadmin = new FormAdmin($db);
383
384print load_fiche_titre($form->textwithpicto($langs->trans("GUISetup"), $langs->trans("DisplayDesc")), '', 'title_setup');
385
386
387// WYSIWYG Editor
388require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
389
390print '<form enctype="multipart/form-data" method="POST" action="'.dolBuildUrl($_SERVER["PHP_SELF"]).'">';
391print '<input type="hidden" name="token" value="'.newToken().'">';
392print '<input type="hidden" name="action" value="update">';
393print '<input type="hidden" name="page_y" value="">';
394print '<input type="hidden" id="mode" name="mode" value="'.dol_escape_htmltag($mode).'">';
395print '<input type="hidden" name="dol_resetcache" value="1">';
396
397$head = ihm_prepare_head();
398
399print dol_get_fiche_head($head, $mode, '', -1, '');
400
401print '<br>';
402
403clearstatcache();
404
405if ($mode == 'other') {
406 print '<div class="div-table-responsive-no-min">';
407 print '<table summary="edit" class="noborder centpercent editmode tableforfield">';
408
409 print '<tr class="liste_titre"><td class="titlefieldmiddle">';
410 print $langs->trans("Language");
411 print '</td><td>';
412 print '</td></tr>';
413
414 // Default language
415 print '<tr class="oddeven"><td>'.$langs->trans("DefaultLanguage").'</td><td>';
416 print img_picto('', 'language', 'class="pictofixedwidth"');
417 print $formadmin->select_language(getDolGlobalString('MAIN_LANG_DEFAULT'), 'MAIN_LANG_DEFAULT', 1, array(), '', 0, 0, 'minwidth300', 2);
418 //print '<input class="button button-save smallpaddingimp" type="submit" name="submit" value="'.$langs->trans("Save").'">';
419 print '</td>';
420 print '</tr>';
421
422 // Multilingual GUI
423 print '<tr class="oddeven"><td>' . $langs->trans("EnableMultilangInterface") . '</td><td>';
424 print ajax_constantonoff("MAIN_MULTILANGS", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'language');
425 print '</td>';
426 print '</tr>';
427
428 print '</table>' . "\n";
429 print '</div>';
430
431 print '<div class="center">';
432 print '<input class="button button-save reposition" type="submit" name="submit" value="' . $langs->trans("Save") . '">';
433 print '<input class="button button-cancel reposition" type="submit" name="cancel" value="' . $langs->trans("Cancel") . '">';
434 print '</div>';
435
436 print '<br>';
437 print '<br>';
438
439 // Other
440 print '<div class="div-table-responsive-no-min">';
441 print '<table summary="otherparameters" class="noborder centpercent editmode tableforfield">';
442
443 print '<tr class="liste_titre"><td class="titlefieldmiddle">';
444 print $langs->trans("Miscellaneous");
445 print '</td>';
446 print '<td></td>';
447 print '</tr>';
448
449 if (!empty($conf->use_javascript_ajax)) {
450 // Show Quick Add link
451 print '<tr class="oddeven"><td>' . $langs->trans("ShowQuickAddLink") . '</td><td>';
452 print ajax_constantonoff("MAIN_USE_TOP_MENU_QUICKADD_DROPDOWN", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'other');
453 print '</td>';
454 print '</tr>';
455 }
456
457 // Hide wiki link on login page
458 $pictohelp = '<span class="fa fa-question-circle"></span>';
459 print '<tr class="oddeven"><td>' . str_replace('{picto}', $pictohelp, $langs->trans("DisableLinkToHelp", '{picto}')) . '</td><td>';
460 print ajax_constantonoff("MAIN_HELP_DISABLELINK", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'other');
461 print '</td>';
462 print '</tr>';
463
464 // Max size of lists
465 print '<tr class="oddeven"><td>' . $langs->trans("DefaultMaxSizeList") . '</td><td><input class="flat width50" name="MAIN_SIZE_LISTE_LIMIT" value="';
466 if (getDolGlobalInt('MAIN_SIZE_LISTE_LIMIT') > 0) {
467 print getDolGlobalString('MAIN_SIZE_LISTE_LIMIT');
468 }
469 print '">';
470 if (getDolGlobalInt('MAIN_SIZE_LISTE_LIMIT') <= 0) {
471 print ' &nbsp; <span class="opacitymedium">('.$langs->trans("Automatic").')</span>';
472 }
473 print '</td>';
474 print '</tr>';
475
476 // Max size of short lists on customer card
477 print '<tr class="oddeven"><td>' . $langs->trans("DefaultMaxSizeShortList") . '</td><td><input class="flat width50" name="MAIN_SIZE_SHORTLIST_LIMIT" value="' . getDolGlobalString('MAIN_SIZE_SHORTLIST_LIMIT') . '"></td>';
478 print '</tr>';
479
480 // Display checkboxes and fields menu left / right
481 print '<tr class="oddeven"><td>' . $langs->trans("MAIN_CHECKBOX_LEFT_COLUMN") . '</td><td>';
482 print ajax_constantonoff("MAIN_CHECKBOX_LEFT_COLUMN", array(), $conf->entity, 0, 0, 1, 0, 0, 1, '', 'other');
483 print '</td>';
484 print '</tr>';
485
486 // First day for weeks
487 print '<tr class="oddeven"><td>' . $langs->trans("WeekStartOnDay") . '</td><td>';
488 print $formother->select_dayofweek(getDolGlobalString('MAIN_START_WEEK', '1'), 'MAIN_START_WEEK', 0);
489 print '</td>';
490 print '</tr>';
491
492 // DefaultWorkingDays
493 print '<tr class="oddeven"><td>' . $langs->trans("DefaultWorkingDays") . '</td><td>';
494 print '<input type="text" name="MAIN_DEFAULT_WORKING_DAYS" size="5" value="' . getDolGlobalString('MAIN_DEFAULT_WORKING_DAYS', '1-5') . '">';
495 print '</td>';
496 print '</tr>';
497
498 // DefaultWorkingHours
499 print '<tr class="oddeven"><td>' . $langs->trans("DefaultWorkingHours") . '</td><td>';
500 print '<input type="text" name="MAIN_DEFAULT_WORKING_HOURS" size="5" value="' . getDolGlobalString('MAIN_DEFAULT_WORKING_HOURS', '9-18') . '">';
501 print '</td>';
502 print '</tr>';
503
504 // Firstname/Name
505 print '<tr class="oddeven"><td>' . $langs->trans("FirstnameNamePosition") . '</td><td>';
506 $array = array(0 => $langs->trans("Firstname") . ' ' . $langs->trans("Lastname"), 1 => $langs->trans("Lastname") . ' ' . $langs->trans("Firstname"));
507 print $form->selectarray('MAIN_FIRSTNAME_NAME_POSITION', $array, getDolGlobalInt('MAIN_FIRSTNAME_NAME_POSITION', 0));
508 print '</td>';
509 print '</tr>';
510
511 // Hide unauthorized menus
512 print '<tr class="oddeven"><td>' . $form->textwithpicto($langs->trans("HideUnauthorizedMenu"), $langs->trans("JustGrayedOtherwise")) . '</td><td>';
513 print ajax_constantonoff("MAIN_MENU_HIDE_UNAUTHORIZED", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'other');
514 print '</td>';
515 print '</tr>';
516
517 // Hide unauthorized button
518 print '<tr class="oddeven"><td>' . $form->textwithpicto($langs->trans("ButtonHideUnauthorized"), $langs->trans("JustGrayedOtherwise")) . '</td><td>';
519 print ajax_constantonoff("MAIN_BUTTON_HIDE_UNAUTHORIZED", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'other');
520 print '</td>';
521 print '</tr>';
522
523 // Hide version link
524 /*
525
526 print '<tr><td>'.$langs->trans("HideVersionLink").'</td><td>';
527 print $form->selectyesno('MAIN_HIDE_VERSION',$conf->global->MAIN_HIDE_VERSION,1);
528 print '</td>';
529 print '</tr>';
530 */
531
532
533 // Show search area in top menu
534 print '<tr class="oddeven"><td>' . img_picto('', 'search', 'class="pictofixedwidth"'). ' '.$langs->trans("ShowSearchAreaInTopMenu") .'</td><td>';
535 print ajax_constantonoff("MAIN_USE_TOP_MENU_SEARCH_DROPDOWN", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'other');
536 print '</td>';
537 print '</tr>';
538
539 // Show bugtrack link
540 print '<tr class="oddeven"><td>';
541 print $form->textwithpicto($langs->trans("ShowBugTrackLink", $langs->transnoentitiesnoconv("FindBug")), $langs->trans("ShowBugTrackLinkDesc"));
542 print '</td><td>';
543 print '<input type="text" name="MAIN_BUGTRACK_ENABLELINK" value="' . getDolGlobalString('MAIN_BUGTRACK_ENABLELINK') . '">';
544 print '</td>';
545 print '</tr>';
546
547 // Disable javascript and ajax
548 print '<tr class="oddeven"><td>' . $form->textwithpicto($langs->trans("DisableJavascript"), $langs->trans("DisableJavascriptNote")) . '</td><td>';
549 print ajax_constantonoff("MAIN_DISABLE_JAVASCRIPT", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'other');
550 print '</td>';
551 print '</tr>';
552
553 print '</table>' . "\n";
554 print '</div>';
555}
556
557
558if ($mode == 'template') {
559 // Themes and themes options
560 showSkins(null, 1);
561}
562
563
564if ($mode == 'dashboard') {
565 print '<div class="div-table-responsive-no-min">';
566 print '<table summary="blockdashboard" class="noborder centpercent editmode tableforfield">';
567
568 // Message of the day on home page
569 $substitutionarray = getCommonSubstitutionArray($langs, 0, array('object', 'objectamount'));
570 complete_substitutions_array($substitutionarray, $langs);
571
572 print '<tr class="oddeven width25p"><td>';
573 $texthelp = $langs->trans("FollowingConstantsWillBeSubstituted") . '<br>';
574 foreach ($substitutionarray as $key => $val) {
575 $texthelp .= $key . '<br>';
576 }
577 print $form->textwithpicto($langs->trans("MessageOfDay"), $texthelp, 1, 'help', '', 0, 2, 'tooltipmessageofday');
578
579 print '</td><td>';
580
581 $doleditor = new DolEditor('main_motd', getDolGlobalString('MAIN_MOTD'), '', 142, 'dolibarr_notes', 'In', false, true, true, ROWS_4, '90%');
582 $doleditor->Create();
583
584 print '</td></tr>'."\n";
585
586 print '</table>';
587 print '</div>';
588
589 print '<br>';
590
591 print '<div class="div-table-responsive-no-min">';
592 print '<table summary="blockdashboard" class="noborder centpercent editmode tableforfield">';
593
594 print '<tr class="liste_titre"><td class="titlefieldmiddle">';
595 print $langs->trans("DashboardDisableBlocks");
596 print '</td><td class="titlefieldmiddle">';
597 print '</td></tr>';
598
599 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableGlobal') . '</td><td>';
600 print ajax_constantonoff("MAIN_DISABLE_GLOBAL_WORKBOARD", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '_red', 'dashboard');
601 print '</td>';
602 print '</tr>';
603
604 if (!getDolGlobalString('MAIN_DISABLE_GLOBAL_WORKBOARD')) {
605 // Block meteo
606 print '<tr class="oddeven"><td>' . $langs->trans('MAIN_DISABLE_METEO') . '</td><td>';
607 print ajax_constantonoff("MAIN_DISABLE_METEO", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
608 print '</td>';
609 print '</tr>';
610
611 // Block agenda
612 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockAgenda') . '</td><td>';
613 print ajax_constantonoff("MAIN_DISABLE_BLOCK_AGENDA", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
614 print '</td>';
615 print '</tr>';
616
617 // Block agenda
618 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockProject') . '</td><td>';
619 print ajax_constantonoff("MAIN_DISABLE_BLOCK_PROJECT", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
620 print '</td>';
621 print '</tr>';
622
623 // Block customer
624 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockCustomer') . '</td><td>';
625 print ajax_constantonoff("MAIN_DISABLE_BLOCK_CUSTOMER", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
626 print '</td>';
627 print '</tr>';
628
629 // Block supplier
630 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockSupplier') . '</td><td>';
631 print ajax_constantonoff("MAIN_DISABLE_BLOCK_SUPPLIER", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
632 print '</td>';
633 print '</tr>';
634
635 // Block contract
636 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockContract') . '</td><td>';
637 print ajax_constantonoff("MAIN_DISABLE_BLOCK_CONTRACT", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
638 print '</td>';
639 print '</tr>';
640
641 // Block ticket
642 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockTicket') . '</td><td>';
643 print ajax_constantonoff("MAIN_DISABLE_BLOCK_TICKET", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
644 print '</td>';
645 print '</tr>';
646
647 // Block bank
648 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockBank') . '</td><td>';
649 print ajax_constantonoff("MAIN_DISABLE_BLOCK_BANK", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
650 print '</td>';
651 print '</tr>';
652
653 // Block adherent
654 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockAdherent') . '</td><td>';
655 print ajax_constantonoff("MAIN_DISABLE_BLOCK_ADHERENT", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
656 print '</td>';
657 print '</tr>';
658
659 // Block expense report
660 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockExpenseReport') . '</td><td>';
661 print ajax_constantonoff("MAIN_DISABLE_BLOCK_EXPENSEREPORT", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
662 print '</td>';
663 print '</tr>';
664
665 // Block holiday
666 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockHoliday') . '</td><td>';
667 print ajax_constantonoff("MAIN_DISABLE_BLOCK_HOLIDAY", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
668 print '</td>';
669 print '</tr>';
670
671 // Block mrp
672 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockMrp') . '</td><td>';
673 print ajax_constantonoff("MAIN_DISABLE_BLOCK_MRP", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
674 print '</td>';
675 print '</tr>';
676 }
677
678 print '</table>' . "\n";
679 print '</div>';
680}
681
682
683if ($mode == 'login') {
684 // Other
685 print '<div class="div-table-responsive-no-min">';
686 print '<table summary="edit" class="noborder centpercent editmode tableforfield">';
687
688 print '<tr class="liste_titre"><td class="titlefieldmax45">';
689 print $langs->trans("Parameter");
690 print '</td><td>';
691 print '</td></tr>';
692
693 // Message on login page
694 $substitutionarray = getCommonSubstitutionArray($langs, 0, array('object', 'objectamount', 'user'));
695 complete_substitutions_array($substitutionarray, $langs);
696 print '<tr class="oddeven"><td>';
697 $texthelp = $langs->trans("FollowingConstantsWillBeSubstituted") . '<br>';
698 foreach ($substitutionarray as $key => $val) {
699 $texthelp .= $key . '<br>';
700 }
701 print $form->textwithpicto($langs->trans("MessageLogin"), $texthelp, 1, 'help', '', 0, 2, 'tooltipmessagelogin');
702 print '</td><td>';
703 $doleditor = new DolEditor('main_home', getDolGlobalString('MAIN_HOME'), '', 142, 'dolibarr_notes', 'In', false, true, true, ROWS_4, '90%');
704 $doleditor->Create();
705 print '</td></tr>' . "\n";
706
707 // Background
708 print '<tr class="oddeven"><td><label for="imagebackground">' . $langs->trans("BackgroundImageLogin") . ' (png,jpg)</label></td><td>';
709 print '<div class="centpercent inline-block">';
710 $disabled = '';
711 if (getDolGlobalString('ADD_UNSPLASH_LOGIN_BACKGROUND')) {
712 $disabled = ' disabled="disabled"';
713 }
714 $maxfilesizearray = getMaxFileSizeArray();
715 $maxmin = $maxfilesizearray['maxmin'];
716 if ($maxmin > 0) {
717 print '<input type="hidden" name="MAX_FILE_SIZE" value="'.($maxmin * 1024).'">'; // MAX_FILE_SIZE must precede the field type=file
718 }
719 print '<input type="file" class="flat maxwidthinputfileonsmartphone" name="imagebackground" id="imagebackground"' . $disabled . '>';
720 if ($disabled) {
721 print '(' . $langs->trans("DisabledByOptionADD_UNSPLASH_LOGIN_BACKGROUND") . ') ';
722 }
723 if (getDolGlobalString('MAIN_LOGIN_BACKGROUND')) {
724 print '<a class="reposition" href="' . $_SERVER["PHP_SELF"] . '?action=removebackgroundlogin&token='.newToken().'&mode=login">' . img_delete($langs->trans("Delete")) . '</a>';
725 if (file_exists($conf->mycompany->dir_output . '/logos/' . getDolGlobalString('MAIN_LOGIN_BACKGROUND'))) {
726 print ' &nbsp; ';
727 print '<img class="marginleftonly boxshadow valignmiddle" width="100" src="' . DOL_URL_ROOT . '/viewimage.php?modulepart=mycompany&amp;file=' . urlencode('logos/' . getDolGlobalString('MAIN_LOGIN_BACKGROUND')) . '">';
728 }
729 } else {
730 print '<img class="marginleftonly valignmiddle" width="100" src="' . DOL_URL_ROOT . '/public/theme/common/nophoto.png">';
731 }
732 print '</div>';
733 print '</td></tr>';
734
735 print '</table>' . "\n";
736 print '</div>';
737}
738
739if ($mode == 'css') {
740 print '<div class="div-table-responsive-no-min">';
741 print '<table summary="edit" class="noborder centpercent editmode tableforfield">';
742
743 print '<tr class="liste_titre">';
744 print '<td colspan="2">';
745
746 //$customcssValue = file_get_contents(DOL_DATA_ROOT.'/admin/customcss.css');
747 $customcssValue = getDolGlobalString('MAIN_IHM_CUSTOM_CSS');
748
749 $doleditor = new DolEditor('MAIN_IHM_CUSTOM_CSS', $customcssValue, '80%', 400, 'Basic', 'In', true, false, 'ace', 10, '90%');
750 $doleditor->Create(0, '', true, 'css', 'css');
751 print '</td></tr>'."\n";
752
753 print '</table>'."\n";
754 print '</div>';
755}
756
757
758print '<div class="center">';
759print '<input class="button button-save reposition buttonforacesave" type="submit" name="submit" value="' . $langs->trans("Save") . '">';
760print '<input class="button button-cancel reposition" type="submit" name="cancel" value="' . $langs->trans("Cancel") . '">';
761print '</div>';
762
763print '</form>';
764
765
766// End of page
767llxFooter();
768$db->close();
if(! $sortfield) if(! $sortorder) $object
Definition account.php:100
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
dolibarr_del_const($db, $name, $entity=1)
Delete a constant.
ihm_prepare_head()
Prepare array with list of tabs.
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
Definition wrapper.php:91
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:73
Class to manage a WYSIWYG editor.
Class to generate html code for admin pages.
Class to manage generation of HTML components Only common components must be here.
Class to help generate other html components Only common components are here.
global $mysoc
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $conf
The main.inc.php has been included so the following variable are now defined:
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $db
API class for accounts.
dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null, $allowdotdot=false, $indexdatabase=1, $nolog=0)
Remove a file or several files with a mask.
dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disablevirusscan=0, $uploaderrorcode=0, $nohook=0, $keyforsourcefile='addedfile', $upload_dir='', $mode=0)
Check validity of a file upload from an GUI page, and move it to its final destination.
colorStringToArray($stringcolor, $colorifnotfound=array(88, 88, 88))
Convert a string RGB value ('FFFFFF', '255,255,255') into an array RGB array(255,255,...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_htmlcleanlastbr($stringtodecode)
This function remove all ending and br at end.
complete_substitutions_array(&$substitutionarray, $outputlangs, $object=null, $parameters=null, $callfunc="completesubstitutionarray")
Complete the $substitutionarray with more entries coming from external module that had set the "subst...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
image_format_supported($file, $acceptsvg=0)
Return if a filename is file name of a supported image format.
getMaxFileSizeArray()
Return the max allowed for file upload.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
showSkins($fuser, $edit=0, $foruserprofile=false)
Show list of themes.