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