dolibarr 23.0.3
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', $_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($langs->trans("GUISetup"), '', 'title_setup');
385
386print '<span class="opacitymedium">'.$langs->trans("DisplayDesc")."</span><br>\n";
387print "<br>\n";
388
389//WYSIWYG Editor
390require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
391
392print '<form enctype="multipart/form-data" method="POST" action="'.dolBuildUrl($_SERVER["PHP_SELF"]).'">';
393print '<input type="hidden" name="token" value="'.newToken().'">';
394print '<input type="hidden" name="action" value="update">';
395print '<input type="hidden" name="page_y" value="">';
396print '<input type="hidden" id="mode" name="mode" value="'.dol_escape_htmltag($mode).'">';
397print '<input type="hidden" name="dol_resetcache" value="1">';
398
399$head = ihm_prepare_head();
400
401print dol_get_fiche_head($head, $mode, '', -1, '');
402
403print '<br>';
404
405clearstatcache();
406
407if ($mode == 'other') {
408 print '<div class="div-table-responsive-no-min">';
409 print '<table summary="edit" class="noborder centpercent editmode tableforfield">';
410
411 print '<tr class="liste_titre"><td class="titlefieldmiddle">';
412 print $langs->trans("Language");
413 print '</td><td>';
414 print '</td></tr>';
415
416 // Default language
417 print '<tr class="oddeven"><td>'.$langs->trans("DefaultLanguage").'</td><td>';
418 print img_picto('', 'language', 'class="pictofixedwidth"');
419 print $formadmin->select_language(getDolGlobalString('MAIN_LANG_DEFAULT'), 'MAIN_LANG_DEFAULT', 1, array(), '', 0, 0, 'minwidth300', 2);
420 //print '<input class="button button-save smallpaddingimp" type="submit" name="submit" value="'.$langs->trans("Save").'">';
421 print '</td>';
422 print '</tr>';
423
424 // Multilingual GUI
425 print '<tr class="oddeven"><td>' . $langs->trans("EnableMultilangInterface") . '</td><td>';
426 print ajax_constantonoff("MAIN_MULTILANGS", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'language');
427 print '</td>';
428 print '</tr>';
429
430 print '</table>' . "\n";
431 print '</div>';
432
433 print '<div class="center">';
434 print '<input class="button button-save reposition" type="submit" name="submit" value="' . $langs->trans("Save") . '">';
435 print '<input class="button button-cancel reposition" type="submit" name="cancel" value="' . $langs->trans("Cancel") . '">';
436 print '</div>';
437
438 print '<br>';
439 print '<br>';
440
441 // Other
442 print '<div class="div-table-responsive-no-min">';
443 print '<table summary="otherparameters" class="noborder centpercent editmode tableforfield">';
444
445 print '<tr class="liste_titre"><td class="titlefieldmiddle">';
446 print $langs->trans("Miscellaneous");
447 print '</td>';
448 print '<td></td>';
449 print '</tr>';
450
451 if (!empty($conf->use_javascript_ajax)) {
452 // Show Quick Add link
453 print '<tr class="oddeven"><td>' . $langs->trans("ShowQuickAddLink") . '</td><td>';
454 print ajax_constantonoff("MAIN_USE_TOP_MENU_QUICKADD_DROPDOWN", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'other');
455 print '</td>';
456 print '</tr>';
457 }
458
459 // Hide wiki link on login page
460 $pictohelp = '<span class="fa fa-question-circle"></span>';
461 print '<tr class="oddeven"><td>' . str_replace('{picto}', $pictohelp, $langs->trans("DisableLinkToHelp", '{picto}')) . '</td><td>';
462 print ajax_constantonoff("MAIN_HELP_DISABLELINK", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'other');
463 print '</td>';
464 print '</tr>';
465
466 // Max size of lists
467 print '<tr class="oddeven"><td>' . $langs->trans("DefaultMaxSizeList") . '</td><td><input class="flat width50" name="MAIN_SIZE_LISTE_LIMIT" value="';
468 if (getDolGlobalInt('MAIN_SIZE_LISTE_LIMIT') > 0) {
469 print getDolGlobalString('MAIN_SIZE_LISTE_LIMIT');
470 }
471 print '">';
472 if (getDolGlobalInt('MAIN_SIZE_LISTE_LIMIT') <= 0) {
473 print ' &nbsp; <span class="opacitymedium">('.$langs->trans("Automatic").')</span>';
474 }
475 print '</td>';
476 print '</tr>';
477
478 // Max size of short lists on customer card
479 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>';
480 print '</tr>';
481
482 // Display checkboxes and fields menu left / right
483 print '<tr class="oddeven"><td>' . $langs->trans("MAIN_CHECKBOX_LEFT_COLUMN") . '</td><td>';
484 print ajax_constantonoff("MAIN_CHECKBOX_LEFT_COLUMN", array(), $conf->entity, 0, 0, 1, 0, 0, 1, '', 'other');
485 print '</td>';
486 print '</tr>';
487
488 // First day for weeks
489 print '<tr class="oddeven"><td>' . $langs->trans("WeekStartOnDay") . '</td><td>';
490 print $formother->select_dayofweek(getDolGlobalString('MAIN_START_WEEK', '1'), 'MAIN_START_WEEK', 0);
491 print '</td>';
492 print '</tr>';
493
494 // DefaultWorkingDays
495 print '<tr class="oddeven"><td>' . $langs->trans("DefaultWorkingDays") . '</td><td>';
496 print '<input type="text" name="MAIN_DEFAULT_WORKING_DAYS" size="5" value="' . getDolGlobalString('MAIN_DEFAULT_WORKING_DAYS', '1-5') . '">';
497 print '</td>';
498 print '</tr>';
499
500 // DefaultWorkingHours
501 print '<tr class="oddeven"><td>' . $langs->trans("DefaultWorkingHours") . '</td><td>';
502 print '<input type="text" name="MAIN_DEFAULT_WORKING_HOURS" size="5" value="' . getDolGlobalString('MAIN_DEFAULT_WORKING_HOURS', '9-18') . '">';
503 print '</td>';
504 print '</tr>';
505
506 // Firstname/Name
507 print '<tr class="oddeven"><td>' . $langs->trans("FirstnameNamePosition") . '</td><td>';
508 $array = array(0 => $langs->trans("Firstname") . ' ' . $langs->trans("Lastname"), 1 => $langs->trans("Lastname") . ' ' . $langs->trans("Firstname"));
509 print $form->selectarray('MAIN_FIRSTNAME_NAME_POSITION', $array, getDolGlobalInt('MAIN_FIRSTNAME_NAME_POSITION', 0));
510 print '</td>';
511 print '</tr>';
512
513 // Hide unauthorized menus
514 print '<tr class="oddeven"><td>' . $langs->trans("HideUnauthorizedMenu") . '</td><td>';
515 print ajax_constantonoff("MAIN_MENU_HIDE_UNAUTHORIZED", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'other');
516 print '</td>';
517 print '</tr>';
518
519 // Hide unauthorized button
520 print '<tr class="oddeven"><td>' . $langs->trans("ButtonHideUnauthorized") . '</td><td>';
521 print ajax_constantonoff("MAIN_BUTTON_HIDE_UNAUTHORIZED", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'other');
522 print '</td>';
523 print '</tr>';
524
525 // Hide version link
526 /*
527
528 print '<tr><td>'.$langs->trans("HideVersionLink").'</td><td>';
529 print $form->selectyesno('MAIN_HIDE_VERSION',$conf->global->MAIN_HIDE_VERSION,1);
530 print '</td>';
531 print '</tr>';
532 */
533
534
535 // Show search area in top menu
536 print '<tr class="oddeven"><td>' . img_picto('', 'search', 'class="pictofixedwidth"'). ' '.$langs->trans("ShowSearchAreaInTopMenu") .'</td><td>';
537 print ajax_constantonoff("MAIN_USE_TOP_MENU_SEARCH_DROPDOWN", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'other');
538 print '</td>';
539 print '</tr>';
540
541 // Show bugtrack link
542 print '<tr class="oddeven"><td>';
543 print $form->textwithpicto($langs->trans("ShowBugTrackLink", $langs->transnoentitiesnoconv("FindBug")), $langs->trans("ShowBugTrackLinkDesc"));
544 print '</td><td>';
545 print '<input type="text" name="MAIN_BUGTRACK_ENABLELINK" value="' . getDolGlobalString('MAIN_BUGTRACK_ENABLELINK') . '">';
546 print '</td>';
547 print '</tr>';
548
549 // Disable javascript and ajax
550 print '<tr class="oddeven"><td>' . $form->textwithpicto($langs->trans("DisableJavascript"), $langs->trans("DisableJavascriptNote")) . '</td><td>';
551 print ajax_constantonoff("MAIN_DISABLE_JAVASCRIPT", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'other');
552 print '</td>';
553 print '</tr>';
554
555 print '</table>' . "\n";
556 print '</div>';
557}
558
559
560if ($mode == 'template') {
561 // Themes and themes options
562 showSkins(null, 1);
563}
564
565
566if ($mode == 'dashboard') {
567 print '<div class="div-table-responsive-no-min">';
568 print '<table summary="blockdashboard" class="noborder centpercent editmode tableforfield">';
569
570 // Message of the day on home page
571 $substitutionarray = getCommonSubstitutionArray($langs, 0, array('object', 'objectamount'));
572 complete_substitutions_array($substitutionarray, $langs);
573
574 print '<tr class="oddeven width25p"><td>';
575 $texthelp = $langs->trans("FollowingConstantsWillBeSubstituted") . '<br>';
576 foreach ($substitutionarray as $key => $val) {
577 $texthelp .= $key . '<br>';
578 }
579 print $form->textwithpicto($langs->trans("MessageOfDay"), $texthelp, 1, 'help', '', 0, 2, 'tooltipmessageofday');
580
581 print '</td><td>';
582
583 $doleditor = new DolEditor('main_motd', getDolGlobalString('MAIN_MOTD'), '', 142, 'dolibarr_notes', 'In', false, true, true, ROWS_4, '90%');
584 $doleditor->Create();
585
586 print '</td></tr>'."\n";
587
588 print '</table>';
589 print '</div>';
590
591 print '<br>';
592
593 print '<div class="div-table-responsive-no-min">';
594 print '<table summary="blockdashboard" class="noborder centpercent editmode tableforfield">';
595
596 print '<tr class="liste_titre"><td class="titlefieldmiddle">';
597 print $langs->trans("DashboardDisableBlocks");
598 print '</td><td class="titlefieldmiddle">';
599 print '</td></tr>';
600
601 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableGlobal') . '</td><td>';
602 print ajax_constantonoff("MAIN_DISABLE_GLOBAL_WORKBOARD", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '_red', 'dashboard');
603 print '</td>';
604 print '</tr>';
605
606 if (!getDolGlobalString('MAIN_DISABLE_GLOBAL_WORKBOARD')) {
607 // Block meteo
608 print '<tr class="oddeven"><td>' . $langs->trans('MAIN_DISABLE_METEO') . '</td><td>';
609 print ajax_constantonoff("MAIN_DISABLE_METEO", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
610 print '</td>';
611 print '</tr>';
612
613 // Block agenda
614 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockAgenda') . '</td><td>';
615 print ajax_constantonoff("MAIN_DISABLE_BLOCK_AGENDA", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
616 print '</td>';
617 print '</tr>';
618
619 // Block agenda
620 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockProject') . '</td><td>';
621 print ajax_constantonoff("MAIN_DISABLE_BLOCK_PROJECT", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
622 print '</td>';
623 print '</tr>';
624
625 // Block customer
626 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockCustomer') . '</td><td>';
627 print ajax_constantonoff("MAIN_DISABLE_BLOCK_CUSTOMER", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
628 print '</td>';
629 print '</tr>';
630
631 // Block supplier
632 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockSupplier') . '</td><td>';
633 print ajax_constantonoff("MAIN_DISABLE_BLOCK_SUPPLIER", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
634 print '</td>';
635 print '</tr>';
636
637 // Block contract
638 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockContract') . '</td><td>';
639 print ajax_constantonoff("MAIN_DISABLE_BLOCK_CONTRACT", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
640 print '</td>';
641 print '</tr>';
642
643 // Block ticket
644 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockTicket') . '</td><td>';
645 print ajax_constantonoff("MAIN_DISABLE_BLOCK_TICKET", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
646 print '</td>';
647 print '</tr>';
648
649 // Block bank
650 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockBank') . '</td><td>';
651 print ajax_constantonoff("MAIN_DISABLE_BLOCK_BANK", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
652 print '</td>';
653 print '</tr>';
654
655 // Block adherent
656 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockAdherent') . '</td><td>';
657 print ajax_constantonoff("MAIN_DISABLE_BLOCK_ADHERENT", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
658 print '</td>';
659 print '</tr>';
660
661 // Block expense report
662 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockExpenseReport') . '</td><td>';
663 print ajax_constantonoff("MAIN_DISABLE_BLOCK_EXPENSEREPORT", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
664 print '</td>';
665 print '</tr>';
666
667 // Block holiday
668 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockHoliday') . '</td><td>';
669 print ajax_constantonoff("MAIN_DISABLE_BLOCK_HOLIDAY", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
670 print '</td>';
671 print '</tr>';
672
673 // Block mrp
674 print '<tr class="oddeven"><td>' . $langs->trans('DashboardDisableBlockMrp') . '</td><td>';
675 print ajax_constantonoff("MAIN_DISABLE_BLOCK_MRP", array(), $conf->entity, 0, 0, 0, 0, 0, 0, '_red', 'dashboard');
676 print '</td>';
677 print '</tr>';
678 }
679
680 print '</table>' . "\n";
681 print '</div>';
682}
683
684
685if ($mode == 'login') {
686 // Other
687 print '<div class="div-table-responsive-no-min">';
688 print '<table summary="edit" class="noborder centpercent editmode tableforfield">';
689
690 print '<tr class="liste_titre"><td class="titlefieldmax45">';
691 print $langs->trans("Parameter");
692 print '</td><td>';
693 print '</td></tr>';
694
695 // Message on login page
696 $substitutionarray = getCommonSubstitutionArray($langs, 0, array('object', 'objectamount', 'user'));
697 complete_substitutions_array($substitutionarray, $langs);
698 print '<tr class="oddeven"><td>';
699 $texthelp = $langs->trans("FollowingConstantsWillBeSubstituted") . '<br>';
700 foreach ($substitutionarray as $key => $val) {
701 $texthelp .= $key . '<br>';
702 }
703 print $form->textwithpicto($langs->trans("MessageLogin"), $texthelp, 1, 'help', '', 0, 2, 'tooltipmessagelogin');
704 print '</td><td>';
705 $doleditor = new DolEditor('main_home', getDolGlobalString('MAIN_HOME'), '', 142, 'dolibarr_notes', 'In', false, true, true, ROWS_4, '90%');
706 $doleditor->Create();
707 print '</td></tr>' . "\n";
708
709 // Background
710 print '<tr class="oddeven"><td><label for="imagebackground">' . $langs->trans("BackgroundImageLogin") . ' (png,jpg)</label></td><td>';
711 print '<div class="centpercent inline-block">';
712 $disabled = '';
713 if (getDolGlobalString('ADD_UNSPLASH_LOGIN_BACKGROUND')) {
714 $disabled = ' disabled="disabled"';
715 }
716 $maxfilesizearray = getMaxFileSizeArray();
717 $maxmin = $maxfilesizearray['maxmin'];
718 if ($maxmin > 0) {
719 print '<input type="hidden" name="MAX_FILE_SIZE" value="'.($maxmin * 1024).'">'; // MAX_FILE_SIZE must precede the field type=file
720 }
721 print '<input type="file" class="flat maxwidthinputfileonsmartphone" name="imagebackground" id="imagebackground"' . $disabled . '>';
722 if ($disabled) {
723 print '(' . $langs->trans("DisabledByOptionADD_UNSPLASH_LOGIN_BACKGROUND") . ') ';
724 }
725 if (getDolGlobalString('MAIN_LOGIN_BACKGROUND')) {
726 print '<a class="reposition" href="' . $_SERVER["PHP_SELF"] . '?action=removebackgroundlogin&token='.newToken().'&mode=login">' . img_delete($langs->trans("Delete")) . '</a>';
727 if (file_exists($conf->mycompany->dir_output . '/logos/' . getDolGlobalString('MAIN_LOGIN_BACKGROUND'))) {
728 print ' &nbsp; ';
729 print '<img class="marginleftonly boxshadow valignmiddle" width="100" src="' . DOL_URL_ROOT . '/viewimage.php?modulepart=mycompany&amp;file=' . urlencode('logos/' . getDolGlobalString('MAIN_LOGIN_BACKGROUND')) . '">';
730 }
731 } else {
732 print '<img class="marginleftonly valignmiddle" width="100" src="' . DOL_URL_ROOT . '/public/theme/common/nophoto.png">';
733 }
734 print '</div>';
735 print '</td></tr>';
736
737 print '</table>' . "\n";
738 print '</div>';
739}
740
741if ($mode == 'css') {
742 print '<div class="div-table-responsive-no-min">';
743 print '<table summary="edit" class="noborder centpercent editmode tableforfield">';
744
745 print '<tr class="liste_titre">';
746 print '<td colspan="2">';
747
748 //$customcssValue = file_get_contents(DOL_DATA_ROOT.'/admin/customcss.css');
749 $customcssValue = getDolGlobalString('MAIN_IHM_CUSTOM_CSS');
750
751 $doleditor = new DolEditor('MAIN_IHM_CUSTOM_CSS', $customcssValue, '80%', 400, 'Basic', 'In', true, false, 'ace', 10, '90%');
752 $doleditor->Create(0, '', true, 'css', 'css');
753 print '</td></tr>'."\n";
754
755 print '</table>'."\n";
756 print '</div>';
757}
758
759
760print '<div class="center">';
761print '<input class="button button-save reposition buttonforacesave" type="submit" name="submit" value="' . $langs->trans("Save") . '">';
762print '<input class="button button-cancel reposition" type="submit" name="cancel" value="' . $langs->trans("Cancel") . '">';
763print '</div>';
764
765print '</form>';
766
767
768// End of page
769llxFooter();
770$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 permettant la generation de composants html autre Only common components are here.
global $mysoc
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.