From 1dae21e6084774c0181c2e4e5cb8ed0a56cfb3cc Mon Sep 17 00:00:00 2001 From: Ferran Marcet Date: Tue, 9 Mar 2021 18:44:06 +0100 Subject: [PATCH 001/180] FIX: Buttons to disable bindings not working --- htdocs/accountancy/admin/index.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/htdocs/accountancy/admin/index.php b/htdocs/accountancy/admin/index.php index 00922f90454..64ebf2d1ab0 100644 --- a/htdocs/accountancy/admin/index.php +++ b/htdocs/accountancy/admin/index.php @@ -7,6 +7,7 @@ * Copyright (C) 2014 Juanjo Menent * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2017 Laurent Destailleur + * Copyright (C) 2021 Ferran Marcet * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -385,11 +386,11 @@ foreach ($list_binding as $key) print ''; print ''.$langs->trans("ACCOUNTING_DISABLE_BINDING_ON_SALES").''; if (!empty($conf->global->ACCOUNTING_DISABLE_BINDING_ON_SALES)) { - print ''; + print ''; print img_picto($langs->trans("Activated"), 'switch_on'); print ''; } else { - print ''; + print ''; print img_picto($langs->trans("Disabled"), 'switch_off'); print ''; } @@ -398,11 +399,11 @@ print ''; print ''; print ''.$langs->trans("ACCOUNTING_DISABLE_BINDING_ON_PURCHASES").''; if (!empty($conf->global->ACCOUNTING_DISABLE_BINDING_ON_PURCHASES)) { - print ''; + print ''; print img_picto($langs->trans("Activated"), 'switch_on'); print ''; } else { - print ''; + print ''; print img_picto($langs->trans("Disabled"), 'switch_off'); print ''; } @@ -411,11 +412,11 @@ print ''; print ''; print ''.$langs->trans("ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS").''; if (!empty($conf->global->ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS)) { - print ''; + print ''; print img_picto($langs->trans("Activated"), 'switch_on'); print ''; } else { - print ''; + print ''; print img_picto($langs->trans("Disabled"), 'switch_off'); print ''; } From ccf71cd980bf12c34bae4708faba2f853b21849f Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Wed, 10 Mar 2021 11:56:44 +0100 Subject: [PATCH 002/180] fix modulebuilder boxes showboxes --- htdocs/core/class/html.formother.class.php | 4 +++- htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php index c71029769f2..090d1d796eb 100644 --- a/htdocs/core/class/html.formother.class.php +++ b/htdocs/core/class/html.formother.class.php @@ -1076,7 +1076,7 @@ class FormOther { if (empty($user->conf->$confuserzone) || $box->fk_user == $user->id) $boxidactivatedforuser[$box->id] = $box->id; // We keep only boxes to show for user } - +//var_dump($boxidactivatedforuser); // Define selectboxlist $arrayboxtoactivatelabel = array(); if (!empty($user->conf->$confuserzone)) @@ -1209,6 +1209,7 @@ class FormOther if (!empty($conf->global->MAIN_BOXES_MAXLINES)) $box_max_lines = $conf->global->MAIN_BOXES_MAXLINES; $ii = 0; + foreach ($boxactivated as $key => $box) { if ((!empty($user->conf->$confuserzone) && $box->fk_user == 0) || (empty($user->conf->$confuserzone) && $box->fk_user != 0)) continue; @@ -1220,6 +1221,7 @@ class FormOther //print 'box_order '.$boxactivated[$ii]->box_order.'
'; // Show box $box->loadBox($box_max_lines); + //var_dump($key,$box); $boxlista .= $box->showBox(null, null, 1); } } diff --git a/htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php b/htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php index e356792ed42..46fe523600d 100644 --- a/htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php +++ b/htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php @@ -206,6 +206,6 @@ class mymodulewidget1 extends ModeleBoxes { // You may make your own code here… // … or use the parent's class function using the provided head and contents templates - parent::showBox($this->info_box_head, $this->info_box_contents); + return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); } } From bd6aae71a2522cb373a1758675547b11ac7d5bd3 Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Wed, 10 Mar 2021 11:58:21 +0100 Subject: [PATCH 003/180] fix modulebuilder boxes showboxes --- htdocs/core/class/html.formother.class.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php index 090d1d796eb..c71029769f2 100644 --- a/htdocs/core/class/html.formother.class.php +++ b/htdocs/core/class/html.formother.class.php @@ -1076,7 +1076,7 @@ class FormOther { if (empty($user->conf->$confuserzone) || $box->fk_user == $user->id) $boxidactivatedforuser[$box->id] = $box->id; // We keep only boxes to show for user } -//var_dump($boxidactivatedforuser); + // Define selectboxlist $arrayboxtoactivatelabel = array(); if (!empty($user->conf->$confuserzone)) @@ -1209,7 +1209,6 @@ class FormOther if (!empty($conf->global->MAIN_BOXES_MAXLINES)) $box_max_lines = $conf->global->MAIN_BOXES_MAXLINES; $ii = 0; - foreach ($boxactivated as $key => $box) { if ((!empty($user->conf->$confuserzone) && $box->fk_user == 0) || (empty($user->conf->$confuserzone) && $box->fk_user != 0)) continue; @@ -1221,7 +1220,6 @@ class FormOther //print 'box_order '.$boxactivated[$ii]->box_order.'
'; // Show box $box->loadBox($box_max_lines); - //var_dump($key,$box); $boxlista .= $box->showBox(null, null, 1); } } From b798535af9ddf8c02049eef1267d23e9de78d33a Mon Sep 17 00:00:00 2001 From: atm-lena Date: Wed, 10 Mar 2021 14:15:03 +0100 Subject: [PATCH 004/180] FIX create sociales : keep values error form --- htdocs/compta/paiement_charge.php | 5 +++-- htdocs/compta/sociales/card.php | 12 ++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/htdocs/compta/paiement_charge.php b/htdocs/compta/paiement_charge.php index 715a0851c65..7ed5baafcab 100644 --- a/htdocs/compta/paiement_charge.php +++ b/htdocs/compta/paiement_charge.php @@ -248,7 +248,7 @@ if ($action == 'create') print ''; print ''.$langs->trans("Comments").''; - print ''; + print ''; print ''; print ''; @@ -296,6 +296,7 @@ if ($action == 'create') print ''.price($objp->amount - $sumpaid).""; print ''; + if ($sumpaid < $objp->amount) { $namef = "amount_".$objp->id; @@ -304,7 +305,7 @@ if ($action == 'create') print img_picto("Auto fill", 'rightarrow', "class='AutoFillAmount' data-rowid='".$namef."' data-value='".($objp->amount - $sumpaid)."'"); $remaintopay = $objp->amount - $sumpaid; print ''; - print ''; + print ''; } else { diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php index d2609fd4ff5..1b5bf72727f 100644 --- a/htdocs/compta/sociales/card.php +++ b/htdocs/compta/sociales/card.php @@ -45,7 +45,7 @@ $langs->loadLangs(array('compta', 'bills', 'banks')); $id = GETPOST('id', 'int'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm'); -$projectid = (GETPOST('projectid') ? GETPOST('projectid', 'int') : 0); +$fk_project = (GETPOST('fk_project') ? GETPOST('fk_project', 'int') : 0); $dateech = dol_mktime(GETPOST('echhour'), GETPOST('echmin'), GETPOST('echsec'), GETPOST('echmonth'), GETPOST('echday'), GETPOST('echyear')); $dateperiod = dol_mktime(GETPOST('periodhour'), GETPOST('periodmin'), GETPOST('periodsec'), GETPOST('periodmonth'), GETPOST('periodday'), GETPOST('periodyear')); @@ -91,7 +91,7 @@ if ($action == 'reopen' && $user->rights->tax->charges->creer) { if ($action == 'classin' && $user->rights->tax->charges->creer) { $object->fetch($id); - $object->setProject(GETPOST('projectid')); + $object->setProject(GETPOST('fk_project')); } if ($action == 'setlib' && $user->rights->tax->charges->creer) @@ -375,21 +375,21 @@ if ($action == 'create') print ''.$langs->trans("Project").''; - $numproject = $formproject->select_projects(-1, $projectid, 'fk_project', 0, 0, 1, 1); + $numproject = $formproject->select_projects(-1, $fk_project, 'fk_project', 0, 0, 1, 1); print ''; } // Payment Mode print ''.$langs->trans('PaymentMode').''; - $form->select_types_paiements($mode_reglement_id, 'mode_reglement_id'); + $form->select_types_paiements(GETPOST('mode_reglement_id', 'int'), 'mode_reglement_id'); print ''; // Bank Account if (!empty($conf->banque->enabled)) { print ''.$langs->trans('BankAccount').''; - $form->select_comptes($fk_account, 'fk_account', 0, '', 1); + $form->select_comptes(GETPOST('fk_account', 'int'), 'fk_account', 0, '', 1); print ''; } @@ -482,7 +482,7 @@ if ($id > 0) $morehtmlref .= '
'; $morehtmlref .= ''; $morehtmlref .= ''; - $morehtmlref .= $formproject->select_projects(0, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref .= $formproject->select_projects(0, $object->fk_project, 'fk_project', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); $morehtmlref .= ''; $morehtmlref .= '
'; } else { From c209d9b45ef3b9f0b8f13c570a54c9e777935aa1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 10 Mar 2021 15:29:05 +0100 Subject: [PATCH 005/180] Update paiement_charge.php --- htdocs/compta/paiement_charge.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/paiement_charge.php b/htdocs/compta/paiement_charge.php index 7ed5baafcab..aed2708e56c 100644 --- a/htdocs/compta/paiement_charge.php +++ b/htdocs/compta/paiement_charge.php @@ -305,7 +305,7 @@ if ($action == 'create') print img_picto("Auto fill", 'rightarrow', "class='AutoFillAmount' data-rowid='".$namef."' data-value='".($objp->amount - $sumpaid)."'"); $remaintopay = $objp->amount - $sumpaid; print ''; - print ''; + print ''; } else { From 05532ca6b7092210695d92e3f07d70a874cb1b1b Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 12 Mar 2021 08:35:13 +0100 Subject: [PATCH 006/180] FIX missing video mime --- htdocs/core/lib/functions.lib.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 052e5e3efc9..02b7b209124 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -8387,8 +8387,9 @@ function dol_mimetype($file, $default = 'application/octet-stream', $mode = 0) // Audio if (preg_match('/\.(mp3|ogg|au|wav|wma|mid)$/i', $tmpfile)) { $mime = 'audio'; $imgmime = 'audio.png'; $famime = 'file-audio-o'; } // Video - if (preg_match('/\.ogv$/i', $tmpfile)) { $mime = 'video/ogg'; $imgmime = 'video.png'; $famime = 'file-video-o'; } - if (preg_match('/\.webm$/i', $tmpfile)) { $mime = 'video/webm'; $imgmime = 'video.png'; $famime = 'file-video-o'; } + if (preg_match('/\.mp4$/i', $tmpfile)) { $mime = 'video/mp4'; $imgmime = 'video.png'; $famime = 'file-video-o'; } + if (preg_match('/\.(ogv|ogg)$/i', $tmpfile)) { $mime = 'video/ogg'; $imgmime = 'video.png'; $famime = 'file-video-o'; } + if (preg_match('/\.(webm|wbm)$/i', $tmpfile)) { $mime = 'video/webm'; $imgmime = 'video.png'; $famime = 'file-video-o'; } if (preg_match('/\.avi$/i', $tmpfile)) { $mime = 'video/x-msvideo'; $imgmime = 'video.png'; $famime = 'file-video-o'; } if (preg_match('/\.divx$/i', $tmpfile)) { $mime = 'video/divx'; $imgmime = 'video.png'; $famime = 'file-video-o'; } if (preg_match('/\.xvid$/i', $tmpfile)) { $mime = 'video/xvid'; $imgmime = 'video.png'; $famime = 'file-video-o'; } From 290f49a3e07d9524bf3e99b4db3b3492b1b41989 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 12 Mar 2021 08:39:36 +0100 Subject: [PATCH 007/180] FIX wrong extension --- htdocs/core/lib/functions.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 02b7b209124..6ffd88ea45b 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -8388,7 +8388,7 @@ function dol_mimetype($file, $default = 'application/octet-stream', $mode = 0) if (preg_match('/\.(mp3|ogg|au|wav|wma|mid)$/i', $tmpfile)) { $mime = 'audio'; $imgmime = 'audio.png'; $famime = 'file-audio-o'; } // Video if (preg_match('/\.mp4$/i', $tmpfile)) { $mime = 'video/mp4'; $imgmime = 'video.png'; $famime = 'file-video-o'; } - if (preg_match('/\.(ogv|ogg)$/i', $tmpfile)) { $mime = 'video/ogg'; $imgmime = 'video.png'; $famime = 'file-video-o'; } + if (preg_match('/\.ogv$/i', $tmpfile)) { $mime = 'video/ogg'; $imgmime = 'video.png'; $famime = 'file-video-o'; } if (preg_match('/\.(webm|wbm)$/i', $tmpfile)) { $mime = 'video/webm'; $imgmime = 'video.png'; $famime = 'file-video-o'; } if (preg_match('/\.avi$/i', $tmpfile)) { $mime = 'video/x-msvideo'; $imgmime = 'video.png'; $famime = 'file-video-o'; } if (preg_match('/\.divx$/i', $tmpfile)) { $mime = 'video/divx'; $imgmime = 'video.png'; $famime = 'file-video-o'; } From 5375add08c9e982ee9155552c6619a0a14c244d6 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 12 Mar 2021 08:41:56 +0100 Subject: [PATCH 008/180] FIX just add mp4 --- htdocs/core/lib/functions.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 6ffd88ea45b..b63f9d72f26 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -8389,7 +8389,7 @@ function dol_mimetype($file, $default = 'application/octet-stream', $mode = 0) // Video if (preg_match('/\.mp4$/i', $tmpfile)) { $mime = 'video/mp4'; $imgmime = 'video.png'; $famime = 'file-video-o'; } if (preg_match('/\.ogv$/i', $tmpfile)) { $mime = 'video/ogg'; $imgmime = 'video.png'; $famime = 'file-video-o'; } - if (preg_match('/\.(webm|wbm)$/i', $tmpfile)) { $mime = 'video/webm'; $imgmime = 'video.png'; $famime = 'file-video-o'; } + if (preg_match('/\.webm$/i', $tmpfile)) { $mime = 'video/webm'; $imgmime = 'video.png'; $famime = 'file-video-o'; } if (preg_match('/\.avi$/i', $tmpfile)) { $mime = 'video/x-msvideo'; $imgmime = 'video.png'; $famime = 'file-video-o'; } if (preg_match('/\.divx$/i', $tmpfile)) { $mime = 'video/divx'; $imgmime = 'video.png'; $famime = 'file-video-o'; } if (preg_match('/\.xvid$/i', $tmpfile)) { $mime = 'video/xvid'; $imgmime = 'video.png'; $famime = 'file-video-o'; } From 9956373a1474a6fa697148c510d6937add12e3d1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 12 Mar 2021 12:42:26 +0100 Subject: [PATCH 009/180] Backport the log to detect module that claim a new token. --- htdocs/main.inc.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 78ed3d82bda..437e024a3ae 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -421,6 +421,7 @@ if (!defined('NOTOKENRENEWAL')) // Save in $_SESSION['newtoken'] what will be next token. Into forms, we will add param token = $_SESSION['newtoken'] $token = dol_hash(uniqid(mt_rand(), true)); // Generates a hash of a random number $_SESSION['newtoken'] = $token; + dol_syslog("NEW TOKEN reclaimed by : " . $_SERVER['PHP_SELF'], LOG_DEBUG); } //dol_syslog("aaaa - ".defined('NOCSRFCHECK')." - ".$dolibarr_nocsrfcheck." - ".$conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN." - ".$_SERVER['REQUEST_METHOD']." - ".GETPOST('token', 'alpha').' '.$_SESSION['token']); From cab0e0ee052b7074d5901aceb414fe54d9b4e25f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 12 Mar 2021 12:45:45 +0100 Subject: [PATCH 010/180] Prepare 13.0.2 --- htdocs/filefunc.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index 1cc471e0244..7a68d2c3099 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -31,7 +31,7 @@ */ if (!defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE', 'Dolibarr'); -if (!defined('DOL_VERSION')) define('DOL_VERSION', '13.0.1'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c +if (!defined('DOL_VERSION')) define('DOL_VERSION', '13.0.2'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c if (!defined('EURO')) define('EURO', chr(128)); From 7a2e28497d3ff5010592ffb96885b76c43d528c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 12 Mar 2021 13:14:53 +0100 Subject: [PATCH 011/180] fix number is already used doesn't propose new code with elephant --- htdocs/core/modules/societe/mod_codeclient_elephant.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/htdocs/core/modules/societe/mod_codeclient_elephant.php b/htdocs/core/modules/societe/mod_codeclient_elephant.php index c7a2d600ede..b6113558822 100644 --- a/htdocs/core/modules/societe/mod_codeclient_elephant.php +++ b/htdocs/core/modules/societe/mod_codeclient_elephant.php @@ -303,6 +303,11 @@ class mod_codeclient_elephant extends ModeleThirdPartyCode { $this->error = $result; return -6; + } else { + $is_dispo = $this->verif_dispo($db, $code, $soc, $type); + if ($is_dispo <> 0) { + $result = -3; + } } } From 815a7683a252740629c5202868c40ee88525d492 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 12 Mar 2021 16:48:43 +0100 Subject: [PATCH 012/180] force getnextref if project create fail --- htdocs/projet/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index 711d1b02935..db710e2715d 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -223,7 +223,7 @@ if (empty($reshook)) else { $db->rollback(); - + unset($_POST["ref"]); $action = 'create'; } } From 401c209a76ab9d018c69d55cc02b4354da48f621 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 14 Mar 2021 23:54:52 +0100 Subject: [PATCH 013/180] Prepare 13.0.2 --- ChangeLog | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/ChangeLog b/ChangeLog index 6556db79da2..5eb26da852f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,51 @@ English Dolibarr ChangeLog -------------------------------------------------------------- +***** ChangeLog for 13.0.2 compared to 13.0.1 ***** + +FIX: 11.0 - $this->socid injected in query without checking for empty value +FIX: #16096 #16085 Any call of ajax pages must provide the token +FIX: #16296 +FIX: #16325 +FIX: #16341 : Fetch the Product ExtraFields in Shippment lines +FIX: #16366 +FIX: #16393 Do not sanitize +FIX: #16420 #16423 #16488 #16477 +FIX: #16431 +FIX: #16465 +FIX: #16480 +FIX: #16485 +FIX: #16487 +FIX: #16503 +FIX: #16530 +FIX: #16533 +FIX: Add "Now" link on social charges creation card +FIX: avoid undefined url and missing token +FIX: Bad project filter in ticket list +FIX: Buttons to disable bindings not working +FIX: class not found when creating recuring invoice from invoice+discount +FIX: File attachment on lots +FIX: handling $heightforinfotot when he's superior to a page height on Supplier Invoice +FIX: hourglass and hide button to pay +FIX: massaction validate invoice do not regenerate pdf +FIX: missing mp4 video mime +FIX: picto on shipment to reset qty to 0. Some quantities were not reset. +FIX: Protection to avoid #16504 +FIX: rounding amount on card updating +FIX: Rounding amount on social charges card updating +FIX: select list dependencies now work for ModuleBuilder sellist field +FIX: Status in popup of member in widget +FIX: status on tooltip on widgets +FIX: Timezone management for datetime on list of events +FIX: Timezone management for datetime with modulebuilder and extrafields +FIX: Total_ht not show in contract link element +FIX: use post instead get +FIX: use var "saved_url" instead global var "$url" +FIX: Various payment - Missing fields for check transmitter & bank name +FIX: warning if setup of chart of account is not yet done. +FIX: wrong extension + + ***** ChangeLog for 13.0.1 compared to 13.0.0 ***** FIX: 10.0 before crediting a withdrawal receipt, check whether it has been credited already. From 7bbcf4aa00007f0caffa0244b679c99d7d34f9bd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Mar 2021 11:21:14 +0100 Subject: [PATCH 014/180] FIX #16629 --- htdocs/public/ticket/create_ticket.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/public/ticket/create_ticket.php b/htdocs/public/ticket/create_ticket.php index 1c81faca1ad..678d45f70ca 100644 --- a/htdocs/public/ticket/create_ticket.php +++ b/htdocs/public/ticket/create_ticket.php @@ -307,7 +307,9 @@ if (empty($reshook) && $action == 'create_ticket' && GETPOST('add', 'alpha')) { //setEventMessages($langs->trans('YourTicketSuccessfullySaved'), null, 'mesgs'); // Make a redirect to avoid to have ticket submitted twice if we make back - setEventMessages($langs->trans('MesgInfosPublicTicketCreatedWithTrackId', ''.$object->track_id.'', ''.$object->ref.''), null, 'warnings'); + $messagetoshow = $langs->trans('MesgInfosPublicTicketCreatedWithTrackId', '{s1}', '{s2}'); + $messagetoshow = str_replace(array('{s1}', '{s2}'), array(''.$object->track_id.'', ''.$object->ref.''), $messagetoshow); + setEventMessages($messagetoshow, null, 'warnings'); setEventMessages($langs->trans('PleaseRememberThisId'), null, 'warnings'); header("Location: index.php"); exit; From cc25fb727b0935e9a831d6cb77442eb57a4d33c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 11:25:23 +0100 Subject: [PATCH 015/180] fix php8 warning --- htdocs/projet/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/projet/index.php b/htdocs/projet/index.php index 25844a573dd..600a246cf94 100644 --- a/htdocs/projet/index.php +++ b/htdocs/projet/index.php @@ -43,7 +43,7 @@ $action = GETPOST('action', 'aZ09'); $search_project_user = GETPOST('search_project_user', 'int'); $mine = GETPOST('mode', 'aZ09') == 'mine' ? 1 : 0; if ($mine == 0 && $search_project_user === '') { - $search_project_user = $user->conf->MAIN_SEARCH_PROJECT_USER_PROJECTSINDEX; + $search_project_user = (empty($user->conf->MAIN_SEARCH_PROJECT_USER_PROJECTSINDEX) ? '' : $user->conf->MAIN_SEARCH_PROJECT_USER_PROJECTSINDEX); } if ($search_project_user == $user->id) { $mine = 1; From a3ccf070c2bafc5a00d48b69c66bd42bff115157 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Mar 2021 11:26:31 +0100 Subject: [PATCH 016/180] Code comment --- htdocs/master.inc.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/master.inc.php b/htdocs/master.inc.php index c63ace353b3..fa378e20a98 100644 --- a/htdocs/master.inc.php +++ b/htdocs/master.inc.php @@ -32,7 +32,8 @@ * This script reads the conf file, init $lang, $db and and empty $user */ -require_once 'filefunc.inc.php'; // May have been already require by main.inc.php. But may not by scripts. +// Declaration of variables. May have been already require by main.inc.php. But may not by scripts. So, here the require_once must be kept. +require_once 'filefunc.inc.php'; From d6f6097f4ae19673e3bbe2bf1e1eabcf17c143f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 11:54:16 +0100 Subject: [PATCH 017/180] fix php8 warning --- htdocs/commande/class/commande.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index cc744f9eb56..0975bfbd7ef 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -3686,7 +3686,7 @@ class Commande extends CommonOrder $label .= ' '.$this->getLibStatut(5); } $label .= '
'.$langs->trans('Ref').': '.$this->ref; - $label .= '
'.$langs->trans('RefCustomer').': '.($this->ref_customer ? $this->ref_customer : $this->ref_client); + $label .= '
'.$langs->trans('RefCustomer').': '.(empty($this->ref_customer) ? (empty($this->ref_client) ? '' : $this-ref_client) : $this->ref_customer); if (!empty($this->total_ht)) { $label .= '
'.$langs->trans('AmountHT').': '.price($this->total_ht, 0, $langs, 0, -1, -1, $conf->currency); } From 2129adf129f2c0712794cc3e1c6e7f0d54103ed9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Mar 2021 13:25:08 +0100 Subject: [PATCH 018/180] Add more fields to llx_oauth_token --- htdocs/core/lib/functions.lib.php | 7 ++++--- htdocs/core/modules/modCron.class.php | 2 +- htdocs/install/mysql/migration/13.0.0-14.0.0.sql | 5 +++++ htdocs/install/mysql/tables/llx_events.sql | 11 ++--------- htdocs/install/mysql/tables/llx_oauth_token.sql | 11 +++++++---- htdocs/install/mysql/tables/llx_user_alert.sql | 4 ++-- .../install/mysql/tables/llx_user_clicktodial.sql | 14 ++++++-------- 7 files changed, 27 insertions(+), 27 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 0d5e94a23f0..6f6766f3b92 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3496,7 +3496,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ 'object_category', 'object_conversation', 'object_bookmark', 'object_bug', 'object_clock', 'object_dolly', 'object_dollyrevert', 'object_folder', 'object_folder-open','object_generic', 'object_list-alt', 'object_calendar', 'object_calendarweek', 'object_calendarmonth', 'object_calendarday', 'object_calendarperuser', - 'object_cash-register', 'object_company', 'object_contact', 'object_contract', 'object_donation', 'object_dynamicprice', + 'object_cash-register', 'object_company', 'object_contact', 'object_contract', 'object_cron', 'object_donation', 'object_dynamicprice', 'object_globe', 'object_holiday', 'object_hrm', 'object_invoice', 'object_intervention', 'object_inventory', 'object_label', 'object_margin', 'object_members', 'object_money-bill-alt', 'object_multicurrency', 'object_order', 'object_payment', 'object_lot', 'object_mrp', 'object_other', @@ -3537,7 +3537,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ 'account'=>'university', 'accountline'=>'receipt', 'accountancy'=>'search-dollar', 'action'=>'calendar-alt', 'add'=>'plus-circle', 'address'=> 'address-book', 'asset'=>'money-check-alt', 'bank_account'=>'university', 'bill'=>'file-invoice-dollar', 'billa'=>'file-excel', 'billr'=>'file-invoice-dollar', 'supplier_invoicea'=>'file-excel', 'billd'=>'file-medical', 'supplier_invoiced'=>'file-medical', 'bom'=>'shapes', - 'chart'=>'chart-line', 'company'=>'building', 'contact'=>'address-book', 'contract'=>'suitcase', 'collab'=>'people-arrows', 'conversation'=>'comments', + 'chart'=>'chart-line', 'company'=>'building', 'contact'=>'address-book', 'contract'=>'suitcase', 'collab'=>'people-arrows', 'conversation'=>'comments', 'cron'=>'business-time', 'donation'=>'file-alt', 'dynamicprice'=>'hand-holding-usd', 'setup'=>'cog', 'companies'=>'building', 'products'=>'cube', 'commercial'=>'suitcase', 'invoicing'=>'coins', 'accounting'=>'chart-line', 'category'=>'tag', 'dollyrevert'=>'dolly', @@ -3646,7 +3646,8 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ // Define $color $arrayconvpictotocolor = array( 'address'=>'#6c6aa8', 'building'=>'#6c6aa8', 'bom'=>'#a69944', - 'cog'=>'#999', 'companies'=>'#6c6aa8', 'company'=>'#6c6aa8', 'contact'=>'#6c6aa8', 'dynamicprice'=>'#a69944', + 'cog'=>'#999', 'companies'=>'#6c6aa8', 'company'=>'#6c6aa8', 'contact'=>'#6c6aa8', 'cron'=>'#555', + 'dynamicprice'=>'#a69944', 'edit'=>'#444', 'note'=>'#999', 'error'=>'', 'help'=>'#bbb', 'listlight'=>'#999', 'language'=>'#555', 'dolly'=>'#a69944', 'dollyrevert'=>'#a69944', 'lot'=>'#a69944', 'map-marker-alt'=>'#aaa', 'mrp'=>'#a69944', 'product'=>'#a69944', 'service'=>'#a69944', 'inventory'=>'#a69944', 'stock'=>'#a69944', 'movement'=>'#a69944', diff --git a/htdocs/core/modules/modCron.class.php b/htdocs/core/modules/modCron.class.php index 62585333c1d..95a3dd2c15d 100644 --- a/htdocs/core/modules/modCron.class.php +++ b/htdocs/core/modules/modCron.class.php @@ -55,7 +55,7 @@ class modCron extends DolibarrModules // Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase) $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name); // Name of image file used for this module. - $this->picto = 'technic'; + $this->picto = 'cron'; // Data directories to create when module is enabled $this->dirs = array(); diff --git a/htdocs/install/mysql/migration/13.0.0-14.0.0.sql b/htdocs/install/mysql/migration/13.0.0-14.0.0.sql index 31f0aa738d6..ffe09f54588 100644 --- a/htdocs/install/mysql/migration/13.0.0-14.0.0.sql +++ b/htdocs/install/mysql/migration/13.0.0-14.0.0.sql @@ -48,6 +48,11 @@ UPDATE llx_c_country SET eec = 1 WHERE code IN ('AT','BE','BG','CY','CZ','DE','D -- For v14 +ALTER TABLE llx_oauth_token ADD COLUMN restricted_ips varchar(200); +ALTER TABLE llx_oauth_token ADD COLUMN datec datetime DEFAULT NULL; +ALTER TABLE llx_oauth_token ADD COLUMN tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; + + ALTER TABLE llx_mailing_cibles MODIFY COLUMN tag varchar(64) NULL; ALTER TABLE llx_mailing_cibles ADD INDEX idx_mailing_cibles_tag (tag); diff --git a/htdocs/install/mysql/tables/llx_events.sql b/htdocs/install/mysql/tables/llx_events.sql index ffa4f1029e7..06fc43f98b3 100644 --- a/htdocs/install/mysql/tables/llx_events.sql +++ b/htdocs/install/mysql/tables/llx_events.sql @@ -26,8 +26,8 @@ create table llx_events rowid integer AUTO_INCREMENT PRIMARY KEY, tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- last modification date type varchar(32) NOT NULL, -- action type - entity integer DEFAULT 1 NOT NULL, -- multi company id - prefix_session varchar(255) NULL, -- prefix of session, obtained with dol_getprefix + entity integer DEFAULT 1 NOT NULL, -- multi company id + prefix_session varchar(255) NULL, -- prefix of session, obtained with dol_getprefix dateevent datetime, -- date event fk_user integer, -- id user description varchar(250) NOT NULL, -- full description of action @@ -36,10 +36,3 @@ create table llx_events fk_object integer -- id of related object ) ENGINE=innodb; --- --- List of codes for the field entity --- --- 1 : first company events --- 2 : second company events --- 3 : etc... --- diff --git a/htdocs/install/mysql/tables/llx_oauth_token.sql b/htdocs/install/mysql/tables/llx_oauth_token.sql index 145e646230d..06f2625c76e 100644 --- a/htdocs/install/mysql/tables/llx_oauth_token.sql +++ b/htdocs/install/mysql/tables/llx_oauth_token.sql @@ -17,11 +17,14 @@ CREATE TABLE llx_oauth_token ( rowid integer AUTO_INCREMENT PRIMARY KEY, - service varchar(36), - token text, -- token in serialize() format, of an object StdOAuth2Token of library phpoauth2 - tokenstring text, -- token in json format '{"access_token": "sk_test_cccc", "refresh_token": "rt_aaa", "token_type": "bearer", ..., "scope": "read_write"} + service varchar(36), -- 'Google', 'Stripe', 'auth-public-key', ... + token text, -- token in serialize() format, of an object StdOAuth2Token of library phpoauth2 + tokenstring text, -- token in text or json format. Value depends on 'service. For example for an OAUTH service: '{"access_token": "sk_test_cccc", "refresh_token": "rt_aaa", "token_type": "bearer", ..., "scope": "read_write"} fk_soc integer, - fk_user integer, + fk_user integer, -- Id of user in llx_user fk_adherent integer, + restricted_ips varchar(200), -- Restrict the authentication mode/token to some IPs + datec datetime DEFAULT NULL, -- date creation project + tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, entity integer DEFAULT 1 )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_user_alert.sql b/htdocs/install/mysql/tables/llx_user_alert.sql index cded256de70..fd443e5e93f 100644 --- a/htdocs/install/mysql/tables/llx_user_alert.sql +++ b/htdocs/install/mysql/tables/llx_user_alert.sql @@ -21,6 +21,6 @@ create table llx_user_alert ( rowid integer AUTO_INCREMENT PRIMARY KEY, type integer, - fk_contact integer, -- pointe sur llx_socpeople - fk_user integer + fk_contact integer, -- id of llx_socpeople + fk_user integer -- id of llx_user )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_user_clicktodial.sql b/htdocs/install/mysql/tables/llx_user_clicktodial.sql index e6b02be0cbc..d9941a09ab0 100644 --- a/htdocs/install/mysql/tables/llx_user_clicktodial.sql +++ b/htdocs/install/mysql/tables/llx_user_clicktodial.sql @@ -17,14 +17,12 @@ -- =========================================================================== -- --- Stockage des informations relatives au click to dial +-- Table to store each different IP / devices / puclib key used for login -- -create table llx_user_clicktodial +create table llx_user_ipdevices ( - fk_user integer PRIMARY KEY, - url varchar(255), - login varchar(32), - pass varchar(64), - poste varchar(20) - + rowid integer PRIMARY KEY, + fk_user integer NOT NULL, -- ID llx_user + ip varchar(64), + user_agent varchar(255) NULL, -- user agent )ENGINE=innodb; From d4eecf3eb2cefd6433de907815acbe855ea95ba6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 13:51:54 +0100 Subject: [PATCH 019/180] fix php8 warning --- htdocs/core/lib/functions.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 6f6766f3b92..b75841e6795 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1699,7 +1699,7 @@ function dol_banner_tab($object, $paramid, $morehtml = '', $shownav = 1, $fieldi $maxvisiblephotos = 1; $showimage = 1; $entity = (empty($object->entity) ? $conf->entity : $object->entity); - $showbarcode = empty($conf->barcode->enabled) ? 0 : ($object->barcode ? 1 : 0); + $showbarcode = empty($conf->barcode->enabled) ? 0 : (empty($object->barcode) ? 0 : 1); if (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->barcode->lire_advance)) { $showbarcode = 0; } From 691b8d5976cc074056e68688d0ad7ec1890ca9ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 14:05:05 +0100 Subject: [PATCH 020/180] fix php8 warning --- htdocs/compta/index.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php index 542d7aeb1bd..a4c19f4d039 100644 --- a/htdocs/compta/index.php +++ b/htdocs/compta/index.php @@ -272,6 +272,7 @@ if ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SU $sql = "SELECT f.ref, f.rowid, f.total_ht, f.total_tva, f.total_ttc, f.type, f.ref_supplier, f.fk_statut as status, f.paye"; $sql .= ", s.nom as name"; $sql .= ", s.rowid as socid, s.email"; + $sql .= ", s.code_client, s.code_compta"; $sql .= ", s.code_fournisseur, s.code_compta_fournisseur"; $sql .= ", cc.rowid as country_id, cc.code as country_code"; $sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f, ".MAIN_DB_PREFIX."societe as s LEFT JOIN ".MAIN_DB_PREFIX."c_country as cc ON cc.rowid = s.fk_pays"; From a8c34a5b055bd1622bd854932db761f6d18b99fe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Mar 2021 14:16:55 +0100 Subject: [PATCH 021/180] Invert MAIN_EXTRAFIELDS_USE_SELECT2 into MAIN_EXTRAFIELDS_DISABLE_SELECT2 --- htdocs/bom/bom_list.php | 4 +-- htdocs/bom/class/bom.class.php | 23 +++++++++------- htdocs/core/class/commonobject.class.php | 4 +-- htdocs/core/class/extrafields.class.php | 4 +-- .../modulebuilder/template/myobject_list.php | 2 +- htdocs/mrp/class/mo.class.php | 26 +++++++++++-------- htdocs/mrp/mo_list.php | 4 +-- 7 files changed, 38 insertions(+), 29 deletions(-) diff --git a/htdocs/bom/bom_list.php b/htdocs/bom/bom_list.php index 4eaef9b096c..eb1852699c0 100644 --- a/htdocs/bom/bom_list.php +++ b/htdocs/bom/bom_list.php @@ -539,7 +539,7 @@ print ''."\n"; // -------------------------------------------------------------------- print ''; foreach ($object->fields as $key => $val) { - $cssforfield = (empty($val['css']) ? '' : $val['css']); + $cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']); if ($key == 'status') { $cssforfield .= ($cssforfield ? ' ' : '').'center'; } elseif (in_array($val['type'], array('date', 'datetime', 'timestamp'))) { @@ -591,7 +591,7 @@ while ($i < ($limit ? min($num, $limit) : $num)) { // Show here line of result print ''; foreach ($object->fields as $key => $val) { - $cssforfield = (empty($val['css']) ? '' : $val['css']); + $cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']); if (in_array($val['type'], array('date', 'datetime', 'timestamp'))) { $cssforfield .= ($cssforfield ? ' ' : '').'center'; } elseif ($key == 'status') { diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index b3af3a43fd2..47246b8423d 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -63,24 +63,29 @@ class BOM extends CommonObject /** - * 'type' if the field format ('integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter]]', 'varchar(x)', 'double(24,8)', 'real', 'price', 'text', 'html', 'date', 'datetime', 'timestamp', 'duration', 'mail', 'phone', 'url', 'password') + * 'type' field format ('integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter]]', 'sellist:TableName:LabelFieldName[:KeyFieldName[:KeyFieldParent[:Filter]]]', 'varchar(x)', 'double(24,8)', 'real', 'price', 'text', 'text:none', 'html', 'date', 'datetime', 'timestamp', 'duration', 'mail', 'phone', 'url', 'password') * Note: Filter can be a string like "(t.ref:like:'SO-%') or (t.date_creation:<:'20160101') or (t.nature:is:NULL)" * 'label' the translation key. - * 'enabled' is a condition when the field must be managed. + * 'picto' is code of a picto to show before value in forms + * 'enabled' is a condition when the field must be managed (Example: 1 or '$conf->global->MY_SETUP_PARAM) + * 'position' is the sort order of field. + * 'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0). * 'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only (not list), 4=Visible on list and update/view form only (not create). 5=Visible on list and view only (not create/not update). Using a negative value means field is not shown by default on list but can be selected for viewing) * 'noteditable' says if field is not editable (1 or 0) - * 'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0). - * 'default' is a default value for creation (can still be replaced by the global setup of default values) + * 'default' is a default value for creation (can still be overwrote by the Setup of Default Values if field is editable in creation form). Note: If default is set to '(PROV)' and field is 'ref', the default value will be set to '(PROVid)' where id is rowid when a new record is created. * 'index' if we want an index in database. * 'foreignkey'=>'tablename.field' if the field is a foreign key (it is recommanded to name the field fk_...). - * 'position' is the sort order of field. * 'searchall' is 1 if we want to search in this field when making a search from the quick search button. * 'isameasure' must be set to 1 if you want to have a total on list for this field. Field type must be summable like integer or double(24,8). - * 'css' is the CSS style to use on field. For example: 'maxwidth200' - * 'help' is a string visible as a tooltip on field - * 'comment' is not used. You can store here any text of your choice. It is not used by application. + * 'css' and 'cssview' and 'csslist' is the CSS style to use on field. 'css' is used in creation and update. 'cssview' is used in view mode. 'csslist' is used for columns in lists. For example: 'maxwidth200', 'wordbreak', 'tdoverflowmax200' + * 'help' is a 'TranslationString' to use to show a tooltip on field. You can also use 'TranslationString:keyfortooltiponlick' for a tooltip on click. * 'showoncombobox' if value of the field must be visible into the label of the combobox that list record + * 'disabled' is 1 if we want to have the field locked by a 'disabled' attribute. In most cases, this is never set into the definition of $fields into class, but is set dynamically by some part of code. * 'arraykeyval' to set list of value if type is a list of predefined values. For example: array("0"=>"Draft","1"=>"Active","-1"=>"Cancel") + * 'autofocusoncreate' to have field having the focus on a create form. Only 1 field should have this property set to 1. + * 'comment' is not used. You can store here any text of your choice. It is not used by application. + * + * Note: To have value dynamic, you can set value to 0 in definition and edit the value on the fly into the constructor. */ // BEGIN MODULEBUILDER PROPERTIES @@ -92,7 +97,7 @@ class BOM extends CommonObject 'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'notnull'=> 1, 'default'=>1, 'index'=>1, 'position'=>5), 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'noteditable'=>1, 'visible'=>4, 'position'=>10, 'notnull'=>1, 'default'=>'(PROV)', 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of BOM", 'showoncombobox'=>'1',), 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'notnull'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'autofocusoncreate'=>1), - 'bomtype' => array('type'=>'integer', 'label'=>'Type', 'enabled'=>1, 'visible'=>1, 'position'=>33, 'notnull'=>1, 'default'=>'0', 'arrayofkeyval'=>array(0=>'Manufacturing', 1=>'Disassemble')), + 'bomtype' => array('type'=>'integer', 'label'=>'Type', 'enabled'=>1, 'visible'=>1, 'position'=>33, 'notnull'=>1, 'default'=>'0', 'arrayofkeyval'=>array(0=>'Manufacturing', 1=>'Disassemble'), 'css'=>'minwidth150', 'csslist'=>'minwidth150'), //'bomtype' => array('type'=>'integer', 'label'=>'Type', 'enabled'=>1, 'visible'=>-1, 'position'=>32, 'notnull'=>1, 'default'=>'0', 'arrayofkeyval'=>array(0=>'Manufacturing')), 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:1:(finished IS NULL or finished <> 0)', 'label'=>'Product', 'picto'=>'product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'help'=>'ProductBOMHelp', 'css'=>'maxwidth500'), 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-1, 'position'=>60, 'notnull'=>-1,), diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index beaa51edac3..b86ea4fb650 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -6528,7 +6528,7 @@ abstract class CommonObject $out = ' '; } elseif ($type == 'select') { $out = ''; - if (!empty($conf->use_javascript_ajax) && !empty($conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) { + if (!empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_EXTRAFIELDS_DISABLE_SELECT2)) { include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php'; $out .= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0); } @@ -6550,7 +6550,7 @@ abstract class CommonObject $out .= ''; } elseif ($type == 'sellist') { $out = ''; - if (!empty($conf->use_javascript_ajax) && !empty($conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) { + if (!empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_EXTRAFIELDS_DISABLE_SELECT2)) { include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php'; $out .= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0); } diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 53ad2c5b649..5ab49dd4b9b 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1160,7 +1160,7 @@ class ExtraFields $out = ' '; } elseif ($type == 'select') { $out = ''; - if (!empty($conf->use_javascript_ajax) && !empty($conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) { + if (!empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_EXTRAFIELDS_DISABLE_SELECT2)) { include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php'; $out .= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0); } @@ -1191,7 +1191,7 @@ class ExtraFields $out .= ''; } elseif ($type == 'sellist') { $out = ''; - if (!empty($conf->use_javascript_ajax) && !empty($conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) { + if (!empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_EXTRAFIELDS_DISABLE_SELECT2)) { include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php'; $out .= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0); } diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index 8609a2eed1a..21662682b09 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -600,7 +600,7 @@ while ($i < ($limit ? min($num, $limit) : $num)) { // Show here line of result print ''; foreach ($object->fields as $key => $val) { - $cssforfield = (empty($val['css']) ? '' : $val['css']); + $cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']); if (in_array($val['type'], array('date', 'datetime', 'timestamp'))) { $cssforfield .= ($cssforfield ? ' ' : '').'center'; } elseif ($key == 'status') { diff --git a/htdocs/mrp/class/mo.class.php b/htdocs/mrp/class/mo.class.php index 97955c246fd..d7635b9a78e 100644 --- a/htdocs/mrp/class/mo.class.php +++ b/htdocs/mrp/class/mo.class.php @@ -66,26 +66,30 @@ class Mo extends CommonObject const STATUS_CANCELED = 9; - /** - * 'type' if the field format ('integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter]]', 'varchar(x)', 'double(24,8)', 'real', 'price', 'text', 'html', 'date', 'datetime', 'timestamp', 'duration', 'mail', 'phone', 'url', 'password') + * 'type' field format ('integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter]]', 'sellist:TableName:LabelFieldName[:KeyFieldName[:KeyFieldParent[:Filter]]]', 'varchar(x)', 'double(24,8)', 'real', 'price', 'text', 'text:none', 'html', 'date', 'datetime', 'timestamp', 'duration', 'mail', 'phone', 'url', 'password') * Note: Filter can be a string like "(t.ref:like:'SO-%') or (t.date_creation:<:'20160101') or (t.nature:is:NULL)" * 'label' the translation key. - * 'enabled' is a condition when the field must be managed. - * 'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only (not list), 4=Visible on list and update/view form only (not create). Using a negative value means field is not shown by default on list but can be selected for viewing) - * 'noteditable' says if field is not editable (1 or 0) + * 'picto' is code of a picto to show before value in forms + * 'enabled' is a condition when the field must be managed (Example: 1 or '$conf->global->MY_SETUP_PARAM) + * 'position' is the sort order of field. * 'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0). - * 'default' is a default value for creation (can still be replaced by the global setup of default values) + * 'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only (not list), 4=Visible on list and update/view form only (not create). 5=Visible on list and view only (not create/not update). Using a negative value means field is not shown by default on list but can be selected for viewing) + * 'noteditable' says if field is not editable (1 or 0) + * 'default' is a default value for creation (can still be overwrote by the Setup of Default Values if field is editable in creation form). Note: If default is set to '(PROV)' and field is 'ref', the default value will be set to '(PROVid)' where id is rowid when a new record is created. * 'index' if we want an index in database. * 'foreignkey'=>'tablename.field' if the field is a foreign key (it is recommanded to name the field fk_...). - * 'position' is the sort order of field. * 'searchall' is 1 if we want to search in this field when making a search from the quick search button. * 'isameasure' must be set to 1 if you want to have a total on list for this field. Field type must be summable like integer or double(24,8). - * 'css' is the CSS style to use on field. For example: 'maxwidth200' - * 'help' is a string visible as a tooltip on field - * 'comment' is not used. You can store here any text of your choice. It is not used by application. + * 'css' and 'cssview' and 'csslist' is the CSS style to use on field. 'css' is used in creation and update. 'cssview' is used in view mode. 'csslist' is used for columns in lists. For example: 'maxwidth200', 'wordbreak', 'tdoverflowmax200' + * 'help' is a 'TranslationString' to use to show a tooltip on field. You can also use 'TranslationString:keyfortooltiponlick' for a tooltip on click. * 'showoncombobox' if value of the field must be visible into the label of the combobox that list record + * 'disabled' is 1 if we want to have the field locked by a 'disabled' attribute. In most cases, this is never set into the definition of $fields into class, but is set dynamically by some part of code. * 'arraykeyval' to set list of value if type is a list of predefined values. For example: array("0"=>"Draft","1"=>"Active","-1"=>"Cancel") + * 'autofocusoncreate' to have field having the focus on a create form. Only 1 field should have this property set to 1. + * 'comment' is not used. You can store here any text of your choice. It is not used by application. + * + * Note: To have value dynamic, you can set value to 0 in definition and edit the value on the fly into the constructor. */ // BEGIN MODULEBUILDER PROPERTIES @@ -96,7 +100,7 @@ class Mo extends CommonObject 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id",), 'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'position'=>5, 'notnull'=>1, 'default'=>'1', 'index'=>1), 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>4, 'position'=>10, 'notnull'=>1, 'default'=>'(PROV)', 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object", 'showoncombobox'=>'1', 'noteditable'=>1), - 'fk_bom' => array('type'=>'integer:Bom:bom/class/bom.class.php:0:t.status=1', 'filter'=>'active=1', 'label'=>'BOM', 'enabled'=>1, 'visible'=>1, 'position'=>33, 'notnull'=>-1, 'index'=>1, 'comment'=>"Original BOM", 'css'=>'minwidth100 maxwidth300'), + 'fk_bom' => array('type'=>'integer:Bom:bom/class/bom.class.php:0:t.status=1', 'filter'=>'active=1', 'label'=>'BOM', 'enabled'=>1, 'visible'=>1, 'position'=>33, 'notnull'=>-1, 'index'=>1, 'comment'=>"Original BOM", 'css'=>'minwidth100 maxwidth300', 'csslist'=>'nowraponall'), 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:0', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'comment'=>"Product to produce", 'css'=>'maxwidth300', 'picto'=>'product'), 'qty' => array('type'=>'real', 'label'=>'QtyToProduce', 'enabled'=>1, 'visible'=>1, 'position'=>40, 'notnull'=>1, 'comment'=>"Qty to produce", 'css'=>'width75', 'default'=>1, 'isameasure'=>1), 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>42, 'notnull'=>-1, 'searchall'=>1, 'showoncombobox'=>'1',), diff --git a/htdocs/mrp/mo_list.php b/htdocs/mrp/mo_list.php index 89292973214..841dba3ea20 100644 --- a/htdocs/mrp/mo_list.php +++ b/htdocs/mrp/mo_list.php @@ -463,7 +463,7 @@ print ''."\n"; // -------------------------------------------------------------------- print ''; foreach ($object->fields as $key => $val) { - $cssforfield = (empty($val['css']) ? '' : $val['css']); + $cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']); if ($key == 'status') { $cssforfield .= ($cssforfield ? ' ' : '').'center'; } elseif (in_array($val['type'], array('date', 'datetime', 'timestamp'))) { @@ -515,7 +515,7 @@ while ($i < ($limit ? min($num, $limit) : $num)) { // Show here line of result print ''; foreach ($object->fields as $key => $val) { - $cssforfield = (empty($val['css']) ? '' : $val['css']); + $cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']); if (in_array($val['type'], array('date', 'datetime', 'timestamp'))) { $cssforfield .= ($cssforfield ? ' ' : '').'center'; } elseif ($key == 'status') { From 614720fc0a898fbbdedbd013926b4f68362c86d1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Mar 2021 14:51:36 +0100 Subject: [PATCH 022/180] FIX #16671 Can not generate zip file of documents in backup tool --- htdocs/admin/tools/export_files.php | 3 ++- test/phpunit/FilesLibTest.php | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/tools/export_files.php b/htdocs/admin/tools/export_files.php index 6e0b0508a07..5ec1d5d56f7 100644 --- a/htdocs/admin/tools/export_files.php +++ b/htdocs/admin/tools/export_files.php @@ -113,7 +113,8 @@ $utils = new Utils($db); if ($compression == 'zip') { $file .= '.zip'; - $ret = dol_compress_dir(DOL_DATA_ROOT, $outputdir."/".$file, $compression, '/(\.back|\.old|\.log|[\\\/]temp[\\\/]|documents[\\\/]admin[\\\/]documents[\\\/])/i'); + $excludefiles = '/(\.back|\.old|\.log|[\/\\\]temp[\/\\\]|documents[\/\\\]admin[\/\\\]documents[\/\\\])/i'; + $ret = dol_compress_dir(DOL_DATA_ROOT, $outputdir."/".$file, $compression, $excludefiles); if ($ret < 0) { if ($ret == -2) { diff --git a/test/phpunit/FilesLibTest.php b/test/phpunit/FilesLibTest.php index d80abac42fe..ef84b8db752 100644 --- a/test/phpunit/FilesLibTest.php +++ b/test/phpunit/FilesLibTest.php @@ -425,6 +425,13 @@ class FilesLibTest extends PHPUnit\Framework\TestCase $result=dol_uncompress($fileout, $dirout); print __METHOD__." result=".join(',', $result)."\n"; $this->assertEquals(0, count($result), "Pb with dol_uncompress_file of file ".$fileout); + + $excludefiles = '/(\.back|\.old|\.log|documents[\/\\\]admin[\/\\\]documents[\/\\\])/i'; + if (preg_match($excludefiles, 'a/temp/b')) { echo '----- Regex OK -----'."\n"; } + $result=dol_compress_dir($dirout, $conf->admin->dir_temp.'/testdir.zip', 'zip', $excludefiles); + print __METHOD__." result=".$result."\n"; + print join(', ', $conf->logbuffer); + $this->assertGreaterThanOrEqual(1, $result, "Pb with dol_compress_dir of ".$dirout." into ".$conf->admin->dir_temp.'/testdir.zip'); } /** From 8243ffc174603084237bf6f6ce4f395811e7d617 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Mar 2021 14:53:40 +0100 Subject: [PATCH 023/180] Changelog --- ChangeLog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index 5eb26da852f..e685669f01d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21,6 +21,8 @@ FIX: #16487 FIX: #16503 FIX: #16530 FIX: #16533 +FIX: #16629 +FIX: #16671 Can not generate zip file of documents in backup tool FIX: Add "Now" link on social charges creation card FIX: avoid undefined url and missing token FIX: Bad project filter in ticket list From 631aad94e78bdf5e996e5b97a2d2c628aa9b3192 Mon Sep 17 00:00:00 2001 From: Florian Mortgat Date: Mon, 15 Mar 2021 15:05:01 +0100 Subject: [PATCH 024/180] FIX PHP version requirement in composer.json --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index d26bbb05ad9..833bd2a633b 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "vendor-dir" : "htdocs/includes" }, "require" : { - "php" : ">=5.5.0", + "php" : ">=5.6.0", "ext-curl" : "*", "ckeditor/ckeditor" : "4.12.1", "mike42/escpos-php" : "2.2", From 99cd866eba195fcb3ab0f90a99c42da58a765681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 15:12:10 +0100 Subject: [PATCH 025/180] fix php8 warning --- htdocs/compta/bank/list.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/compta/bank/list.php b/htdocs/compta/bank/list.php index 2882a4635fd..9375cf8aaa1 100644 --- a/htdocs/compta/bank/list.php +++ b/htdocs/compta/bank/list.php @@ -62,6 +62,7 @@ if (!empty($conf->categorie->enabled)) { $search_category_list = GETPOST("search_category_".Categorie::TYPE_ACCOUNT."_list", "array"); } +$socid = 0; // Security check if ($user->socid) { $socid = $user->socid; From 15f9d07d57c249700150486ee511a0dad677254d Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 15:36:08 +0100 Subject: [PATCH 026/180] Update thirdparty_lettering_customer.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -> $help_url add 'DE:Modul_Geschäftspartner' --- .../accountancy/bookkeeping/thirdparty_lettering_customer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php b/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php index a2192d5ea60..fa5302919d5 100644 --- a/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php @@ -128,7 +128,7 @@ $form = new Form($db); $formaccounting = new FormAccounting($db); $title = $object->name." - ".$langs->trans('TabLetteringCustomer'); -$help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; +$help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas|DE:Modul_Geschäftspartner'; llxHeader('', $title, $help_url); $head = societe_prepare_head($object); From 4923bb3577a685218ca4906606608539d17d374d Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 15:40:58 +0100 Subject: [PATCH 027/180] Update thirdparty_lettering_supplier.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -> $help_url add 'DE:Modul_Geschäftspartner' --- .../accountancy/bookkeeping/thirdparty_lettering_supplier.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php b/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php index f8167846aff..e31479f10cd 100644 --- a/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php @@ -127,7 +127,7 @@ $form = new Form($db); $formaccounting = new FormAccounting($db); $title = $object->name." - ".$langs->trans('TabLetteringSupplier'); -$help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; +$help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas|DE:Modul_Geschäftspartner'; llxHeader('', $title, $help_url); $head = societe_prepare_head($object); From d7e930fe63bdeaef682386dc1efe9e5a953d59e1 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 15:44:29 +0100 Subject: [PATCH 028/180] Update card.php -> $help_url add 'DE:Modul_Mitglieder' --- htdocs/adherents/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 896dddd55e3..7e72058092a 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -769,7 +769,7 @@ $formfile = new FormFile($db); $formcompany = new FormCompany($db); $title = $langs->trans("Member")." - ".$langs->trans("Card"); -$help_url = 'EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros'; +$help_url = 'EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros|DE:Modul_Mitglieder'; llxHeader('', $title, $help_url); $countrynotdefined = $langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("SeeAbove").')'; From 2040596b8c93baffc27eaf539e79733fc65e1e01 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 15:46:43 +0100 Subject: [PATCH 029/180] Update adherent.php -> $help_url add 'DE:Modul_Mitglieder' --- htdocs/adherents/admin/adherent.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/adherents/admin/adherent.php b/htdocs/adherents/admin/adherent.php index adcf7d49311..092d9b0de38 100644 --- a/htdocs/adherents/admin/adherent.php +++ b/htdocs/adherents/admin/adherent.php @@ -178,7 +178,7 @@ if ($action == 'unset') { $form = new Form($db); -$help_url = 'EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros'; +$help_url = 'EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros|DE:Modul_Mitglieder'; llxHeader('', $langs->trans("MembersSetup"), $help_url); From 032ffc657feaa205199d430c499f0bf57b8c46b5 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 16:03:56 +0100 Subject: [PATCH 030/180] Update card.php at $helpurl add -> DE:Modul_Produkte at $helpurl add -> DE:Modul_Leistungen --- htdocs/product/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/product/card.php b/htdocs/product/card.php index 1ab642dab83..ed0a55ffa2d 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -945,11 +945,11 @@ $helpurl = ''; $shortlabel = dol_trunc($object->label, 16); if (GETPOST("type") == '0' || ($object->type == Product::TYPE_PRODUCT)) { $title = $langs->trans('Product')." ".$shortlabel." - ".$langs->trans('Card'); - $helpurl = 'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos'; + $helpurl = 'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos|DE:Modul_Produkte'; } if (GETPOST("type") == '1' || ($object->type == Product::TYPE_SERVICE)) { $title = $langs->trans('Service')." ".$shortlabel." - ".$langs->trans('Card'); - $helpurl = 'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios'; + $helpurl = 'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios|DE:Modul_Leistungen'; } llxHeader('', $title, $helpurl); From a131d9be634ef57ec5b0bdefa783ab3e5927d135 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 16:19:29 +0100 Subject: [PATCH 031/180] Update barcode.php $help_url add -> DE:Modul_Barcode --- htdocs/admin/barcode.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/barcode.php b/htdocs/admin/barcode.php index ecc30c74ac9..e6211f0b56f 100644 --- a/htdocs/admin/barcode.php +++ b/htdocs/admin/barcode.php @@ -121,7 +121,7 @@ if ($action == 'setcoder') { $form = new Form($db); $formbarcode = new FormBarCode($db); -$help_url = 'EN:Module_Barcode|FR:Module_Codes_Barre|ES:Módulo Código de barra'; +$help_url = 'EN:Module_Barcode|FR:Module_Codes_Barre|ES:Módulo Código de barra|DE:Modul_Barcode'; llxHeader('', $langs->trans("BarcodeSetup"), $help_url); $linkback = ''.$langs->trans("BackToModuleList").''; From 3e24d455b7e34b2b5a623d06143ca7afdc1fd212 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 16:55:02 +0100 Subject: [PATCH 032/180] Update hook_document.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add $help_url = 'EN:Hooks_system|FR:Système_de_Hooks'; delete //$help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; --- htdocs/zapier/hook_document.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/zapier/hook_document.php b/htdocs/zapier/hook_document.php index b78ad4d7bac..849ef6f2490 100644 --- a/htdocs/zapier/hook_document.php +++ b/htdocs/zapier/hook_document.php @@ -96,8 +96,8 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; $form = new Form($db); $title = $langs->trans("MyObject").' - '.$langs->trans("Files"); -$help_url = ''; -//$help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; +$help_url = 'EN:Hooks_system|FR:Système_de_Hooks'; + llxHeader('', $title, $help_url); if ($object->id) { From b34982866fd728c7f3f99db9f1e0c7c171e7c9d7 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 16:58:59 +0100 Subject: [PATCH 033/180] Update list.php $help_url = 'EN:Module_Users|FR:Module_Utilisateurs|ES:Módulo_Usuarios|DE:Modul_Benutzer'; --- htdocs/user/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/user/list.php b/htdocs/user/list.php index f5ff4ea8a99..f9703116d62 100644 --- a/htdocs/user/list.php +++ b/htdocs/user/list.php @@ -308,8 +308,8 @@ if (empty($reshook)) { $formother = new FormOther($db); -//$help_url="EN:Module_MyObject|FR:Module_MyObject_FR|ES:Módulo_MyObject"; -$help_url = ''; +$help_url = 'EN:Module_Users|FR:Module_Utilisateurs|ES:Módulo_Usuarios|DE:Modul_Benutzer'; + if ($contextpage == 'employeelist' && $search_employee == 1) { $text = $langs->trans("ListOfEmployees"); } else { From bde33fb6a3275b1856c5c5eb0d9849881fbd0031 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 17:36:31 +0100 Subject: [PATCH 034/180] fix syntax --- htdocs/commande/class/commande.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 0975bfbd7ef..9cc01c83ef7 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -3686,7 +3686,7 @@ class Commande extends CommonOrder $label .= ' '.$this->getLibStatut(5); } $label .= '
'.$langs->trans('Ref').': '.$this->ref; - $label .= '
'.$langs->trans('RefCustomer').': '.(empty($this->ref_customer) ? (empty($this->ref_client) ? '' : $this-ref_client) : $this->ref_customer); + $label .= '
'.$langs->trans('RefCustomer').': '.(empty($this->ref_customer) ? (empty($this->ref_client) ? '' : $this->ref_client) : $this->ref_customer); if (!empty($this->total_ht)) { $label .= '
'.$langs->trans('AmountHT').': '.price($this->total_ht, 0, $langs, 0, -1, -1, $conf->currency); } From 17c49e6ce96a99040b1f805c134b7a4e5f074359 Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Mon, 15 Mar 2021 18:06:23 +0100 Subject: [PATCH 035/180] ongoinf card and list --- .../modules/modEventOrganization.class.php | 77 ++++++++++++++++++- .../class/conferenceorbooth.class.php | 11 ++- .../conferenceorbooth_list.php | 8 +- htdocs/langs/en_US/eventorganization.lang | 17 +++- htdocs/projet/list.php | 4 +- 5 files changed, 105 insertions(+), 12 deletions(-) diff --git a/htdocs/core/modules/modEventOrganization.class.php b/htdocs/core/modules/modEventOrganization.class.php index 77d0cc0c81f..2204955ad5e 100644 --- a/htdocs/core/modules/modEventOrganization.class.php +++ b/htdocs/core/modules/modEventOrganization.class.php @@ -337,7 +337,82 @@ class modEventOrganization extends DolibarrModules 'user'=>2, // 0=Menu for internal users, 1=external users, 2=both ); */ - + $this->menu[$r++]=array( + 'fk_menu'=>'fk_mainmenu=project', // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode + 'type'=>'left', // This is a Left menu entry + 'titre'=>'EventOrganizationMenuLeft', + 'mainmenu'=>'project', + 'leftmenu'=>'eventorganization', + 'url'=>'', + 'langs'=>'eventorganization', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. + 'position'=>1000+$r, + 'enabled'=>'$conf->eventorganization->enabled', // Define condition to show or hide menu entry. Use '$conf->eventorganization->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. + 'perms'=>'$user->rights->eventorganization->read', // Use 'perms'=>'$user->rights->eventorganization->level1->level2' if you want your menu with a permission rules + 'target'=>'', + 'user'=>2, // 0=Menu for internal users, 1=external users, 2=both + ); + $this->menu[$r++]=array( + 'fk_menu'=>'fk_mainmenu=project,fk_leftmenu=eventorganization', // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode + 'type'=>'left', // This is a Left menu entry + 'titre'=>'List', + 'url'=>'/projet/list.php?search_usage_event_organization=1&mainmenu=project', + 'langs'=>'eventorganization@eventorganization', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. + 'position'=>1000+$r, + 'enabled'=>'$conf->eventorganization->enabled', // Define condition to show or hide menu entry. Use '$conf->eventorganization->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. + 'perms'=>'$user->rights->eventorganization->read', // Use 'perms'=>'$user->rights->eventorganization->level1->level2' if you want your menu with a permission rules + 'target'=>'', + 'user'=>2, // 0=Menu for internal users, 1=external users, 2=both + ); + $this->menu[$r++]=array( + 'fk_menu'=>'fk_mainmenu=project,fk_leftmenu=eventorganization', // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode + 'type'=>'left', // This is a Left menu entry + 'titre'=>'New', + 'url'=>'/projet/card.php?leftmenu=projects&action=create&usage_organize_event=1', + 'langs'=>'eventorganization@eventorganization', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. + 'position'=>1000+$r, + 'enabled'=>'$conf->eventorganization->enabled', // Define condition to show or hide menu entry. Use '$conf->eventorganization->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. + 'perms'=>'$user->rights->eventorganization->write', // Use 'perms'=>'$user->rights->eventorganization->level1->level2' if you want your menu with a permission rules + 'target'=>'', + 'user'=>2, // 0=Menu for internal users, 1=external users, 2=both + ); + $this->menu[$r++]=array( + 'fk_menu'=>'fk_mainmenu=project', // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode + 'type'=>'left', // This is a Left menu entry + 'titre'=>'EventOrganizationMenuLeft', + 'mainmenu'=>'project', + 'leftmenu'=>'eventorganizationconforbooth', + 'url'=>'', + 'langs'=>'eventorganization', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. + 'position'=>1000+$r, + 'enabled'=>'$conf->eventorganization->enabled', // Define condition to show or hide menu entry. Use '$conf->eventorganization->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. + 'perms'=>'$user->rights->eventorganization->read', // Use 'perms'=>'$user->rights->eventorganization->level1->level2' if you want your menu with a permission rules + 'target'=>'', + 'user'=>2, // 0=Menu for internal users, 1=external users, 2=both + ); + $this->menu[$r++]=array( + 'fk_menu'=>'fk_mainmenu=project,fk_leftmenu=eventorganizationconforbooth', // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode + 'type'=>'left', // This is a Left menu entry + 'titre'=>'List', + 'url'=>'htdocs/eventorganization/conferenceorbooth_list.php?mainmenu=project', + 'langs'=>'eventorganization', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. + 'position'=>1000+$r, + 'enabled'=>'$conf->eventorganization->enabled', // Define condition to show or hide menu entry. Use '$conf->eventorganization->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. + 'perms'=>'$user->rights->eventorganization->read', // Use 'perms'=>'$user->rights->eventorganization->level1->level2' if you want your menu with a permission rules + 'target'=>'', + 'user'=>2, // 0=Menu for internal users, 1=external users, 2=both + ); + $this->menu[$r++]=array( + 'fk_menu'=>'fk_mainmenu=project,fk_leftmenu=eventorganizationconforbooth', // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode + 'type'=>'left', // This is a Left menu entry + 'titre'=>'New', + 'url'=>'/eventorganization/conferenceorbooth_card.php?leftmenu=projects&action=create', + 'langs'=>'eventorganization', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. + 'position'=>1000+$r, + 'enabled'=>'$conf->eventorganization->enabled', // Define condition to show or hide menu entry. Use '$conf->eventorganization->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. + 'perms'=>'$user->rights->eventorganization->write', // Use 'perms'=>'$user->rights->eventorganization->level1->level2' if you want your menu with a permission rules + 'target'=>'', + 'user'=>2, // 0=Menu for internal users, 1=external users, 2=both + ); /* END MODULEBUILDER LEFTMENU CONFERENCEORBOOTH */ // Exports profiles provided by this module $r = 1; diff --git a/htdocs/eventorganization/class/conferenceorbooth.class.php b/htdocs/eventorganization/class/conferenceorbooth.class.php index 186bd57811b..7defb51f415 100644 --- a/htdocs/eventorganization/class/conferenceorbooth.class.php +++ b/htdocs/eventorganization/class/conferenceorbooth.class.php @@ -69,7 +69,7 @@ class ConferenceOrBooth extends ActionComm const STATUS_CONFIRMED = 2; const STATUS_NOT_QUALIFIED = 3; const STATUS_DONE = 4; - const STATUS_CANCELED = -1; + const STATUS_CANCELED = 9; /** @@ -104,18 +104,18 @@ class ConferenceOrBooth extends ActionComm */ public $fields=array( 'id' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), - 'ref' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), + 'ref' => array('type'=>'integer', 'label'=>'Ref', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>2, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>'1', 'position'=>30, 'notnull'=>0, 'visible'=>1, 'searchall'=>1, 'css'=>'minwidth300', 'help'=>"Help text", 'showoncombobox'=>'1',), 'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php:1:status=1 AND entity IN (__SHARED_ENTITIES__)', 'label'=>'ThirdParty', 'enabled'=>'1', 'position'=>50, 'notnull'=>-1, 'visible'=>1, 'index'=>1, 'help'=>"LinkToThirparty",), 'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php:1', 'label'=>'Project', 'enabled'=>'1', 'position'=>52, 'notnull'=>-1, 'visible'=>-1, 'index'=>1,), 'note' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>60, 'notnull'=>0, 'visible'=>1,), - 'fk_action' => array('type'=>'sellist:c_actioncomm:label:rowid::module LIKE (\'conference\',\'booth\'))', 'label'=>'Format', 'enabled'=>'1', 'position'=>60, 'notnull'=>1, 'visible'=>1,), + 'fk_action' => array('type'=>'sellist:c_actioncomm:libelle:id::module LIKE (\'%@eventorganization\')', 'label'=>'Format', 'enabled'=>'1', 'position'=>60, 'notnull'=>1, 'visible'=>1,), 'datec' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,), 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,), 'fk_user_author' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',), 'fk_user_mod' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,), 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,), - 'status' => array('type'=>'smallint', 'label'=>'Status', 'enabled'=>'1', 'position'=>1000, 'notnull'=>1, 'visible'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Brouillon', '1'=>'Validé', '9'=>'Annulé'),), + 'status' => array('type'=>'smallint', 'label'=>'Status', 'enabled'=>'1', 'position'=>1000, 'notnull'=>1, 'visible'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'EvntOrgDraft', '1'=>'EvntOrgSuggested', '2'=> 'EvntOrgConfirmed', '3' =>'EvntOrgNotQualified', '4' =>'EvntOrgDone', '9'=>'EvntOrgCancelled'),), ); public $rowid; public $id; @@ -185,6 +185,9 @@ class ConferenceOrBooth extends ActionComm public function create(User $user, $notrigger = false) { $this->setPercentageFromStatus(); + $this->userownerid=$user->id; + $this->type_code=$this->fk_action; + $this->socid=$this->fk_soc; return parent::create($user, $notrigger); } diff --git a/htdocs/eventorganization/conferenceorbooth_list.php b/htdocs/eventorganization/conferenceorbooth_list.php index 374ea25f68c..73b32abfa7d 100644 --- a/htdocs/eventorganization/conferenceorbooth_list.php +++ b/htdocs/eventorganization/conferenceorbooth_list.php @@ -205,11 +205,11 @@ $title = $langs->trans('ListOf', $langs->transnoentitiesnoconv("ConferenceOrBoot if ($projectid > 0) { $project = new Project($db); - $result=$project->fetch($projectid); + $result = $project->fetch($projectid); if ($result < 0) { setEventMessages(null, $project->errors, 'errors'); } - $result=$project->fetch_thirdparty(); + $result = $project->fetch_thirdparty(); if ($result < 0) { setEventMessages(null, $project->errors, 'errors'); } @@ -305,7 +305,7 @@ if ($projectid > 0) { print '
'; } if (!empty($conf->eventorganization->enabled)) { - print 'usage_organize_event ? ' checked="checked"' : '')).'"> '; + print 'usage_organize_event ? ' checked="checked"' : '').'"> '; $htmltext = $langs->trans("EventOrganizationDescriptionLong"); print $form->textwithpicto($langs->trans("ManageOrganizeEvent"), $htmltext); } @@ -555,7 +555,7 @@ print ''; print ''; print ''; -$newcardbutton = dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', dol_buildpath('/eventorganization/conferenceorbooth_card.php', 1).'?action=create'.(!empty($projectid)?'&fk_project='.$projectid:'').'&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $permissiontoadd); +$newcardbutton = dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', dol_buildpath('/eventorganization/conferenceorbooth_card.php', 1).'?action=create'.(!empty($project->id)?'&fk_project='.$project->id:'').(!empty($project->socid)?'&fk_soc='.$project->socid:'').'&backtopage='.urlencode($_SERVER['PHP_SELF']).(!empty($project->id)?'?projectid='.$project->id:''), '', $permissiontoadd); print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'object_'.$object->picto, 0, $newcardbutton, '', $limit, 0, 0, 1); diff --git a/htdocs/langs/en_US/eventorganization.lang b/htdocs/langs/en_US/eventorganization.lang index 0c7e4f047ce..5444ed59e3d 100644 --- a/htdocs/langs/en_US/eventorganization.lang +++ b/htdocs/langs/en_US/eventorganization.lang @@ -16,11 +16,16 @@ # # Generic # - ModuleEventOrganizationName = Event Organization EventOrganizationDescription = Event Organization through Module Project EventOrganizationDescriptionLong= Manage Event organization for conference, attendees, speaker, and attendees, with public subcription page +# +# Menu +# +EventOrganizationMenuLeft = Organized events +EventOrganizationConferenceOrBoothMenuLeft = Conference Or Booth + # # Admin page # @@ -70,3 +75,13 @@ PriceOfRegistrationHelp=Price of registration PriceOfBooth=Price of subscription PriceOfBoothHelp=Price of subscription EventOrganizationICSLink=Link ICS for events + +# +# Status +# +EvntOrgDraft = Draft +EvntOrgSuggested = Suggested +EvntOrgConfirmed = Confirmed +EvntOrgNotQualified = Not Qualified +EvntOrgDone = Done +EvntOrgCancelled = Cancelled diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index 933abd53692..f34c33097ec 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -1198,8 +1198,8 @@ while ($i < min($num, $limit)) { // Event Organization if (!empty($arrayfields['p.usage_organize_event']['checked'])) { print ''; - if ($obj->usage_event_organization) { - print yn($obj->usage_event_organization); + if ($obj->usage_organize_event) { + print yn($obj->usage_organize_event); } print ''; if (!$i) { From 76cf3da449e16cefe5a1f9df567e8513bb0c6f78 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Mon, 15 Mar 2021 18:10:59 +0100 Subject: [PATCH 036/180] FIX: Cannot delete a batch material from item receipts --- htdocs/fourn/commande/dispatch.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 6a42ad77aa3..13989286e33 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -411,7 +411,7 @@ if ($action == 'confirm_deleteline' && $confirm == 'yes' && $user->rights->fourn $product = $supplierorderdispatch->fk_product; $price = GETPOST('price'); $comment = $supplierorderdispatch->comment; - $eatby = $supplierorderdispatch->fk_product; + $eatby = $supplierorderdispatch->eatby; $sellby = $supplierorderdispatch->sellby; $batch = $supplierorderdispatch->batch; From dd4b8f28807392eb4bff824e0e3f10ec1e3984e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 18:22:50 +0100 Subject: [PATCH 037/180] Update html.formmail.class.php --- htdocs/core/class/html.formmail.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.formmail.class.php b/htdocs/core/class/html.formmail.class.php index 536ea152e47..57830e7d661 100644 --- a/htdocs/core/class/html.formmail.class.php +++ b/htdocs/core/class/html.formmail.class.php @@ -828,7 +828,7 @@ class FormMail extends Form $out .= ''; - if ($this->withmaindocfile) { + if ($this->withmaindocfile) { // withmaindocfile is set to 1 or -1 to show the checkbox (-1 = checked or 1 = not checked) if (GETPOSTISSET('sendmail')) { $this->withmaindocfile = (GETPOST('addmaindocfile', 'alpha') ? -1 : 1); From 910b4f1daf9d84dbca8325af2cd03a9782e49cef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 18:58:35 +0100 Subject: [PATCH 038/180] Update html.formmail.class.php --- htdocs/core/class/html.formmail.class.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/htdocs/core/class/html.formmail.class.php b/htdocs/core/class/html.formmail.class.php index 57830e7d661..e08d1637107 100644 --- a/htdocs/core/class/html.formmail.class.php +++ b/htdocs/core/class/html.formmail.class.php @@ -1617,7 +1617,14 @@ class ModelMail */ public $label; + /** + * @var string Model mail topic + */ public $topic; + + /** + * @var string Model mail content + */ public $content; public $content_lines; public $lang; From 83af43afdb5ec13d08246337786f8eaec01b4583 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 18:58:47 +0100 Subject: [PATCH 039/180] Update index.php --- htdocs/ftp/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/ftp/index.php b/htdocs/ftp/index.php index 3f04f161038..6a97265b050 100644 --- a/htdocs/ftp/index.php +++ b/htdocs/ftp/index.php @@ -123,7 +123,7 @@ if (GETPOST("sendit") && !empty($conf->global->MAIN_UPLOAD_DOC)) { } } } else { - // Echec transfert (fichier depassant la limite ?) + // Transfer failure (file exceeding the limit ?) $langs->load("errors"); setEventMessages($langs->trans("ErrorFailToCreateDir", $upload_dir), null, 'errors'); } From cdf5d2399a526182d1afd85f7397462dda479d8c Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Mon, 15 Mar 2021 19:07:40 +0100 Subject: [PATCH 040/180] fix warning --- htdocs/commande/class/commande.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 0975bfbd7ef..9cc01c83ef7 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -3686,7 +3686,7 @@ class Commande extends CommonOrder $label .= ' '.$this->getLibStatut(5); } $label .= '
'.$langs->trans('Ref').': '.$this->ref; - $label .= '
'.$langs->trans('RefCustomer').': '.(empty($this->ref_customer) ? (empty($this->ref_client) ? '' : $this-ref_client) : $this->ref_customer); + $label .= '
'.$langs->trans('RefCustomer').': '.(empty($this->ref_customer) ? (empty($this->ref_client) ? '' : $this->ref_client) : $this->ref_customer); if (!empty($this->total_ht)) { $label .= '
'.$langs->trans('AmountHT').': '.price($this->total_ht, 0, $langs, 0, -1, -1, $conf->currency); } From 884859d649b22a692f3e246726dbc379267513ef Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 19:08:02 +0100 Subject: [PATCH 041/180] Update card.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit $helpurl = 'EN:Module_Categories|FR:Module_Catégories'; two translations of comments --- htdocs/categories/card.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/categories/card.php b/htdocs/categories/card.php index 5b54666b674..9f275033b01 100644 --- a/htdocs/categories/card.php +++ b/htdocs/categories/card.php @@ -97,7 +97,7 @@ $error = 0; // Add action if ($action == 'add' && $user->rights->categorie->creer) { - // Action ajout d'une categorie + // Action add a category if ($cancel) { if ($urlfrom) { header("Location: ".$urlfrom); @@ -167,7 +167,7 @@ if ($action == 'add' && $user->rights->categorie->creer) { // Confirm action if (($action == 'add' || $action == 'confirmed') && $user->rights->categorie->creer) { - // Action confirmation de creation categorie + // Action confirmation of creation category if ($action == 'confirmed') { if ($urlfrom) { header("Location: ".$urlfrom); @@ -208,7 +208,7 @@ if (($action == 'add' || $action == 'confirmed') && $user->rights->categorie->cr $form = new Form($db); $formother = new FormOther($db); -$helpurl = ''; +$helpurl = 'EN:Module_Categories|FR:Module_Catégories'; llxHeader("", $langs->trans("Categories"), $helpurl); if ($user->rights->categorie->creer) { From 1d11dfd4687861bdfdaeaafba9a4cab21c581a33 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 19:24:49 +0100 Subject: [PATCH 042/180] Update card.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit $help_url add -> DE:Modul_Geschäftspartner --- htdocs/comm/card.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/card.php b/htdocs/comm/card.php index 07ab4f797de..028817e158c 100644 --- a/htdocs/comm/card.php +++ b/htdocs/comm/card.php @@ -305,7 +305,9 @@ $title = $langs->trans("CustomerCard"); if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->name; } -$help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; + +$help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas|DE:Modul_Geschäftspartner'; + llxHeader('', $title, $help_url); From 9eb87ab43a000ffc6512c25bf73a397b8fb04483 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 19:28:48 +0100 Subject: [PATCH 043/180] Update card.php $help_url add -> DE:Modul_Angebot --- htdocs/comm/propal/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index a206e61064f..a572cead648 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -1425,7 +1425,7 @@ if (!empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } -$help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; +$help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos|DE:Modul_Angebote'; llxHeader('', $langs->trans('Proposal'), $help_url); $now = dol_now(); From 94802346cf5da0c5a2072154a50f132a69b39219 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 19:44:00 +0100 Subject: [PATCH 044/180] Update card.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add DE:Modul_Kundenaufträge --- htdocs/commande/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 74de84b861a..a46e7df6b75 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1393,7 +1393,7 @@ if (empty($reshook)) { * View */ -llxHeader('', $langs->trans('Order'), 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes'); +llxHeader('', $langs->trans('Order'), 'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge'); $form = new Form($db); $formfile = new FormFile($db); From 7b8d2e55b769c77746219ab5085552492681c083 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 19:46:51 +0100 Subject: [PATCH 045/180] Update card.php $helpurl = "EN:Module_Banks_and_Cash"; --- htdocs/compta/bank/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/bank/card.php b/htdocs/compta/bank/card.php index 74791c14898..50e3e35a4b3 100644 --- a/htdocs/compta/bank/card.php +++ b/htdocs/compta/bank/card.php @@ -305,7 +305,7 @@ if (!empty($conf->accounting->enabled)) { $countrynotdefined = $langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("SeeAbove").')'; $title = $langs->trans("FinancialAccount")." - ".$langs->trans("Card"); -$helpurl = ""; +$helpurl = "EN:Module_Banks_and_Cash"; llxHeader("", $title, $helpurl); From e89cfc375378f7476853e5c339974f59cc84c2a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 20:17:01 +0100 Subject: [PATCH 046/180] decompose code --- htdocs/core/class/html.formmail.class.php | 172 ++++++++++++---------- 1 file changed, 98 insertions(+), 74 deletions(-) diff --git a/htdocs/core/class/html.formmail.class.php b/htdocs/core/class/html.formmail.class.php index 536ea152e47..f6f2f3de562 100644 --- a/htdocs/core/class/html.formmail.class.php +++ b/htdocs/core/class/html.formmail.class.php @@ -659,61 +659,7 @@ class FormMail extends Form // To if (!empty($this->withto) || is_array($this->withto)) { - $out .= ''; - if ($this->withtofree) { - $out .= $form->textwithpicto($langs->trans("MailTo"), $langs->trans("YouCanUseCommaSeparatorForSeveralRecipients")); - } else { - $out .= $langs->trans("MailTo"); - } - $out .= ''; - if ($this->withtoreadonly) { - if (!empty($this->toname) && !empty($this->tomail)) { - $out .= ''; - $out .= ''; - if ($this->totype == 'thirdparty') { - $soc = new Societe($this->db); - $soc->fetch($this->toid); - $out .= $soc->getNomUrl(1); - } elseif ($this->totype == 'contact') { - $contact = new Contact($this->db); - $contact->fetch($this->toid); - $out .= $contact->getNomUrl(1); - } else { - $out .= $this->toname; - } - $out .= ' <'.$this->tomail.'>'; - if ($this->withtofree) { - $out .= '
'.$langs->trans("and").' withto) : "").'" />'; - } - } else { - // Note withto may be a text like 'AllRecipientSelected' - $out .= (!is_array($this->withto) && !is_numeric($this->withto)) ? $this->withto : ""; - } - } else { - // The free input of email - if (!empty($this->withtofree)) { - $out .= 'withto) : "")).'" />'; - } - // The select combo - if (!empty($this->withto) && is_array($this->withto)) { - if (!empty($this->withtofree)) { - $out .= " ".$langs->trans("and")."/".$langs->trans("or")." "; - } - // multiselect array convert html entities into options tags, even if we dont want this, so we encode them a second time - $tmparray = $this->withto; - foreach ($tmparray as $key => $val) { - $tmparray[$key] = dol_htmlentities($tmparray[$key], null, 'UTF-8', true); - } - - $withtoselected = GETPOST("receiver", 'array'); // Array of selected value - - if (empty($withtoselected) && count($tmparray) == 1 && GETPOST('action', 'aZ09') == 'presend') { - $withtoselected = array_keys($tmparray); - } - $out .= $form->multiselectarray("receiver", $tmparray, $withtoselected, null, null, 'inline-block minwidth500', null, ""); - } - } - $out .= "\n"; + $out .= $this->getHtmlForTo(); } // To User @@ -751,25 +697,7 @@ class FormMail extends Form // CC if (!empty($this->withtocc) || is_array($this->withtocc)) { - $out .= ''; - $out .= $form->textwithpicto($langs->trans("MailCC"), $langs->trans("YouCanUseCommaSeparatorForSeveralRecipients")); - $out .= ''; - if ($this->withtoccreadonly) { - $out .= (!is_array($this->withtocc) && !is_numeric($this->withtocc)) ? $this->withtocc : ""; - } else { - $out .= 'withtocc) && !is_numeric($this->withtocc)) ? $this->withtocc : '')).'" />'; - if (!empty($this->withtocc) && is_array($this->withtocc)) { - $out .= " ".$langs->trans("and")."/".$langs->trans("or")." "; - // multiselect array convert html entities into options tags, even if we dont want this, so we encode them a second time - $tmparray = $this->withtocc; - foreach ($tmparray as $key => $val) { - $tmparray[$key] = dol_htmlentities($tmparray[$key], null, 'UTF-8', true); - } - $withtoccselected = GETPOST("receivercc", 'array'); // Array of selected value - $out .= $form->multiselectarray("receivercc", $tmparray, $withtoccselected, null, null, 'inline-block minwidth500', null, ""); - } - } - $out .= "\n"; + $out .= $this->getHtmlForCc(); } // To User cc @@ -1065,6 +993,102 @@ class FormMail extends Form } } + /** + * get html For To + * + * @return string html + */ + public function getHtmlForTo() + { + global $langs, $form; + $out = ''; + if ($this->withtofree) { + $out .= $form->textwithpicto($langs->trans("MailTo"), $langs->trans("YouCanUseCommaSeparatorForSeveralRecipients")); + } else { + $out .= $langs->trans("MailTo"); + } + $out .= ''; + if ($this->withtoreadonly) { + if (!empty($this->toname) && !empty($this->tomail)) { + $out .= ''; + $out .= ''; + if ($this->totype == 'thirdparty') { + $soc = new Societe($this->db); + $soc->fetch($this->toid); + $out .= $soc->getNomUrl(1); + } elseif ($this->totype == 'contact') { + $contact = new Contact($this->db); + $contact->fetch($this->toid); + $out .= $contact->getNomUrl(1); + } else { + $out .= $this->toname; + } + $out .= ' <'.$this->tomail.'>'; + if ($this->withtofree) { + $out .= '
'.$langs->trans("and").' withto) : "").'" />'; + } + } else { + // Note withto may be a text like 'AllRecipientSelected' + $out .= (!is_array($this->withto) && !is_numeric($this->withto)) ? $this->withto : ""; + } + } else { + // The free input of email + if (!empty($this->withtofree)) { + $out .= 'withto) : "")).'" />'; + } + // The select combo + if (!empty($this->withto) && is_array($this->withto)) { + if (!empty($this->withtofree)) { + $out .= " ".$langs->trans("and")."/".$langs->trans("or")." "; + } + // multiselect array convert html entities into options tags, even if we dont want this, so we encode them a second time + $tmparray = $this->withto; + foreach ($tmparray as $key => $val) { + $tmparray[$key] = dol_htmlentities($tmparray[$key], null, 'UTF-8', true); + } + + $withtoselected = GETPOST("receiver", 'array'); // Array of selected value + + if (empty($withtoselected) && count($tmparray) == 1 && GETPOST('action', 'aZ09') == 'presend') { + $withtoselected = array_keys($tmparray); + } + $out .= $form->multiselectarray("receiver", $tmparray, $withtoselected, null, null, 'inline-block minwidth500', null, ""); + } + } + $out .= "\n"; + return $out; + } + + /** + * get html For CC + * + * @return string html + */ + public function getHtmlForCc() + { + global $langs, $form; + $out = ''; + $out .= $form->textwithpicto($langs->trans("MailCC"), $langs->trans("YouCanUseCommaSeparatorForSeveralRecipients")); + $out .= ''; + if ($this->withtoccreadonly) { + $out .= (!is_array($this->withtocc) && !is_numeric($this->withtocc)) ? $this->withtocc : ""; + } else { + $out .= 'withtocc) && !is_numeric($this->withtocc)) ? $this->withtocc : '')).'" />'; + if (!empty($this->withtocc) && is_array($this->withtocc)) { + $out .= " ".$langs->trans("and")."/".$langs->trans("or")." "; + // multiselect array convert html entities into options tags, even if we dont want this, so we encode them a second time + $tmparray = $this->withtocc; + foreach ($tmparray as $key => $val) { + $tmparray[$key] = dol_htmlentities($tmparray[$key], null, 'UTF-8', true); + } + $withtoccselected = GETPOST("receivercc", 'array'); // Array of selected value + $out .= $form->multiselectarray("receivercc", $tmparray, $withtoccselected, null, null, 'inline-block minwidth500', null, ""); + } + } + $out .= "\n"; + return $out; + } + /** * get html For WithCCC * From 177a6bfe4f62f766aeb681d0a2933f2186518efd Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Mon, 15 Mar 2021 20:20:53 +0100 Subject: [PATCH 047/180] conference or booth card and list ok --- htdocs/core/class/commonobject.class.php | 3 +- .../modules/modEventOrganization.class.php | 2 +- .../class/conferenceorbooth.class.php | 38 ++++++++++++++++--- .../conferenceorbooth_card.php | 3 +- .../conferenceorbooth_list.php | 12 ++++-- ...ventorganization_conferenceorbooth.lib.php | 5 --- .../modulebuilder/template/myobject_list.php | 8 ++-- htdocs/projet/class/project.class.php | 2 + htdocs/projet/list.php | 2 +- 9 files changed, 53 insertions(+), 22 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index b86ea4fb650..758a1ba0e8f 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -7232,12 +7232,13 @@ abstract class CommonObject $classname = $InfoFieldList[0]; $classpath = $InfoFieldList[1]; $getnomurlparam = (empty($InfoFieldList[2]) ? 3 : $InfoFieldList[2]); + $getnomurlparam2 = (empty($InfoFieldList[4]) ? '' : $InfoFieldList[4]); if (!empty($classpath)) { dol_include_once($InfoFieldList[1]); if ($classname && class_exists($classname)) { $object = new $classname($this->db); $object->fetch($value); - $value = $object->getNomUrl($getnomurlparam); + $value = $object->getNomUrl($getnomurlparam, $getnomurlparam2); } } else { dol_syslog('Error bad setup of extrafield', LOG_WARNING); diff --git a/htdocs/core/modules/modEventOrganization.class.php b/htdocs/core/modules/modEventOrganization.class.php index 2204955ad5e..4f25993d9a1 100644 --- a/htdocs/core/modules/modEventOrganization.class.php +++ b/htdocs/core/modules/modEventOrganization.class.php @@ -393,7 +393,7 @@ class modEventOrganization extends DolibarrModules 'fk_menu'=>'fk_mainmenu=project,fk_leftmenu=eventorganizationconforbooth', // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode 'type'=>'left', // This is a Left menu entry 'titre'=>'List', - 'url'=>'htdocs/eventorganization/conferenceorbooth_list.php?mainmenu=project', + 'url'=>'/eventorganization/conferenceorbooth_list.php?mainmenu=project', 'langs'=>'eventorganization', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. 'position'=>1000+$r, 'enabled'=>'$conf->eventorganization->enabled', // Define condition to show or hide menu entry. Use '$conf->eventorganization->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. diff --git a/htdocs/eventorganization/class/conferenceorbooth.class.php b/htdocs/eventorganization/class/conferenceorbooth.class.php index 7defb51f415..7f28d40dd29 100644 --- a/htdocs/eventorganization/class/conferenceorbooth.class.php +++ b/htdocs/eventorganization/class/conferenceorbooth.class.php @@ -107,9 +107,11 @@ class ConferenceOrBooth extends ActionComm 'ref' => array('type'=>'integer', 'label'=>'Ref', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>2, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>'1', 'position'=>30, 'notnull'=>0, 'visible'=>1, 'searchall'=>1, 'css'=>'minwidth300', 'help'=>"Help text", 'showoncombobox'=>'1',), 'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php:1:status=1 AND entity IN (__SHARED_ENTITIES__)', 'label'=>'ThirdParty', 'enabled'=>'1', 'position'=>50, 'notnull'=>-1, 'visible'=>1, 'index'=>1, 'help'=>"LinkToThirparty",), - 'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php:1', 'label'=>'Project', 'enabled'=>'1', 'position'=>52, 'notnull'=>-1, 'visible'=>-1, 'index'=>1,), + 'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php:1::eventorganization', 'label'=>'Project', 'enabled'=>'1', 'position'=>52, 'notnull'=>-1, 'visible'=>-1, 'index'=>1,), 'note' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>60, 'notnull'=>0, 'visible'=>1,), 'fk_action' => array('type'=>'sellist:c_actioncomm:libelle:id::module LIKE (\'%@eventorganization\')', 'label'=>'Format', 'enabled'=>'1', 'position'=>60, 'notnull'=>1, 'visible'=>1,), + 'datep' => array('type'=>'datetime', 'label'=>'DateStart', 'enabled'=>'1', 'position'=>70, 'notnull'=>0, 'visible'=>1, 'showoncombobox'=>'1',), + 'datep2' => array('type'=>'datetime', 'label'=>'DateEnd', 'enabled'=>'1', 'position'=>71, 'notnull'=>0, 'visible'=>1, 'showoncombobox'=>'1',), 'datec' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,), 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,), 'fk_user_author' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',), @@ -185,9 +187,7 @@ class ConferenceOrBooth extends ActionComm public function create(User $user, $notrigger = false) { $this->setPercentageFromStatus(); - $this->userownerid=$user->id; - $this->type_code=$this->fk_action; - $this->socid=$this->fk_soc; + $this->setActionCommFields($user); return parent::create($user, $notrigger); } @@ -196,7 +196,7 @@ class ConferenceOrBooth extends ActionComm * * @return void */ - public function setPercentageFromStatus() + protected function setPercentageFromStatus() { if ($this->status==self::STATUS_DONE) { $this->percentage=100; @@ -206,6 +206,32 @@ class ConferenceOrBooth extends ActionComm } } + /** + * Set action comm fields + * + * @param User $user User + * @return void + */ + protected function setActionCommFields(User $user) + { + $this->userownerid=$user->id; + $this->type_id=$this->fk_action; + $this->socid=$this->fk_soc; + $this->datef=$this->datep2; + } + + /** + * Get action comm fields + * + * @return void + */ + protected function getActionCommFields() + { + $this->fk_action=$this->type_id; + $this->fk_soc=$this->socid; + $this->datep2=$this->datef; + } + /** * Load object in memory from the database * @@ -218,6 +244,7 @@ class ConferenceOrBooth extends ActionComm public function fetch($id, $ref = null, $ref_ext = '', $email_msgid = '') { $result = parent::fetch($id, $ref, $ref_ext, $email_msgid); + $this->getActionCommFields(); return $result; } @@ -313,6 +340,7 @@ class ConferenceOrBooth extends ActionComm public function update(User $user, $notrigger = false) { $this->setPercentageFromStatus(); + $this->setActionCommFields($user); return parent::update($user, $notrigger); } diff --git a/htdocs/eventorganization/conferenceorbooth_card.php b/htdocs/eventorganization/conferenceorbooth_card.php index 2fb59bbcbc7..817be70ab79 100644 --- a/htdocs/eventorganization/conferenceorbooth_card.php +++ b/htdocs/eventorganization/conferenceorbooth_card.php @@ -29,6 +29,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorbooth.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/eventorganization/lib/eventorganization_conferenceorbooth.lib.php'; // Load translation files required by the page $langs->loadLangs(array("eventorganization", "projects")); @@ -452,7 +453,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // Back to draft - if ($object->status == $object::STATUS_VALIDATED) { + if ($object->status == $object::STATUS_CONFIRMED) { print dolGetButtonAction($langs->trans('SetToDraft'), '', 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_setdraft&confirm=yes', '', $permissiontoadd); } diff --git a/htdocs/eventorganization/conferenceorbooth_list.php b/htdocs/eventorganization/conferenceorbooth_list.php index 73b32abfa7d..81607e704b4 100644 --- a/htdocs/eventorganization/conferenceorbooth_list.php +++ b/htdocs/eventorganization/conferenceorbooth_list.php @@ -408,14 +408,16 @@ if ($object->ismultientitymanaged == 1) { } else { $sql .= " WHERE 1 = 1"; } + foreach ($search as $key => $val) { - if (in_array($key, $object->fields)) { + if (array_key_exists($key, $object->fields)) { + //var_dump($key,$object->fields); if ($key == 'status' && $search[$key] == -1) { continue; } $mode_search = (($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key])) ? 1 : 0); - if (strpos($object->fields[$key]['type'], 'integer:') === 0) { - if ($search[$key] == '-1') { + if ((strpos($object->fields[$key]['type'], 'integer:') === 0) || (strpos($object->fields[$key]['type'], 'sellist:') === 0)) { + if ($search[$key] == '-1' || $search[$key] === '0') { $search[$key] = ''; } $mode_search = 2; @@ -424,6 +426,7 @@ foreach ($search as $key => $val) { $sql .= natural_search($key, $search[$key], (($key == 'status') ? 2 : $mode_search)); } } else { + //var_dump($key,$object->fields); if (preg_match('/(_dtstart|_dtend)$/', $key) && $search[$key] != '') { $columnName=preg_replace('/(_dtstart|_dtend)$/', '', $key); if (preg_match('/^(date|timestamp|datetime)/', $object->fields[$columnName]['type'])) { @@ -437,6 +440,7 @@ foreach ($search as $key => $val) { } } } + if ($search_all) { $sql .= natural_search(array_keys($fieldstosearchall), $search_all); } @@ -618,7 +622,7 @@ foreach ($object->fields as $key => $val) { print ''; if (!empty($val['arrayofkeyval']) && is_array($val['arrayofkeyval'])) { print $form->selectarray('search_'.$key, $val['arrayofkeyval'], $search[$key], $val['notnull'], 0, 0, '', 1, 0, 0, '', 'maxwidth100', 1); - } elseif (strpos($val['type'], 'integer:') === 0) { + } elseif ((strpos($val['type'], 'integer:') === 0) || (strpos($val['type'], 'sellist:')=== 0)) { print $object->showInputField($val, $key, $search[$key], '', '', 'search_', 'maxwidth125', 1); } elseif (!preg_match('/^(date|timestamp|datetime)/', $val['type'])) { print ''; diff --git a/htdocs/eventorganization/lib/eventorganization_conferenceorbooth.lib.php b/htdocs/eventorganization/lib/eventorganization_conferenceorbooth.lib.php index 31f07493829..541915fc953 100644 --- a/htdocs/eventorganization/lib/eventorganization_conferenceorbooth.lib.php +++ b/htdocs/eventorganization/lib/eventorganization_conferenceorbooth.lib.php @@ -54,11 +54,6 @@ function conferenceorboothPrepareHead($object) $head[$h][2] = 'document'; $h++; - $head[$h][0] = dol_buildpath("/eventorganization/conferenceorbooth_agenda.php", 1).'?id='.$object->id; - $head[$h][1] = $langs->trans("Events"); - $head[$h][2] = 'agenda'; - $h++; - // Show more tabs from modules // Entries must be declared in modules descriptor with line //$this->tabs = array( diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index 21662682b09..aa616709a7d 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -284,13 +284,13 @@ if ($object->ismultientitymanaged == 1) { $sql .= " WHERE 1 = 1"; } foreach ($search as $key => $val) { - if (in_array($key, $object->fields)) { + if (array_key_exists($key, $object->fields)) { if ($key == 'status' && $search[$key] == -1) { continue; } $mode_search = (($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key])) ? 1 : 0); - if (strpos($object->fields[$key]['type'], 'integer:') === 0) { - if ($search[$key] == '-1') { + if ((strpos($object->fields[$key]['type'], 'integer:') === 0) || (strpos($object->fields[$key]['type'], 'sellist:') === 0)) { + if ($search[$key] == '-1' || $search[$key] === '0') { $search[$key] = ''; } $mode_search = 2; @@ -514,7 +514,7 @@ foreach ($object->fields as $key => $val) { print ''; if (!empty($val['arrayofkeyval']) && is_array($val['arrayofkeyval'])) { print $form->selectarray('search_'.$key, $val['arrayofkeyval'], $search[$key], $val['notnull'], 0, 0, '', 1, 0, 0, '', 'maxwidth100', 1); - } elseif (strpos($val['type'], 'integer:') === 0) { + } elseif ((strpos($val['type'], 'integer:') === 0) || (strpos($val['type'], 'sellist:')=== 0)) { print $object->showInputField($val, $key, $search[$key], '', '', 'search_', 'maxwidth125', 1); } elseif (!preg_match('/^(date|timestamp|datetime)/', $val['type'])) { print ''; diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index c85ebddadc1..137757eae1a 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -1168,6 +1168,8 @@ class Project extends CommonObject $url = DOL_URL_ROOT.'/projet/tasks.php?id='.$this->id; } elseif ($option == 'preview') { $url = DOL_URL_ROOT.'/projet/element.php?id='.$this->id; + } elseif ($option == 'eventorganization') { + $url = DOL_URL_ROOT.'/eventorganization/conferenceorbooth_list.php?projectid='.$this->id; } else { $url = DOL_URL_ROOT.'/projet/card.php?id='.$this->id; } diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index f34c33097ec..e6b381a6650 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -987,7 +987,7 @@ while ($i < min($num, $limit)) { // Project url if (!empty($arrayfields['p.ref']['checked'])) { print ''; - print $object->getNomUrl(1); + print $object->getNomUrl(1, (!empty(GETPOST('search_usage_event_organization', 'int'))?'eventorganization':'')); if ($object->hasDelay()) { print img_warning($langs->trans('Late')); } From c437b2d5c933a3144429352493821fdef760ee89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 20:28:37 +0100 Subject: [PATCH 048/180] fix php8 warning Undefined property: stdClass::$fin_validite Undefined property: stdClass::$date_cloture $dateterm, $dateclose, $late not used --- htdocs/core/boxes/box_last_ticket.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/boxes/box_last_ticket.php b/htdocs/core/boxes/box_last_ticket.php index dbc453eced6..8a0e3822448 100644 --- a/htdocs/core/boxes/box_last_ticket.php +++ b/htdocs/core/boxes/box_last_ticket.php @@ -2,7 +2,7 @@ /* Module descriptor for ticket system * Copyright (C) 2013-2016 Jean-François FERRY * Copyright (C) 2016 Christophe Battarel - * Copyright (C) 2018-2019 Frédéric France + * Copyright (C) 2018-2021 Frédéric France * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -115,9 +115,9 @@ class box_last_ticket extends ModeleBoxes while ($i < $num) { $objp = $this->db->fetch_object($resql); $datec = $this->db->jdate($objp->datec); - $dateterm = $this->db->jdate($objp->fin_validite); - $dateclose = $this->db->jdate($objp->date_cloture); - $late = ''; + //$dateterm = $this->db->jdate($objp->fin_validite); + //$dateclose = $this->db->jdate($objp->date_close); + //$late = ''; $ticket = new Ticket($this->db); $ticket->id = $objp->id; From a0e6f454ffe562c237a6b01ebbd482dd1d7f1951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 20:31:55 +0100 Subject: [PATCH 049/180] fix php8 warnings --- htdocs/core/class/commonobject.class.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index b86ea4fb650..7d0a1266579 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -12,7 +12,7 @@ * Copyright (C) 2017 ATM Consulting * Copyright (C) 2017-2019 Nicolas ZABOURI * Copyright (C) 2017 Rui Strecht - * Copyright (C) 2018-2020 Frédéric France + * Copyright (C) 2018-2021 Frédéric France * Copyright (C) 2018 Josep Lluís Amador * Copyright (C) 2021 Gauthier VERDOL * @@ -869,23 +869,23 @@ abstract class CommonObject $outdone++; } } else { // Old code to remove - if ($this->skype) { + if (!empty($this->skype)) { $outsocialnetwork .= dol_print_socialnetworks($this->skype, $this->id, $object->id, 'skype'); } $outdone++; - if ($this->jabberid) { + if (!empty($this->jabberid)) { $outsocialnetwork .= dol_print_socialnetworks($this->jabberid, $this->id, $object->id, 'jabber'); } $outdone++; - if ($this->twitter) { + if (!empty($this->twitter)) { $outsocialnetwork .= dol_print_socialnetworks($this->twitter, $this->id, $object->id, 'twitter'); } $outdone++; - if ($this->facebook) { + if (!empty($this->facebook)) { $outsocialnetwork .= dol_print_socialnetworks($this->facebook, $this->id, $object->id, 'facebook'); } $outdone++; - if ($this->linkedin) { + if (!empty($this->linkedin)) { $outsocialnetwork .= dol_print_socialnetworks($this->linkedin, $this->id, $object->id, 'linkedin'); } $outdone++; From bd021e90313d188e61b81a7843ea90db5a54d4cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 20:34:22 +0100 Subject: [PATCH 050/180] fix php8 warnings --- htdocs/ticket/index.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/ticket/index.php b/htdocs/ticket/index.php index de341f2f62d..2a3850d1e59 100644 --- a/htdocs/ticket/index.php +++ b/htdocs/ticket/index.php @@ -46,6 +46,7 @@ $msg_id = GETPOST('msg_id', 'int'); $action = GETPOST('action', 'aZ09'); +$socid = 0; if ($user->socid) { $socid = $user->socid; } From 6abe96289f460fb23eede0ed932e291589bcb4c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 20:50:14 +0100 Subject: [PATCH 051/180] fix php8 warnings --- htdocs/expensereport/list.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php index ea3a034e252..35642ead0c4 100644 --- a/htdocs/expensereport/list.php +++ b/htdocs/expensereport/list.php @@ -7,7 +7,7 @@ * Copyright (C) 2018 Ferran Marcet * Copyright (C) 2018 Charlene Benke * Copyright (C) 2019 Juanjo Menent - * Copyright (C) 2019 Frédéric France + * Copyright (C) 2019-2021 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -616,6 +616,12 @@ if ($resql) { if ($num > 0) { $i = 0; $totalarray = array(); + $totalarray['nbfield'] = 0; + $totalarray['val'] = array(); + $totalarray['val']['d.total_ht'] = 0; + $totalarray['val']['d.total_tva'] = 0; + $totalarray['val']['d.total_ttc'] = 0; + $totalarray['totalizable'] = array(); while ($i < min($num, $limit)) { $obj = $db->fetch_object($resql); From f7d43ce4fb7ecd14118baefb019096acca061b7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 20:55:59 +0100 Subject: [PATCH 052/180] fix php8 warnings --- htdocs/core/class/commonobject.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index b86ea4fb650..022862e751b 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -12,7 +12,7 @@ * Copyright (C) 2017 ATM Consulting * Copyright (C) 2017-2019 Nicolas ZABOURI * Copyright (C) 2017 Rui Strecht - * Copyright (C) 2018-2020 Frédéric France + * Copyright (C) 2018-2021 Frédéric France * Copyright (C) 2018 Josep Lluís Amador * Copyright (C) 2021 Gauthier VERDOL * @@ -738,11 +738,11 @@ abstract class CommonObject } if ($this->element == 'contact') { $contactid = $this->id; - $thirdpartyid = $object->fk_soc; + $thirdpartyid = empty($object->fk_soc) ? 0 : $object->fk_soc; } if ($this->element == 'user') { $contactid = $this->contact_id; - $thirdpartyid = $object->fk_soc; + $thirdpartyid = empty($object->fk_soc) ? 0 : $object->fk_soc; } $out = ''; From 0b1e31e7a7266f00cb3b85cfd80eb17a031778dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 20:58:35 +0100 Subject: [PATCH 053/180] fix php8 warning --- htdocs/societe/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/index.php b/htdocs/societe/index.php index 6729a984820..b76a80e1148 100644 --- a/htdocs/societe/index.php +++ b/htdocs/societe/index.php @@ -189,7 +189,7 @@ if (!empty($conf->categorie->enabled) && !empty($conf->global->CATEGORY_GRAPHSTA require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; $elementtype = 'societe'; - $thirdpartycateggraph .= '
'; + $thirdpartycateggraph = '
'; $thirdpartycateggraph .= ''; $thirdpartycateggraph .= ''; $thirdpartycateggraph .= '
'.$langs->trans("Categories").'
'; From 2d741a33f08a6323c9db8956bb78638f04dfa5ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 21:03:54 +0100 Subject: [PATCH 054/180] fix php8 warning --- htdocs/core/class/html.form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 3d208d80eb2..8b0b482f33f 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -7897,7 +7897,7 @@ class Form // Preparing gender's display if there is one $addgendertxt = ''; - if ($object->gender) { + if (!empty($object->gender)) { $addgendertxt = ' '; switch ($object->gender) { case 'man': From 50cd8274a5e3605197ef5b5db7ca1759edbe62f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 21:07:30 +0100 Subject: [PATCH 055/180] fix php8 warning --- htdocs/compta/bank/transfer.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/bank/transfer.php b/htdocs/compta/bank/transfer.php index 1d0613ead0a..0533a04c12f 100644 --- a/htdocs/compta/bank/transfer.php +++ b/htdocs/compta/bank/transfer.php @@ -5,7 +5,7 @@ * Copyright (C) 2012 Juanjo Menent * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2015 Marcos García - * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018-2021 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -33,7 +33,10 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; // Load translation files required by the page $langs->loadLangs(array("banks", "categories", "multicurrency")); - +$socid = 0; +if ($user->socid > 0) { + $socid = $user->socid; +} if (!$user->rights->banque->transfer) { accessforbidden(); } From 89219fe7fa161e61990b48e624ff0081ff5e2960 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 21:13:15 +0100 Subject: [PATCH 056/180] fix php8 warning --- htdocs/projet/graph_opportunities.inc.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/projet/graph_opportunities.inc.php b/htdocs/projet/graph_opportunities.inc.php index 7795981c4c3..cf8cc1dd34d 100644 --- a/htdocs/projet/graph_opportunities.inc.php +++ b/htdocs/projet/graph_opportunities.inc.php @@ -35,6 +35,7 @@ if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) { $num = $db->num_rows($resql); $i = 0; + $total = 0; $totalnb = 0; $totaloppnb = 0; $totalamount = 0; From dcce376f4cc9dfeea7c5325ffa5c209aa31b762a Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 21:50:43 +0100 Subject: [PATCH 057/180] Update llx_c_format_cards.sql --- htdocs/install/mysql/data/llx_c_format_cards.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/data/llx_c_format_cards.sql b/htdocs/install/mysql/data/llx_c_format_cards.sql index 77cdcd6e904..fc249e9d629 100644 --- a/htdocs/install/mysql/data/llx_c_format_cards.sql +++ b/htdocs/install/mysql/data/llx_c_format_cards.sql @@ -25,7 +25,7 @@ INSERT INTO llx_c_format_cards (rowid, code, name, paper_size, orientation, metr INSERT INTO llx_c_format_cards (rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active) VALUES (2, '5161', 'Avery-5161, WL-75WX', 'letter', 'P', 'mm', 4.44500000, 12.70000000, 2, 10, 3.96800000, 0.00000000, 101.60000000, 25.40000000, 7, 0.00000000, 0.00000000, 1); INSERT INTO llx_c_format_cards (rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active) VALUES (3, '5162', 'Avery-5162, WL-100WX', 'letter', 'P', 'mm', 3.87350000, 22.35200000, 2, 7, 4.95400000, 0.00000000, 101.60000000, 33.78100000, 8, 0.00000000, 0.00000000, 1); INSERT INTO llx_c_format_cards (rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active) VALUES (4, '5163', 'Avery-5163, WL-125WX', 'letter', 'P', 'mm', 4.57200000, 12.70000000, 2, 5, 3.55600000, 0.00000000, 101.60000000, 50.80000000, 10, 0.00000000, 0.00000000, 1); -INSERT INTO llx_c_format_cards (rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active) VALUES (5, '5164', '5164 (Letter)', 'letter', 'P', 'in', 0.14800000, 0.50000000, 2, 3, 0.20310000, 0.00000000, 4.00000000, 3.33000000, 12, 0.00000000, 0.00000000, 0); +INSERT INTO llx_c_format_cards (rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active) VALUES (5, '5164', 'Avery-5164 (inch)', 'letter', 'P', 'in', 0.14800000, 0.50000000, 2, 3, 0.20310000, 0.00000000, 4.00000000, 3.33000000, 12, 0.00000000, 0.00000000, 0); INSERT INTO llx_c_format_cards (rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active) VALUES (6, '8600', 'Avery-8600', 'letter', 'P', 'mm', 7.10000000, 19.00000000, 3, 10, 9.50000000, 3.10000000, 66.60000000, 25.40000000, 7, 0.00000000, 0.00000000, 1); INSERT INTO llx_c_format_cards (rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active) VALUES (7, '99012', 'DYMO 99012 89*36mm', 'custom', 'L', 'mm', 1.00000000, 1.00000000, 1, 1, 0.00000000, 0.00000000, 36.00000000, 89.00000000, 10, 36.00000000, 89.00000000, 1); INSERT INTO llx_c_format_cards (rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active) VALUES (8, '99014', 'DYMO 99014 101*54mm', 'custom', 'L', 'mm', 1.00000000, 1.00000000, 1, 1, 0.00000000, 0.00000000, 54.00000000, 101.00000000, 10, 54.00000000, 101.00000000, 1); From 7d9022b71d61ef2c5b1333e3aa7415166e566ebd Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Mon, 15 Mar 2021 21:56:21 +0100 Subject: [PATCH 058/180] Update llx_c_tva.sql -- EN: -- VAT - value-added tax -- Source: https://en.wikipedia.org/wiki/Value-added_tax --- htdocs/install/mysql/data/llx_c_tva.sql | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/htdocs/install/mysql/data/llx_c_tva.sql b/htdocs/install/mysql/data/llx_c_tva.sql index 7156812fb01..72746ac99ea 100644 --- a/htdocs/install/mysql/data/llx_c_tva.sql +++ b/htdocs/install/mysql/data/llx_c_tva.sql @@ -23,15 +23,21 @@ -- along with this program. If not, see . -- --- +-- -- Ne pas placer de commentaire en fin de ligne, ce fichier est parsé lors -- de l'install et tous les sigles '--' sont supprimés. -- -- --- Taux TVA --- Source des taux: http://fr.wikipedia.org/wiki/Taxe_sur_la_valeur_ajout%C3%A9e +-- FR: +-- Taux TVA +-- Source des taux: https://fr.wikipedia.org/wiki/Taxe_sur_la_valeur_ajout%C3%A9e -- +-- EN: +-- VAT - value-added tax +-- Source: https://en.wikipedia.org/wiki/Value-added_tax +-- + delete from llx_c_tva; From 4714e03848e639fda29580b30c8d062eb9cf3680 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 15 Mar 2021 22:37:51 +0100 Subject: [PATCH 059/180] Update conferenceorbooth_list.php --- htdocs/eventorganization/conferenceorbooth_list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/eventorganization/conferenceorbooth_list.php b/htdocs/eventorganization/conferenceorbooth_list.php index 374ea25f68c..7497ee4a51d 100644 --- a/htdocs/eventorganization/conferenceorbooth_list.php +++ b/htdocs/eventorganization/conferenceorbooth_list.php @@ -386,7 +386,7 @@ $sql .= $object->getFieldList('t'); // Add fields from extrafields if (!empty($extrafields->attributes[$object->table_element]['label'])) { foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { - $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? "ef.".$key.' as options_'.$key.', ' : ''); + $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key.', ' : ''); } } // Add fields from hooks @@ -396,7 +396,7 @@ $sql .= preg_replace('/^,/', '', $hookmanager->resPrint); $sql = preg_replace('/,\s*$/', '', $sql); $sql .= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t"; if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { - $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.id = ef.fk_object)"; } $sql .= " INNER JOIN ".MAIN_DB_PREFIX."c_actioncomm as cact ON cact.id=t.fk_action AND cact.module LIKE '%@eventorganization'"; // Add table from hooks From 4fd24c68553e5392ac357287ce6750b8ff59ff9f Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 16 Mar 2021 04:04:18 +0100 Subject: [PATCH 060/180] Translation "Generated documents" --- htdocs/adherents/card.php | 2 +- htdocs/adherents/subscription/card.php | 2 +- htdocs/comm/action/card.php | 2 +- htdocs/comm/propal/card.php | 2 +- htdocs/compta/facture/card.php | 2 +- htdocs/contrat/card.php | 4 ++-- htdocs/don/card.php | 2 +- htdocs/fourn/paiement/card.php | 3 +-- htdocs/product/card.php | 2 +- htdocs/product/stock/movement_card.php | 2 +- htdocs/product/stock/productlot_card.php | 2 +- htdocs/projet/tasks/task.php | 2 +- htdocs/societe/canvas/company/tpl/card_view.tpl.php | 2 +- htdocs/societe/canvas/individual/tpl/card_view.tpl.php | 2 +- htdocs/societe/card.php | 2 +- htdocs/societe/paymentmodes.php | 2 +- htdocs/supplier_proposal/card.php | 2 +- htdocs/user/card.php | 2 +- htdocs/user/group/card.php | 2 +- 19 files changed, 20 insertions(+), 21 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 7e72058092a..1286e19b416 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -1818,7 +1818,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print '
'; print ''; // ancre - // Documents generes + // Generated documents $filename = dol_sanitizeFileName($object->ref); //$filename = 'tmp_cards.php'; //$filedir = $conf->adherent->dir_output . '/' . get_exdir($object->id, 2, 0, 0, $object, 'member') . dol_sanitizeFileName($object->ref); diff --git a/htdocs/adherents/subscription/card.php b/htdocs/adherents/subscription/card.php index 4b2b4861c1c..72d47598374 100644 --- a/htdocs/adherents/subscription/card.php +++ b/htdocs/adherents/subscription/card.php @@ -373,7 +373,7 @@ if ($rowid && $action != 'edit') { print '
'; print ''; // ancre - // Documents generes + // Generated documents /* $filename = dol_sanitizeFileName($object->ref); $filedir = $conf->facture->dir_output . '/' . dol_sanitizeFileName($object->ref); diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index 066001f6aa7..634f85ce84a 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -2161,7 +2161,7 @@ if ($id > 0) { print ''; // ancre /* - * Documents generes + * Generated documents */ $filedir = $conf->agenda->multidir_output[$conf->entity].'/'.$object->id; diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index a206e61064f..b78d8a08ad1 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -2602,7 +2602,7 @@ if ($action == 'create') { print '
'; print ''; // ancre /* - * Documents generes + * Generated documents */ $objref = dol_sanitizeFileName($object->ref); $filedir = $conf->propal->multidir_output[$object->entity]."/".dol_sanitizeFileName($object->ref); diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 8c291a0839b..0433d9eb746 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -5459,7 +5459,7 @@ if ($action == 'create') { print '
'; print ''; // ancre - // Documents generes + // Generated documents $filename = dol_sanitizeFileName($object->ref); $filedir = $conf->facture->multidir_output[$object->entity].'/'.dol_sanitizeFileName($object->ref); $urlsource = $_SERVER['PHP_SELF'].'?facid='.$object->id; diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 51661cc5b82..de25a2ae136 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -2103,8 +2103,8 @@ if ($action == 'create') { print '
'; /* - * Documents generes - */ + * Generated documents + */ $filename = dol_sanitizeFileName($object->ref); $filedir = $conf->contrat->multidir_output[$object->entity]."/".dol_sanitizeFileName($object->ref); $urlsource = $_SERVER["PHP_SELF"]."?id=".$object->id; diff --git a/htdocs/don/card.php b/htdocs/don/card.php index 6fe0be1b995..052d0bc70a2 100644 --- a/htdocs/don/card.php +++ b/htdocs/don/card.php @@ -857,7 +857,7 @@ if (!empty($id) && $action != 'edit') { print '
'; /* - * Documents generes + * Generated documents */ $filename = dol_sanitizeFileName($object->id); $filedir = $conf->don->dir_output."/".dol_sanitizeFileName($object->id); diff --git a/htdocs/fourn/paiement/card.php b/htdocs/fourn/paiement/card.php index 66981436d7a..f061385c5bb 100644 --- a/htdocs/fourn/paiement/card.php +++ b/htdocs/fourn/paiement/card.php @@ -356,8 +356,7 @@ if ($result > 0) { print '
'; - // Documents generes - + // Generated documents include_once DOL_DOCUMENT_ROOT.'/core/modules/supplier_payment/modules_supplier_payment.php'; $modellist = ModelePDFSuppliersPayments::liste_modeles($db); if (is_array($modellist)) { diff --git a/htdocs/product/card.php b/htdocs/product/card.php index ed0a55ffa2d..5c726e261e2 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -2407,7 +2407,7 @@ if (!empty($conf->global->PRODUCT_ADD_FORM_ADD_TO) && $object->id && ($action == /* - * Documents generes + * Generated documents */ if ($action != 'create' && $action != 'edit' && $action != 'delete') { diff --git a/htdocs/product/stock/movement_card.php b/htdocs/product/stock/movement_card.php index 5107a558288..37e8ead4b0d 100644 --- a/htdocs/product/stock/movement_card.php +++ b/htdocs/product/stock/movement_card.php @@ -1176,7 +1176,7 @@ if ($resql) { /* - * Documents generes + * Generated documents */ //Area for doc and last events of warehouse are stored on the main card of warehouse $modulepart = 'movement'; diff --git a/htdocs/product/stock/productlot_card.php b/htdocs/product/stock/productlot_card.php index 32c7f7c6ee3..94ecdc8e13a 100644 --- a/htdocs/product/stock/productlot_card.php +++ b/htdocs/product/stock/productlot_card.php @@ -470,7 +470,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea /* - * Documents generes + * Generated documents */ if ($action != 'presend') { diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php index 7895838e18e..77b015d5819 100644 --- a/htdocs/projet/tasks/task.php +++ b/htdocs/projet/tasks/task.php @@ -617,7 +617,7 @@ if ($id > 0 || !empty($ref)) { print ''; // ancre /* - * Documents generes + * Generated documents */ $filename = dol_sanitizeFileName($projectstatic->ref)."/".dol_sanitizeFileName($object->ref); $filedir = $conf->projet->dir_output."/".dol_sanitizeFileName($projectstatic->ref)."/".dol_sanitizeFileName($object->ref); diff --git a/htdocs/societe/canvas/company/tpl/card_view.tpl.php b/htdocs/societe/canvas/company/tpl/card_view.tpl.php index 86f95cb8372..8169a6ca22f 100644 --- a/htdocs/societe/canvas/company/tpl/card_view.tpl.php +++ b/htdocs/societe/canvas/company/tpl/card_view.tpl.php @@ -279,7 +279,7 @@ for ($i = 1; $i <= 4; $i++) { societe->multidir_output[$this->control->tpl['entity']].'/'.$socid; $urlsource = $_SERVER["PHP_SELF"]."?socid=".$socid; diff --git a/htdocs/societe/canvas/individual/tpl/card_view.tpl.php b/htdocs/societe/canvas/individual/tpl/card_view.tpl.php index c7b6e6e70a4..f058d38cd7c 100644 --- a/htdocs/societe/canvas/individual/tpl/card_view.tpl.php +++ b/htdocs/societe/canvas/individual/tpl/card_view.tpl.php @@ -205,7 +205,7 @@ if ($this->control->tpl['action_delete']) {
societe->multidir_output[$this->control->tpl['entity']].'/'.$socid; $urlsource = $_SERVER["PHP_SELF"]."?socid=".$socid; diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index d69a602c900..e3460579d16 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -2875,7 +2875,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print ''; // ancre /* - * Documents generes + * Generated documents */ $filedir = $conf->societe->multidir_output[$object->entity].'/'.$object->id; $urlsource = $_SERVER["PHP_SELF"]."?socid=".$object->id; diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 7050f6df48f..8c321b1386d 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -1479,7 +1479,7 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' print ''; // ancre /* - * Documents generes + * Generated documents */ $filedir = $conf->societe->multidir_output[$object->entity].'/'.$object->id; $urlsource = $_SERVER["PHP_SELF"]."?socid=".$object->id; diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index ebd126e377f..e928ba225f2 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -1894,7 +1894,7 @@ if ($action == 'create') { print '
'; /* - * Documents generes + * Generated documents */ $filename = dol_sanitizeFileName($object->ref); $filedir = $conf->supplier_proposal->dir_output."/".dol_sanitizeFileName($object->ref); diff --git a/htdocs/user/card.php b/htdocs/user/card.php index c1abbc2e4ae..538d6c6f101 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -2673,7 +2673,7 @@ if ($action == 'create' || $action == 'adduserldap') { if ($action != 'edit' && $action != 'presend') { print '
'; /* - * Documents generes + * Generated documents */ $filename = dol_sanitizeFileName($object->ref); $filedir = $conf->user->dir_output."/".dol_sanitizeFileName($object->ref); diff --git a/htdocs/user/group/card.php b/htdocs/user/group/card.php index 599df7aa2ee..ab662196249 100644 --- a/htdocs/user/group/card.php +++ b/htdocs/user/group/card.php @@ -470,7 +470,7 @@ if ($action == 'create') { print '
'; /* - * Documents generes + * Generated documents */ $filename = dol_sanitizeFileName($object->ref); From f8703a0691321ea8118f54ebf35a51e4d037bbf9 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 16 Mar 2021 04:04:33 +0100 Subject: [PATCH 061/180] Translation "Generated documents" --- htdocs/fourn/facture/card.php | 2 +- htdocs/projet/card.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index 1f647309bda..d22006a52d0 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -3241,7 +3241,7 @@ if ($action == 'create') { print '
'; /* - * Documents generes + * Generated documents */ $ref = dol_sanitizeFileName($object->ref); $subdir = get_exdir($object->id, 2, 0, 0, $object, 'invoice_supplier').$ref; diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index af35f691cd0..8282e73e3b9 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -1325,7 +1325,7 @@ if ($action == 'create' && $user->rights->projet->creer) { print ''; // ancre /* - * Documents generes + * Generated documents */ $filename = dol_sanitizeFileName($object->ref); $filedir = $conf->projet->dir_output."/".dol_sanitizeFileName($object->ref); From 03481a019740a5900da4ee4b32b00cbb22f60051 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 16 Mar 2021 04:22:43 +0100 Subject: [PATCH 062/180] Uniformize translation --- htdocs/accountancy/admin/fiscalyear_card.php | 6 +++--- htdocs/adherents/ldap.php | 3 +-- htdocs/adherents/subscription.php | 2 +- htdocs/adherents/type_translation.php | 9 +++------ htdocs/categories/photos.php | 9 +++------ htdocs/compta/bank/various_payment/card.php | 2 +- htdocs/compta/deplacement/card.php | 3 +-- htdocs/compta/facture/card-rec.php | 4 ++-- htdocs/compta/tva/card.php | 2 +- htdocs/expensereport/card.php | 3 +-- htdocs/fourn/card.php | 2 +- htdocs/hrm/establishment/card.php | 5 ++--- htdocs/opensurvey/card.php | 2 +- htdocs/product/admin/dynamic_prices.php | 8 ++++++-- htdocs/product/card.php | 8 +++----- htdocs/product/price.php | 9 +++------ htdocs/product/stock/card.php | 9 +++------ htdocs/product/stock/movement_card.php | 9 +++------ htdocs/societe/price.php | 9 +++------ htdocs/user/group/card.php | 3 +-- htdocs/user/group/ldap.php | 3 +-- 21 files changed, 44 insertions(+), 66 deletions(-) diff --git a/htdocs/accountancy/admin/fiscalyear_card.php b/htdocs/accountancy/admin/fiscalyear_card.php index aef52a91236..7fdd7c19e32 100644 --- a/htdocs/accountancy/admin/fiscalyear_card.php +++ b/htdocs/accountancy/admin/fiscalyear_card.php @@ -298,10 +298,10 @@ if ($action == 'create') { print dol_get_fiche_end(); + /* + * Action bar + */ if (!empty($user->rights->accounting->fiscalyear->write)) { - /* - * Barre d'actions - */ print '
'; print ''.$langs->trans('Modify').''; diff --git a/htdocs/adherents/ldap.php b/htdocs/adherents/ldap.php index 843ca08a5df..89baf2f5ec5 100644 --- a/htdocs/adherents/ldap.php +++ b/htdocs/adherents/ldap.php @@ -131,9 +131,8 @@ print '
'; print dol_get_fiche_end(); /* - * Barre d'actions + * Action bar */ - print '
'; if (!empty($conf->global->LDAP_MEMBER_ACTIVE) && $conf->global->LDAP_MEMBER_ACTIVE != 'ldap2dolibarr') { diff --git a/htdocs/adherents/subscription.php b/htdocs/adherents/subscription.php index b48328a17e8..79f1a4da036 100644 --- a/htdocs/adherents/subscription.php +++ b/htdocs/adherents/subscription.php @@ -639,7 +639,7 @@ if ($rowid > 0) { /* - * Action buttons + * Action bar */ // Button to create a new subscription if member no draft neither resiliated diff --git a/htdocs/adherents/type_translation.php b/htdocs/adherents/type_translation.php index 56dfc05e895..0ce4b2314b4 100644 --- a/htdocs/adherents/type_translation.php +++ b/htdocs/adherents/type_translation.php @@ -175,12 +175,9 @@ print dol_get_fiche_end(); -/* ************************************************************************** */ -/* */ -/* Barre d'action */ -/* */ -/* ************************************************************************** */ - +/* + * Action bar + */ print "\n
\n"; if ($action == '') { diff --git a/htdocs/categories/photos.php b/htdocs/categories/photos.php index c7e574939ff..e30067e8815 100644 --- a/htdocs/categories/photos.php +++ b/htdocs/categories/photos.php @@ -153,12 +153,9 @@ if ($object->id) { - /* ************************************************************************** */ - /* */ - /* Barre d'action */ - /* */ - /* ************************************************************************** */ - + /* + * Action bar + */ print '
'."\n"; if ($action != 'ajout_photo' && $user->rights->categorie->creer) { diff --git a/htdocs/compta/bank/various_payment/card.php b/htdocs/compta/bank/various_payment/card.php index d19ccbed908..2b4a68bec90 100644 --- a/htdocs/compta/bank/various_payment/card.php +++ b/htdocs/compta/bank/various_payment/card.php @@ -665,7 +665,7 @@ if ($id) { /* - * Action buttons + * Action bar */ print '
'."\n"; diff --git a/htdocs/compta/deplacement/card.php b/htdocs/compta/deplacement/card.php index 1d294df8cff..3d4693f8c7b 100644 --- a/htdocs/compta/deplacement/card.php +++ b/htdocs/compta/deplacement/card.php @@ -463,9 +463,8 @@ if ($action == 'create') { print '
'; /* - * Barre d'actions + * Action bar */ - print '
'; if ($object->statut < Deplacement::STATUS_REFUNDED) { // if not refunded diff --git a/htdocs/compta/facture/card-rec.php b/htdocs/compta/facture/card-rec.php index 1978a6115b5..c1c0f83cecb 100644 --- a/htdocs/compta/facture/card-rec.php +++ b/htdocs/compta/facture/card-rec.php @@ -1634,8 +1634,8 @@ if ($action == 'create') { print dol_get_fiche_end(); - /** - * Barre d'actions + /* + * Action bar */ print '
'; diff --git a/htdocs/compta/tva/card.php b/htdocs/compta/tva/card.php index 40261cb7f05..71e511397b6 100755 --- a/htdocs/compta/tva/card.php +++ b/htdocs/compta/tva/card.php @@ -722,7 +722,7 @@ if ($id) { } /* - * Action buttons + * Action bar */ print "
\n"; if ($action != 'edit') { diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 70db8856327..232351b68a9 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2485,9 +2485,8 @@ if ($action == 'create') { } /* - * Barre d'actions + * Action bar */ - print '
'; if ($action != 'create' && $action != 'edit') { diff --git a/htdocs/fourn/card.php b/htdocs/fourn/card.php index 3b9a0df399b..6db5ba5cad3 100644 --- a/htdocs/fourn/card.php +++ b/htdocs/fourn/card.php @@ -808,7 +808,7 @@ if ($object->id > 0) { /* - * Barre d'actions + * Action bar */ print '
'; diff --git a/htdocs/hrm/establishment/card.php b/htdocs/hrm/establishment/card.php index 6c336d230f0..a46ebfa28f3 100644 --- a/htdocs/hrm/establishment/card.php +++ b/htdocs/hrm/establishment/card.php @@ -412,9 +412,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print dol_get_fiche_end(); /* - * Barre d'actions - */ - + * Action bar + */ print '
'; print ''.$langs->trans('Modify').''; print ''.$langs->trans('Delete').''; diff --git a/htdocs/opensurvey/card.php b/htdocs/opensurvey/card.php index bbd930b013f..5728edb80ff 100644 --- a/htdocs/opensurvey/card.php +++ b/htdocs/opensurvey/card.php @@ -354,7 +354,7 @@ print ''."\n"; /* - * Barre d'actions + * Action bar */ print '
'; diff --git a/htdocs/product/admin/dynamic_prices.php b/htdocs/product/admin/dynamic_prices.php index 7a92d9a651b..fdd42bd34d7 100644 --- a/htdocs/product/admin/dynamic_prices.php +++ b/htdocs/product/admin/dynamic_prices.php @@ -189,7 +189,9 @@ if ($action != 'create_updater' && $action != 'edit_updater') { print '
'; if (empty($action)) { - //Action Buttons + /* + * Action bar + */ print ''; @@ -277,7 +279,9 @@ if ($action != 'create_variable' && $action != 'edit_variable') { print ''; if (empty($action)) { - //Action Buttons + /* + * Action bar + */ print ''; diff --git a/htdocs/product/card.php b/htdocs/product/card.php index ed0a55ffa2d..957060d32c9 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -2261,11 +2261,9 @@ if (empty($reshook)) { // Print form confirm print $formconfirm; -/* ************************************************************************** */ -/* */ -/* Barre d'action */ -/* */ -/* ************************************************************************** */ +/* + * Action bar + */ if ($action != 'create' && $action != 'edit') { print "\n".'
'."\n"; diff --git a/htdocs/product/price.php b/htdocs/product/price.php index 2b8561e7d75..015b061119b 100644 --- a/htdocs/product/price.php +++ b/htdocs/product/price.php @@ -1096,12 +1096,9 @@ print dol_get_fiche_end(); -/* ************************************************************************** */ -/* */ -/* Barre d'action */ -/* */ -/* ************************************************************************** */ - +/* + * Action bar + */ if (!$action || $action == 'delete' || $action == 'showlog_customer_price' || $action == 'showlog_default_price' || $action == 'add_customer_price' || $action == 'activate_price_by_qty' || $action == 'disable_price_by_qty') { print "\n".'
'."\n"; diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index 252cccd90ab..294c31d49ba 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -478,12 +478,9 @@ if ($action == 'create') { print dol_get_fiche_end(); - /* ************************************************************************** */ - /* */ - /* Barre d'action */ - /* */ - /* ************************************************************************** */ - + /* + * Action bar + */ print "
\n"; $parameters = array(); diff --git a/htdocs/product/stock/movement_card.php b/htdocs/product/stock/movement_card.php index 5107a558288..7a37c6666ae 100644 --- a/htdocs/product/stock/movement_card.php +++ b/htdocs/product/stock/movement_card.php @@ -664,12 +664,9 @@ if ($resql) { } - /* ************************************************************************** */ - /* */ - /* Barre d'action */ - /* */ - /* ************************************************************************** */ - + /* + * Action bar + */ if ((empty($action) || $action == 'list') && $id > 0) { print "
\n"; diff --git a/htdocs/societe/price.php b/htdocs/societe/price.php index d7d373f721a..cc056896414 100644 --- a/htdocs/societe/price.php +++ b/htdocs/societe/price.php @@ -527,12 +527,9 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) { } else { // View mode - /* ************************************************************************** */ - /* */ - /* Barre d'action */ - /* */ - /* ************************************************************************** */ - + /* + * Action bar + */ print "\n".'
'."\n"; if ($user->rights->produit->creer || $user->rights->service->creer) { diff --git a/htdocs/user/group/card.php b/htdocs/user/group/card.php index 599df7aa2ee..6c98bf5923d 100644 --- a/htdocs/user/group/card.php +++ b/htdocs/user/group/card.php @@ -366,9 +366,8 @@ if ($action == 'create') { /* - * Barre d'actions + * Action bar */ - print '
'; $parameters = array(); diff --git a/htdocs/user/group/ldap.php b/htdocs/user/group/ldap.php index 59728f4c982..dcefbf4a413 100644 --- a/htdocs/user/group/ldap.php +++ b/htdocs/user/group/ldap.php @@ -143,9 +143,8 @@ print dol_get_fiche_end(); /* - * Barre d'actions + * Action bar */ - print '
'; if ($conf->global->LDAP_SYNCHRO_ACTIVE == 'dolibarr2ldap') { From 6960f0dc25517bcdff18cf387f63c7c46a68f5f3 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 16 Mar 2021 04:22:55 +0100 Subject: [PATCH 063/180] Uniformize translation --- htdocs/adherents/subscription/card.php | 3 +-- htdocs/categories/traduction.php | 9 +++------ htdocs/comm/action/card.php | 3 +-- htdocs/comm/card.php | 3 +-- htdocs/compta/bank/card.php | 2 +- htdocs/compta/localtax/card.php | 2 +- htdocs/compta/prelevement/line.php | 9 +++------ htdocs/contact/card.php | 4 +++- htdocs/contact/ldap.php | 3 +-- htdocs/contact/perso.php | 4 +++- htdocs/exports/export.php | 7 +++---- htdocs/fichinter/card-rec.php | 4 ++-- htdocs/imports/import.php | 2 +- htdocs/product/stock/movement_list.php | 9 +++------ htdocs/product/traduction.php | 9 +++------ htdocs/salaries/card.php | 5 +++-- htdocs/user/clicktodial.php | 2 +- htdocs/user/ldap.php | 3 +-- 18 files changed, 35 insertions(+), 48 deletions(-) diff --git a/htdocs/adherents/subscription/card.php b/htdocs/adherents/subscription/card.php index 4b2b4861c1c..96a41c33413 100644 --- a/htdocs/adherents/subscription/card.php +++ b/htdocs/adherents/subscription/card.php @@ -349,8 +349,7 @@ if ($rowid && $action != 'edit') { print dol_get_fiche_end(); /* - * Barre d'actions - * + * Action bar */ print '
'; diff --git a/htdocs/categories/traduction.php b/htdocs/categories/traduction.php index de59aca376d..cd5d7ad8214 100644 --- a/htdocs/categories/traduction.php +++ b/htdocs/categories/traduction.php @@ -224,12 +224,9 @@ print dol_get_fiche_end(); -/* ************************************************************************** */ -/* */ -/* Barre d'action */ -/* */ -/* ************************************************************************** */ - +/* + * Action bar + */ print "\n
\n"; if ($action == '') { diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index 066001f6aa7..8feb526cd23 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -2121,9 +2121,8 @@ if ($id > 0) { /* - * Barre d'actions + * Action bar */ - print '
'; $parameters = array(); diff --git a/htdocs/comm/card.php b/htdocs/comm/card.php index 07ab4f797de..64633bdd04d 100644 --- a/htdocs/comm/card.php +++ b/htdocs/comm/card.php @@ -1334,9 +1334,8 @@ if ($object->id > 0) { /* - * Barre d'actions + * Action bar */ - print '
'; $parameters = array(); diff --git a/htdocs/compta/bank/card.php b/htdocs/compta/bank/card.php index 74791c14898..73f4bcbe7f4 100644 --- a/htdocs/compta/bank/card.php +++ b/htdocs/compta/bank/card.php @@ -777,7 +777,7 @@ if ($action == 'create') { print dol_get_fiche_end(); /* - * Barre d'actions + * Action bar */ print '
'; diff --git a/htdocs/compta/localtax/card.php b/htdocs/compta/localtax/card.php index ee7dbb5e3f4..d4091a6df90 100644 --- a/htdocs/compta/localtax/card.php +++ b/htdocs/compta/localtax/card.php @@ -266,7 +266,7 @@ if ($id) { /* - * Action buttons + * Action bar */ print "
\n"; if ($object->rappro == 0) { diff --git a/htdocs/compta/prelevement/line.php b/htdocs/compta/prelevement/line.php index 4e55a78314f..68ca3795fe3 100644 --- a/htdocs/compta/prelevement/line.php +++ b/htdocs/compta/prelevement/line.php @@ -225,12 +225,9 @@ if ($id) { print ''; } - /* ************************************************************************** */ - /* */ - /* Barre d'action */ - /* */ - /* ************************************************************************** */ - + /* + * Action bar + */ print "
"; if ($action == '') { diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index e75908adc10..0ee4cb10637 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -1441,7 +1441,9 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print dol_get_fiche_end(); - // Barre d'actions + /* + * Action bar + */ print '
'; $parameters = array(); diff --git a/htdocs/contact/ldap.php b/htdocs/contact/ldap.php index 7f84393c858..6677a7b17d7 100644 --- a/htdocs/contact/ldap.php +++ b/htdocs/contact/ldap.php @@ -132,9 +132,8 @@ print dol_get_fiche_end(); /* - * Barre d'actions + * Action bar */ - print '
'; if (!empty($conf->global->LDAP_CONTACT_ACTIVE) && $conf->global->LDAP_CONTACT_ACTIVE != 'ldap2dolibarr') { diff --git a/htdocs/contact/perso.php b/htdocs/contact/perso.php index d313712a6a6..5c7356fae00 100644 --- a/htdocs/contact/perso.php +++ b/htdocs/contact/perso.php @@ -308,7 +308,9 @@ if ($action == 'edit') { if ($action != 'edit') { - // Barre d'actions + /* + * Action bar + */ if ($user->socid == 0) { print '
'; diff --git a/htdocs/exports/export.php b/htdocs/exports/export.php index f1099f9692f..dc23a8ab362 100644 --- a/htdocs/exports/export.php +++ b/htdocs/exports/export.php @@ -619,7 +619,7 @@ if ($step == 2 && $datatoexport) { print '
'; /* - * Barre d'action + * Action bar */ print '
'; @@ -793,7 +793,7 @@ if ($step == 3 && $datatoexport) { print '
'; /* - * Barre d'action + * Action bar */ print '
'; // il n'est pas obligatoire de filtrer les champs @@ -974,8 +974,7 @@ if ($step == 4 && $datatoexport) { print '
'; /* - * Barre d'action - * + * Action bar */ print '
'; diff --git a/htdocs/fichinter/card-rec.php b/htdocs/fichinter/card-rec.php index e87d94fb506..e687169fe50 100644 --- a/htdocs/fichinter/card-rec.php +++ b/htdocs/fichinter/card-rec.php @@ -736,8 +736,8 @@ if ($action == 'create') { } print ''; - /** - * Barre d'actions + /* + * Action bar */ print '
'; diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php index dff1940c042..79b54c59011 100644 --- a/htdocs/imports/import.php +++ b/htdocs/imports/import.php @@ -1203,7 +1203,7 @@ if ($step == 4 && $datatoimport) { } /* - * Barre d'action + * Action bar */ print '
'; diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index 38c49a44f4c..7c2e2df67e5 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -731,12 +731,9 @@ if ($resql) { } - /* ************************************************************************** */ - /* */ - /* Barre d'action */ - /* */ - /* ************************************************************************** */ - + /* + * Action bar + */ if ((empty($action) || $action == 'list') && $id > 0) { print "
\n"; diff --git a/htdocs/product/traduction.php b/htdocs/product/traduction.php index 67c2dccab71..45b45136410 100644 --- a/htdocs/product/traduction.php +++ b/htdocs/product/traduction.php @@ -196,12 +196,9 @@ print dol_get_fiche_end(); -/* ************************************************************************** */ -/* */ -/* Barre d'action */ -/* */ -/* ************************************************************************** */ - +/* + * Action bar + */ print "\n".'
'."\n"; if ($action == '') { diff --git a/htdocs/salaries/card.php b/htdocs/salaries/card.php index d8e7e4d4009..775221caeb2 100755 --- a/htdocs/salaries/card.php +++ b/htdocs/salaries/card.php @@ -882,8 +882,9 @@ if ($id) { print dol_get_fiche_end(); - // Action buttons - + /* + * Action bar + */ print '
'."\n"; if ($action != 'edit') { // Reopen diff --git a/htdocs/user/clicktodial.php b/htdocs/user/clicktodial.php index 06db482094d..0a9a65a2852 100644 --- a/htdocs/user/clicktodial.php +++ b/htdocs/user/clicktodial.php @@ -193,7 +193,7 @@ if ($id > 0) { print ''; /* - * Barre d'actions + * Action bar */ print '
'; diff --git a/htdocs/user/ldap.php b/htdocs/user/ldap.php index 5fbd29e9af9..e6cee6f6f73 100644 --- a/htdocs/user/ldap.php +++ b/htdocs/user/ldap.php @@ -148,9 +148,8 @@ print '
'; print dol_get_fiche_end(); /* - * Barre d'actions + * Action bar */ - print '
'; if ($conf->global->LDAP_SYNCHRO_ACTIVE == 'dolibarr2ldap') { From 9d8254eff44c1a5a93174387c198da2ef8056df7 Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Tue, 16 Mar 2021 09:59:45 +0100 Subject: [PATCH 064/180] fix price output in commoncard --- htdocs/core/tpl/commonfields_add.tpl.php | 2 ++ htdocs/core/tpl/commonfields_edit.tpl.php | 2 ++ 2 files changed, 4 insertions(+) diff --git a/htdocs/core/tpl/commonfields_add.tpl.php b/htdocs/core/tpl/commonfields_add.tpl.php index 407859037d7..639be537dba 100644 --- a/htdocs/core/tpl/commonfields_add.tpl.php +++ b/htdocs/core/tpl/commonfields_add.tpl.php @@ -77,6 +77,8 @@ foreach ($object->fields as $key => $val) { $value = dol_mktime(GETPOST($key.'hour', 'int'), GETPOST($key.'min', 'int'), 0, GETPOST($key.'month', 'int'), GETPOST($key.'day', 'int'), GETPOST($key.'year', 'int')); } elseif ($val['type'] == 'boolean') { $value = (GETPOST($key) == 'on' ? 1 : 0); + } elseif ($val['type'] == 'price') { + $value = price2num(GETPOST($key)); } else { $value = GETPOST($key, 'alphanohtml'); } diff --git a/htdocs/core/tpl/commonfields_edit.tpl.php b/htdocs/core/tpl/commonfields_edit.tpl.php index a2c6868472f..65b8b566180 100644 --- a/htdocs/core/tpl/commonfields_edit.tpl.php +++ b/htdocs/core/tpl/commonfields_edit.tpl.php @@ -77,6 +77,8 @@ foreach ($object->fields as $key => $val) { $check = 'restricthtml'; } $value = GETPOSTISSET($key) ? GETPOST($key, $check) : $object->$key; + } elseif ($val['type'] == 'price') { + $value = price2num(GETPOST($key)); } else { $value = GETPOSTISSET($key) ? GETPOST($key, 'alpha') : $object->$key; } From 39849de96e97d1617217c2ff9910689bca838f4f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Mar 2021 10:19:56 +0100 Subject: [PATCH 065/180] Look and feel v14 --- .../fourn/class/fournisseur.commande.class.php | 2 +- .../fourn/class/fournisseur.product.class.php | 2 +- htdocs/fourn/commande/card.php | 6 +++--- htdocs/product/fournisseurs.php | 12 ++++++------ htdocs/supplier_proposal/card.php | 17 +++++++++-------- htdocs/theme/eldy/global.inc.php | 1 + 6 files changed, 21 insertions(+), 19 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index b3500a4e45d..1c9ed333fae 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -1316,7 +1316,7 @@ class CommandeFournisseur extends CommonOrder $sql .= ", multicurrency_tx"; $sql .= ") "; $sql .= " VALUES ("; - $sql .= "''"; + $sql .= "'(PROV)'"; $sql .= ", '".$this->db->escape($this->ref_supplier)."'"; $sql .= ", '".$this->db->escape($this->note_private)."'"; $sql .= ", '".$this->db->escape($this->note_public)."'"; diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php index 23a05ea0844..b124817bf9f 100644 --- a/htdocs/fourn/class/fournisseur.product.class.php +++ b/htdocs/fourn/class/fournisseur.product.class.php @@ -1057,7 +1057,7 @@ class ProductFournisseur extends Product //$out .= ''.$langs->trans("QtyMin").''; $out .= ''.$langs->trans("User").''; foreach ($productFournLogList as $productFournLog) { - $out .= ''.dol_print_date($productFournLog['datec'], 'dayhour', 'tzuser').''; + $out .= ''.dol_print_date($productFournLog['datec'], 'dayhour', 'tzuser').''; $out .= ''.price($productFournLog['price'], 0, $langs, 1, -1, -1, $conf->currency); if ($productFournLog['multicurrency_code'] != $conf->currency) { $out .= ' ('.price($productFournLog['multicurrency_price'], 0, $langs, 1, -1, -1, $productFournLog['multicurrency_code']).')'; diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 05a4a78e4dc..fe854c72d48 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -1146,8 +1146,8 @@ if (empty($reshook)) { // Creation commande $object->ref_supplier = GETPOST('refsupplier'); $object->socid = $socid; - $object->cond_reglement_id = GETPOST('cond_reglement_id'); - $object->mode_reglement_id = GETPOST('mode_reglement_id'); + $object->cond_reglement_id = GETPOST('cond_reglement_id', 'int'); + $object->mode_reglement_id = GETPOST('mode_reglement_id', 'int'); $object->fk_account = GETPOST('fk_account', 'int'); $object->note_private = GETPOST('note_private', 'restricthtml'); $object->note_public = GETPOST('note_public', 'restricthtml'); @@ -1157,7 +1157,7 @@ if (empty($reshook)) { $object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha'); $object->multicurrency_tx = GETPOST('originmulticurrency_tx', 'int'); - $object->fk_project = GETPOST('projectid'); + $object->fk_project = GETPOST('projectid', 'int'); // Fill array 'array_options' with data from add form if (!$error) { diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index d5d3128071a..371713f0250 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -227,17 +227,17 @@ if (empty($reshook)) { } } if (!empty($conf->multicurrency->enabled)) { - if (empty($_POST["multicurrency_code"])) { + if (!GETPOST("multicurrency_code")) { $error++; $langs->load("errors"); setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Currency")), null, 'errors'); } - if (price2num($_POST["multicurrency_tx"]) <= 0 || $_POST["multicurrency_tx"] == '') { + if (price2num(GETPOST("multicurrency_tx")) <= 0 || GETPOST("multicurrency_tx") == '') { $error++; $langs->load("errors"); setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("CurrencyRate")), null, 'errors'); } - if (price2num($_POST["multicurrency_price"]) < 0 || $_POST["multicurrency_price"] == '') { + if (price2num(GETPOST("multicurrency_price")) < 0 || GETPOST("multicurrency_price") == '') { $error++; $langs->load("errors"); setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("PriceCurrency")), null, 'errors'); @@ -1081,7 +1081,7 @@ END; // Currency if (!empty($conf->multicurrency->enabled)) { - print ''; + print ''; print $productfourn->fourn_multicurrency_code ? currency_name($productfourn->fourn_multicurrency_code) : ''; print ''; } @@ -1130,9 +1130,9 @@ END; print ''; } - // Date + // Date modification if (!empty($arrayfields['pfp.tms']['checked'])) { - print ''; + print ''; print dol_print_date(($productfourn->fourn_date_modification ? $productfourn->fourn_date_modification : $productfourn->date_modification), "dayhour"); print ''; } diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index ebd126e377f..8cdc130a373 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -1786,30 +1786,31 @@ if ($action == 'create') { if ($action == 'statut') { // Form to set proposal accepted/refused - $form_close = '
'; + $form_close = ''; $form_close .= ''; $form_close .= ''; if (!empty($conf->global->SUPPLIER_PROPOSAL_UPDATE_PRICE_ON_SUPPlIER_PROPOSAL)) { $form_close .= '

'.$langs->trans('SupplierProposalRefFournNotice').'

'; // TODO Suggest a permanent checkbox instead of option } - $form_close .= ''; - $form_close .= ''; - $form_close .= '
'.$langs->trans("CloseAs").''; + $form_close .= ''; + $form_close .= ''; - $form_close .= ''; - $form_close .= '
'.$langs->trans("CloseAs").''; $form_close .= ''; $form_close .= '
'.$langs->trans('Note').'
'; + $form_close .= '
'; + $form_close .= '
'; $form_close .= ''; $form_close .= '   '; $form_close .= ' '; - $form_close .= '
'; + $form_close .= ''; + $form_close .= ''; print $form_close; } diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index d3909983c52..b3efe3f293f 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -465,6 +465,7 @@ input#onlinepaymenturl, input#directdownloadlink { .formconsumeproduce { background: #f3f3f3; padding: 20px 0px 0px 0px; + border-radius: 8px; } div#moretabsList, div#moretabsListaction { From 71e7f10a548ce66bd9a857fb19a8e31736ee3e5a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Mar 2021 10:39:10 +0100 Subject: [PATCH 066/180] FIX #16698 --- htdocs/core/lib/pdf.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 6e2ad1c2f05..529355b94b2 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -2055,9 +2055,9 @@ function pdf_getlineprogress($object, $i, $outputlangs, $hidedetails = 0, $hookm if (method_exists($object, 'get_prev_progress')) { $prev_progress = $object->lines[$i]->get_prev_progress($object->id); } - $result = ($object->lines[$i]->situation_percent - $prev_progress).'%'; + $result = round($object->lines[$i]->situation_percent - $prev_progress, 1).'%'; } else { - $result = $object->lines[$i]->situation_percent.'%'; + $result = round($object->lines[$i]->situation_percent, 1).'%'; } } } From 9aa72e8c062a81461126404fe0515514cc134d0d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Mar 2021 10:42:15 +0100 Subject: [PATCH 067/180] Update hook_document.php --- htdocs/zapier/hook_document.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/zapier/hook_document.php b/htdocs/zapier/hook_document.php index 849ef6f2490..8751f184821 100644 --- a/htdocs/zapier/hook_document.php +++ b/htdocs/zapier/hook_document.php @@ -96,7 +96,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; $form = new Form($db); $title = $langs->trans("MyObject").' - '.$langs->trans("Files"); -$help_url = 'EN:Hooks_system|FR:Système_de_Hooks'; +$help_url = 'EN:Module_Zapier|ES:Módulo Zapier|FR:Module_Zapier_FR|DE:Modul_Zapier'; llxHeader('', $title, $help_url); From 14956302548adc47523071f77eb165bdabb9914e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Mar 2021 10:59:01 +0100 Subject: [PATCH 068/180] Fix #yogosha5645 --- htdocs/holiday/card.php | 4 +-- htdocs/holiday/document.php | 60 ++++++++++++++++++++++++++++++++----- htdocs/holiday/info.php | 30 ++++++++++++------- 3 files changed, 75 insertions(+), 19 deletions(-) diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php index 72b57de5a61..76d0e607e47 100644 --- a/htdocs/holiday/card.php +++ b/htdocs/holiday/card.php @@ -51,6 +51,8 @@ $fuserid = (GETPOST('fuserid', 'int') ?GETPOST('fuserid', 'int') : $user->id); // Load translation files required by the page $langs->loadLangs(array("other", "holiday", "mails")); +$error = 0; + $now = dol_now(); $childids = $user->getAllChildIds(1); @@ -60,8 +62,6 @@ if (!empty($conf->global->HOLIDAY_HIDE_FOR_NON_SALARIES)) { $morefilter = 'AND employee = 1'; } -$error = 0; - $object = new Holiday($db); $extrafields = new ExtraFields($db); diff --git a/htdocs/holiday/document.php b/htdocs/holiday/document.php index 1e2a643549a..02fe52a9a4d 100644 --- a/htdocs/holiday/document.php +++ b/htdocs/holiday/document.php @@ -44,12 +44,6 @@ $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); -// Security check -if ($user->socid) { - $socid = $user->socid; -} -$result = restrictedArea($user, 'holiday', $id, 'holiday'); - // Get parameters $limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); @@ -69,12 +63,64 @@ if (!$sortfield) { } +$childids = $user->getAllChildIds(1); + +$morefilter = ''; +if (!empty($conf->global->HOLIDAY_HIDE_FOR_NON_SALARIES)) { + $morefilter = 'AND employee = 1'; +} + $object = new Holiday($db); -$object->fetch($id, $ref); + +$extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extrafields->fetch_name_optionals_label($object->table_element); + +if (($id > 0) || $ref) { + $object->fetch($id, $ref); + + // Check current user can read this leave request + $canread = 0; + if (!empty($user->rights->holiday->readall)) { + $canread = 1; + } + if (!empty($user->rights->holiday->read) && in_array($object->fk_user, $childids)) { + $canread = 1; + } + if (!$canread) { + accessforbidden(); + } +} + +/*$cancreate = 0; + +if (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->holiday->writeall_advance)) { + $cancreate = 1; +} +if (!empty($user->rights->holiday->write) && in_array($fuserid, $childids)) { + $cancreate = 1; +} + +$candelete = 0; +if (!empty($user->rights->holiday->delete)) { + $candelete = 1; +} +if ($object->statut == Holiday::STATUS_DRAFT && $user->rights->holiday->write && in_array($object->fk_user, $childids)) { + $candelete = 1; +} +*/ $upload_dir = $conf->holiday->dir_output.'/'.get_exdir(0, 0, 0, 1, $object, ''); $modulepart = 'holiday'; +// Protection if external user +if ($user->socid) { + $socid = $user->socid; +} +$result = restrictedArea($user, 'holiday', $object->id, 'holiday'); + + /* * Actions diff --git a/htdocs/holiday/info.php b/htdocs/holiday/info.php index b710df5fe2a..3ec95e61a52 100644 --- a/htdocs/holiday/info.php +++ b/htdocs/holiday/info.php @@ -34,26 +34,30 @@ $langs->load("holiday"); $id = GETPOST('id', 'int'); $ref = GETPOST('ref', 'alpha'); + $childids = $user->getAllChildIds(1); -// Security check -if ($user->socid) { - $socid = $user->socid; +$morefilter = ''; +if (!empty($conf->global->HOLIDAY_HIDE_FOR_NON_SALARIES)) { + $morefilter = 'AND employee = 1'; } -$result = restrictedArea($user, 'holiday', $id, 'holiday'); $object = new Holiday($db); -if (!$object->fetch($id, $ref) > 0) { - dol_print_error($db); -} -if ($object->id > 0) { - // Check current user can read this expense report +$extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extrafields->fetch_name_optionals_label($object->table_element); + +if (($id > 0) || $ref) { + $object->fetch($id, $ref); + + // Check current user can read this leave request $canread = 0; if (!empty($user->rights->holiday->readall)) { $canread = 1; } - if (!empty($user->rights->holiday->lire) && in_array($object->fk_user_author, $childids)) { + if (!empty($user->rights->holiday->read) && in_array($object->fk_user, $childids)) { $canread = 1; } if (!$canread) { @@ -61,6 +65,12 @@ if ($object->id > 0) { } } +// Security check +if ($user->socid) { + $socid = $user->socid; +} +$result = restrictedArea($user, 'holiday', $object->id, 'holiday'); + /* * View From 9a474602a8a0a67151aa81cfee02d059cf1aca5d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Mar 2021 11:58:03 +0100 Subject: [PATCH 069/180] Fix #yogosha5644 --- htdocs/filefunc.inc.php | 4 ++-- htdocs/index.php | 3 ++- htdocs/main.inc.php | 2 ++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index 35a97677f63..aff0ebad349 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -178,9 +178,9 @@ if (empty($dolibarr_strict_mode)) { // Security: CSRF protection // This test check if referrer ($_SERVER['HTTP_REFERER']) is same web site than Dolibarr ($_SERVER['HTTP_HOST']) -// when we post forms (we allow GET to allow direct link to access a particular page). +// when we post forms (we allow GET and HEAD to accept direct link from a particular page). // Note about $_SERVER[HTTP_HOST/SERVER_NAME]: http://shiflett.org/blog/2006/mar/server-name-versus-http-host -// See also option $conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN for a stronger CSRF protection. +// See also CSRF protections done into main.inc.php if (!defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck)) { if (!empty($_SERVER['REQUEST_METHOD']) && !in_array($_SERVER['REQUEST_METHOD'], array('GET', 'HEAD')) && !empty($_SERVER['HTTP_HOST'])) { $csrfattack = false; diff --git a/htdocs/index.php b/htdocs/index.php index debdec757cb..5485f9bc7be 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -24,7 +24,8 @@ * \brief Dolibarr home page */ -define('NOCSRFCHECK', 1); // This is main home and login page. We must be able to go on it from another web site. + +define('CSRFCHECK_WITH_TOKEN', 1); // We force need to use a token to login when making a POST require 'main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 31fbc0ee4b3..54794909003 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -471,6 +471,8 @@ if ((!defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && !empty($conf->gl unset($_GET['massaction']); $_POST['id'] = ((int) $savid); } + + // Note: There is another CSRF protection into the filefunc.inc.php } // Disable modules (this must be after session_start and after conf has been loaded) From ceba8146c64e7d601d80ebe11dedf720332a0cef Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Mar 2021 12:40:20 +0100 Subject: [PATCH 070/180] Fix phpunit --- test/phpunit/CommandeFournisseurTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/phpunit/CommandeFournisseurTest.php b/test/phpunit/CommandeFournisseurTest.php index 28fc9b8daac..b050005bcf1 100644 --- a/test/phpunit/CommandeFournisseurTest.php +++ b/test/phpunit/CommandeFournisseurTest.php @@ -183,7 +183,7 @@ class CommandeFournisseurTest extends PHPUnit\Framework\TestCase print __METHOD__." result=".$result."\n"; $this->assertEquals(-1, $result, 'Creation of too low quantity'); // must be -1 because quantity is lower than minimum of supplier price - $sql="DELETE FROM ".MAIN_DB_PREFIX."commande_fournisseur where ref=''"; + $sql="DELETE FROM ".MAIN_DB_PREFIX."commande_fournisseur where ref IN ('', '(PROV)')"; $db->query($sql); // Create purchase order From 6157fd4c790ce9c1e12e4c59433e1a23d1d8644f Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Tue, 16 Mar 2021 13:16:03 +0100 Subject: [PATCH 071/180] Update card.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit $help_url add -> DE:Modul_Geschäftspartner --- htdocs/societe/card.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index e3460579d16..eb7aeb0dc69 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -905,7 +905,9 @@ $title = $langs->trans("ThirdParty"); if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) { $title = $object->name." - ".$langs->trans('Card'); } -$help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; + +$help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas|DE:Modul_Geschäftspartner'; + llxHeader('', $title, $help_url); $countrynotdefined = $langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("SeeAbove").')'; From 59f581bc71b0a68699d9a068b5373d085e40bc5a Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Tue, 16 Mar 2021 13:28:46 +0100 Subject: [PATCH 072/180] Update card.php add: $help_url = 'EN:Module_Contracts|FR:Module_Contrat'; changed: llxHeader('', $langs->trans("Contract"), $help_url); --- htdocs/contrat/card.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index de25a2ae136..217414aa30c 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -971,7 +971,10 @@ if (empty($reshook)) { * View */ -llxHeader('', $langs->trans("Contract"), ""); + +$help_url = 'EN:Module_Contracts|FR:Module_Contrat'; + +llxHeader('', $langs->trans("Contract"), $help_url); $form = new Form($db); $formfile = new FormFile($db); From 1e2093ebb3cfc1e5db47eca55820b59ac151962c Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Tue, 16 Mar 2021 13:32:38 +0100 Subject: [PATCH 073/180] Update card.php $help_url = 'EN:Module_Donations|FR:Module_Dons|ES:Módulo_Donaciones'; llxHeader('', $langs->trans("Donation"), $help_url); --- htdocs/don/card.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/don/card.php b/htdocs/don/card.php index 052d0bc70a2..283a8e6b2da 100644 --- a/htdocs/don/card.php +++ b/htdocs/don/card.php @@ -329,7 +329,9 @@ if ($action == 'builddoc') * View */ -llxHeader('', $langs->trans("Donation"), 'EN:Module_Donations|FR:Module_Dons|ES:Módulo_Donaciones'); +$help_url = 'EN:Module_Donations|FR:Module_Dons|ES:Módulo_Donaciones'; + +llxHeader('', $langs->trans("Donation"), $help_url); $form = new Form($db); $formfile = new FormFile($db); From d4777e76bead4949417fc0a3005010539769df42 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Tue, 16 Mar 2021 13:38:46 +0100 Subject: [PATCH 074/180] Update card.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit $help_url = 'EN:Module_Shipments|FR:Module_Expéditions|ES:Módulo_Expediciones|DE:Modul_Lieferungen'; llxHeader('', $langs->trans('Shipment'), 'Expedition', $help_url); --- htdocs/expedition/card.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index b50589b6ad4..f46891b6847 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -784,7 +784,9 @@ if (empty($reshook)) { * View */ -llxHeader('', $langs->trans('Shipment'), 'Expedition'); +$help_url = 'EN:Module_Shipments|FR:Module_Expéditions|ES:Módulo_Expediciones|DE:Modul_Lieferungen'; + +llxHeader('', $langs->trans('Shipment'), 'Expedition', $help_url); $form = new Form($db); $formfile = new FormFile($db); From edd7de7abf297323dd5f75b69fd4f1c9641c189b Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Tue, 16 Mar 2021 13:42:30 +0100 Subject: [PATCH 075/180] Update card.php changed: $helpurl to $help-url add: FR:Module_Notes_de_frais $help_url = "EN:Module_Expense_Reports|FR:Module_Notes_de_frais"; llxHeader("", $title, $help_url); --- htdocs/expensereport/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 232351b68a9..020c34dc0c6 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -1311,9 +1311,9 @@ if (empty($reshook)) { */ $title = $langs->trans("ExpenseReport")." - ".$langs->trans("Card"); -$helpurl = "EN:Module_Expense_Reports"; +$help_url = "EN:Module_Expense_Reports|FR:Module_Notes_de_frais"; -llxHeader("", $title, $helpurl); +llxHeader("", $title, $help_url); $form = new Form($db); $formfile = new FormFile($db); From 272bf984a1b630d70fcc6a66f24e662340602405 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Tue, 16 Mar 2021 13:45:33 +0100 Subject: [PATCH 076/180] Update index.php $help_url = 'EN:Module_Exports_En|FR:Module_Exports|ES:Módulo_Exportaciones'; llxHeader('', $langs->trans("ExportsArea"), $help_url); --- htdocs/exports/index.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/exports/index.php b/htdocs/exports/index.php index 3bff58453ab..22b1729550d 100644 --- a/htdocs/exports/index.php +++ b/htdocs/exports/index.php @@ -39,7 +39,10 @@ $export->load_arrays($user); $form = new Form($db); -llxHeader('', $langs->trans("ExportsArea"), 'EN:Module_Exports_En|FR:Module_Exports|ES:Módulo_Exportaciones'); + +$help_url = 'EN:Module_Exports_En|FR:Module_Exports|ES:Módulo_Exportaciones'; + +llxHeader('', $langs->trans("ExportsArea"), $help_url); print load_fiche_titre($langs->trans("ExportsArea")); From e35dc732e251b2e8e603dd6ce1eb4f671032f418 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Tue, 16 Mar 2021 13:49:34 +0100 Subject: [PATCH 077/180] Update card.php $help_url = 'EN:Module_Interventions'; llxHeader('', $langs->trans("Intervention"), $help_url); --- htdocs/fichinter/card.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/fichinter/card.php b/htdocs/fichinter/card.php index 5c162c4bf4f..ebc884eb033 100644 --- a/htdocs/fichinter/card.php +++ b/htdocs/fichinter/card.php @@ -759,7 +759,10 @@ if (!empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } -llxHeader('', $langs->trans("Intervention")); + +$help_url = 'EN:Module_Interventions'; + +llxHeader('', $langs->trans("Intervention"), $help_url); if ($action == 'create') { // Create new intervention From 914702fa8f423478641c8fc7ad2e9419fba4bc79 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Tue, 16 Mar 2021 14:00:25 +0100 Subject: [PATCH 078/180] Update import.php $help_url = 'EN:Module_Imports_En|FR:Module_Imports|ES:Módulo_Importaciones'; use of $help_url --- htdocs/imports/import.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php index 79b54c59011..50ab14dfce5 100644 --- a/htdocs/imports/import.php +++ b/htdocs/imports/import.php @@ -361,6 +361,9 @@ if ($action == 'saveorder') { */ +$help_url = 'EN:Module_Imports_En|FR:Module_Imports|ES:Módulo_Importaciones'; + + // STEP 1: Page to select dataset to import if ($step == 1 || !$datatoimport) { // Clean saved file-database matching @@ -382,7 +385,7 @@ if ($step == 1 || !$datatoimport) { $param .= '&enclosure='.urlencode($enclosure); } - llxHeader('', $langs->trans("NewImport"), 'EN:Module_Imports_En|FR:Module_Imports|ES:Módulo_Importaciones'); + llxHeader('', $langs->trans("NewImport"), $help_url); $head = import_prepare_head($param, 1); @@ -449,7 +452,7 @@ if ($step == 2 && $datatoimport) { $param .= '&enclosure='.urlencode($enclosure); } - llxHeader('', $langs->trans("NewImport"), 'EN:Module_Imports_En|FR:Module_Imports|ES:Módulo_Importaciones'); + llxHeader('', $langs->trans("NewImport"), $help_url); $head = import_prepare_head($param, 2); @@ -543,7 +546,7 @@ if ($step == 3 && $datatoimport) { $list = $objmodelimport->liste_modeles($db); - llxHeader('', $langs->trans("NewImport"), 'EN:Module_Imports_En|FR:Module_Imports|ES:Módulo_Importaciones'); + llxHeader('', $langs->trans("NewImport"), $help_url); $head = import_prepare_head($param, 3); @@ -853,7 +856,7 @@ if ($step == 4 && $datatoimport) { $param .= '&enclosure='.urlencode($enclosure); } - llxHeader('', $langs->trans("NewImport"), 'EN:Module_Imports_En|FR:Module_Imports|ES:Módulo_Importaciones'); + llxHeader('', $langs->trans("NewImport"), $help_url); $head = import_prepare_head($param, 4); From 95ede60de22dd9f8de3aef5e8e92d438ab1d54f6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Mar 2021 14:46:00 +0100 Subject: [PATCH 079/180] Fix css --- htdocs/cron/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/cron/list.php b/htdocs/cron/list.php index fe81b57dbf5..ae7cbee0cf0 100644 --- a/htdocs/cron/list.php +++ b/htdocs/cron/list.php @@ -465,7 +465,7 @@ if ($num > 0) print $object->priority; print ''; - print ''; + print ''; if ($obj->jobtype == 'method') { $text = $langs->trans("CronClass"); From 971b97d78f1a41cc72ca55cb559935dc11b961fb Mon Sep 17 00:00:00 2001 From: Alexis LAURIER Date: Tue, 16 Mar 2021 14:58:51 +0100 Subject: [PATCH 080/180] correct nb_expedition count --- htdocs/commande/class/commande.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index cc104261010..941d05f4ae6 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -2254,6 +2254,7 @@ class Commande extends CommonOrder $sql .= ' FROM '.MAIN_DB_PREFIX.'expedition as e'; $sql .= ', '.MAIN_DB_PREFIX.'element_element as el'; $sql .= ' WHERE el.fk_source = '.$this->id; + $sql .= " AND el.sourcetype = 'commande'"; $sql .= " AND el.fk_target = e.rowid"; $sql .= " AND el.targettype = 'shipping'"; From e40ba085e1d6e6ff0781d32d4a52096b3428f74f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Mar 2021 15:05:12 +0100 Subject: [PATCH 081/180] Add package php-intl into debian package --- build/debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/debian/control b/build/debian/control index eed54669555..059325eecb9 100755 --- a/build/debian/control +++ b/build/debian/control @@ -33,7 +33,7 @@ Depends: libapache2-mod-php5 | libapache2-mod-php5filter | php5-cgi | php5-fpm | Recommends: apache2 | lighttpd | httpd, mariadb-server | virtual-mysql-server, # Required PHP extensions for debian 9 but we can't add them into a Depends, it does not exists on debian 7 and 8 - php-xml, php-mbstring + php-xml, php-mbstring, php-intl Suggests: www-browser, php5-geoip Description: Web based software to manage a company or foundation Dolibarr ERP & CRM is an easy to use open source/free software package for From 8246eb814bcc25ee2a9386b0a896becf7eacd37a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Mar 2021 16:02:15 +0100 Subject: [PATCH 082/180] Enhance the page for security advices --- htdocs/admin/system/security.php | 45 +++++++++++++++++++++++++++++++- htdocs/admin/system/web.php | 17 ++++++++---- htdocs/langs/en_US/admin.lang | 2 ++ 3 files changed, 58 insertions(+), 6 deletions(-) diff --git a/htdocs/admin/system/security.php b/htdocs/admin/system/security.php index 745b732b6e1..e05fc01fd82 100644 --- a/htdocs/admin/system/security.php +++ b/htdocs/admin/system/security.php @@ -25,6 +25,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/events.class.php'; // Load translation files required by the page @@ -54,7 +55,12 @@ print load_fiche_titre($langs->trans("PHPSetup"), '', 'folder'); // Get version of PHP $phpversion = version_php(); -print "PHP - ".$langs->trans("Version").": ".$phpversion."
\n"; +print "PHP: ".$langs->trans("Version").": ".$phpversion; +if (function_exists('php_ini_loaded_file')) { + $inipath = php_ini_loaded_file(); + print " - INI: ".$inipath; +} +print "
\n"; // Get versionof web server print "
Web server - ".$langs->trans("Version").": ".$_SERVER["SERVER_SOFTWARE"]."
\n"; @@ -62,6 +68,35 @@ print '
'; print "PHP safe_mode = ".(ini_get('safe_mode') ? ini_get('safe_mode') : yn(0))."
\n"; print "PHP open_basedir = ".(ini_get('open_basedir') ? ini_get('open_basedir') : yn(0))."
\n"; +print "PHP allow_url_fopen = ".(ini_get('allow_url_fopen') ? img_picto($langs->trans("YouShouldSetThisToOff"), 'warning').' '.ini_get('allow_url_fopen') : yn(0))."
\n"; +print "PHP allow_url_include = ".(ini_get('allow_url_include') ? img_picto($langs->trans("YouShouldSetThisToOff"), 'warning').' '.ini_get('allow_url_include') : yn(0))."
\n"; +print "PHP disable_functions = "; +$arrayoffunctionsdisabled = explode(',', ini_get('disable_functions')); +$arrayoffunctionstodisable = explode(',', 'pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals'); +$arrayoffunctionstodisable2 = explode(',', 'exec,passthru,shell_exec,system,proc_open,popen'); +print join(', ', $arrayoffunctionsdisabled); +print "
\n"; +$todisabletext = ''; +foreach ($arrayoffunctionstodisable as $functiontodisable) { + if (! in_array($functiontodisable, $arrayoffunctionsdisabled)) { + $todisabletext .= img_picto($langs->trans("YouShouldSetThisToOff"), 'warning').' '.$functiontodisable; + } +} +if ($todisabletext) { + print $langs->trans("YouShouldDisablePHPFunctions").': '.$todisabletext; + print '
'; +} +$todisabletext = ''; +foreach ($arrayoffunctionstodisable2 as $functiontodisable) { + if (! in_array($functiontodisable, $arrayoffunctionsdisabled)) { + $todisabletext .= img_picto($langs->trans("YouShouldSetThisToOff"), 'warning').' '.$functiontodisable; + } +} +if ($todisabletext) { + print $langs->trans("IfCLINotRequiredYouShouldDisablePHPFunctions").': '.$todisabletext; + print '
'; +} + print '
'; // XDebug @@ -110,6 +145,14 @@ $perms = fileperms($dolibarr_main_document_root.'/'.$conffile); if ($perms) { if (($perms & 0x0004) || ($perms & 0x0002)) { print img_warning().' '.$langs->trans("ConfFileIsReadableOrWritableByAnyUsers"); + // Web user group by default + $labeluser = dol_getwebuser('user'); + $labelgroup = dol_getwebuser('group'); + print ' '.$langs->trans("User").': '.$labeluser.':'.$labelgroup; + if (function_exists('posix_geteuid') && function_exists('posix_getpwuid')) { + $arrayofinfoofuser = posix_getpwuid(posix_geteuid()); + print ' (POSIX '.$arrayofinfoofuser['name'].':'.$arrayofinfoofuser['gecos'].':'.$arrayofinfoofuser['dir'].':'.$arrayofinfoofuser['shell'].')'; + } } else { print img_picto('', 'tick'); } diff --git a/htdocs/admin/system/web.php b/htdocs/admin/system/web.php index 9c54b60f900..93af0097087 100644 --- a/htdocs/admin/system/web.php +++ b/htdocs/admin/system/web.php @@ -59,13 +59,20 @@ print ''.$langs->trans("DataRootServer")."".DOL_DATA_ROOT."'.$langs->trans("WebUserGroup")." (env vars)".$labeluser.'/'.$labelgroup."\n"; + print ''.$langs->trans("WebUserGroup")." (env vars)".$labeluser.':'.$labelgroup; + if (function_exists('posix_geteuid') && function_exists('posix_getpwuid')) { + $arrayofinfoofuser = posix_getpwuid(posix_geteuid()); + print ' (POSIX '.$arrayofinfoofuser['name'].':'.$arrayofinfoofuser['gecos'].':'.$arrayofinfoofuser['dir'].':'.$arrayofinfoofuser['shell'].')'; + } + print "\n"; } // Web user group real (detected by 'id' external command) -$arrayout = array(); $varout = 0; -exec('id', $arrayout, $varout); -if (empty($varout)) { // Test command is ok. Work only on Linux OS. - print ''.$langs->trans("WebUserGroup")." (real, 'id' command)".join(',', $arrayout)."\n"; +if (function_exists('exec')) { + $arrayout = array(); $varout = 0; + exec('id', $arrayout, $varout); + if (empty($varout)) { // Test command is ok. Work only on Linux OS. + print ''.$langs->trans("WebUserGroup")." (real, 'id' command)".join(',', $arrayout)."\n"; + } } print ''; print '
'; diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index d7c2132a5e9..1f99e51c45b 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -2110,3 +2110,5 @@ AdvancedModeOnly=Permision available in Advanced permission mode only ConfFileIsReadableOrWritableByAnyUsers=The conf file is reabable or writable by any users. Give permission to web server user and group only. MailToSendEventOrganization=Event Organization AGENDA_EVENT_DEFAULT_STATUS=Default event status when creating a event from the form +YouShouldDisablePHPFunctions=You should disable PHP functions +IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system commands (for the module Scheduled job for example), you shoud disable PHP functions \ No newline at end of file From a65f4e59908c1065f6f19d0f33547731bc605f02 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Tue, 16 Mar 2021 16:35:35 +0100 Subject: [PATCH 083/180] Update card.php $help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; llxHeader('', $langs->trans('CommRequests'), $help_url); --- htdocs/supplier_proposal/card.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index 630b3403d7b..1b10c92b0dc 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -1036,7 +1036,9 @@ if (empty($reshook)) { * View */ -llxHeader('', $langs->trans('CommRequests'), 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'); +$help_url = 'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur'; + +llxHeader('', $langs->trans('CommRequests'), $help_url); $form = new Form($db); $formother = new FormOther($db); From eedf76dd46ab5ad5f131b41b2eed719c592d6172 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Tue, 16 Mar 2021 16:40:25 +0100 Subject: [PATCH 084/180] Update setup.php $help_url = 'EN:Module_Point_of_sale_(TakePOS)'; llxHeader('', $langs->trans("CashDeskSetup"), $help_url); --- htdocs/takepos/admin/setup.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/takepos/admin/setup.php b/htdocs/takepos/admin/setup.php index c764cd1e566..67bc8edcdf3 100644 --- a/htdocs/takepos/admin/setup.php +++ b/htdocs/takepos/admin/setup.php @@ -127,7 +127,9 @@ if ($action != '') { $form = new Form($db); $formproduct = new FormProduct($db); -llxHeader('', $langs->trans("CashDeskSetup")); +$help_url = 'EN:Module_Point_of_sale_(TakePOS)'; + +llxHeader('', $langs->trans("CashDeskSetup"), $help_url); $linkback = ''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("CashDeskSetup").' (TakePOS)', $linkback, 'title_setup'); From e1ddeb1e41f35df6f52a8050328d9a76bbfb5eb4 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Tue, 16 Mar 2021 16:44:33 +0100 Subject: [PATCH 085/180] Update card.php $help_url = 'EN:Module_Ticket| --- htdocs/ticket/card.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/ticket/card.php b/htdocs/ticket/card.php index e7363b09e47..c5e27979121 100644 --- a/htdocs/ticket/card.php +++ b/htdocs/ticket/card.php @@ -669,7 +669,8 @@ if (!empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } -$help_url = 'FR:DocumentationModuleTicket'; +$help_url = 'EN:Module_Ticket|FR:DocumentationModuleTicket'; + $page_title = $actionobject->getTitle($action); llxHeader('', $page_title, $help_url); From a18e27688dfd398a2f53a0aaa51fd075001b3fa3 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Tue, 16 Mar 2021 16:54:58 +0100 Subject: [PATCH 086/180] Update dav.php $help_url = 'EN:Module_DAV'; llxHeader('', $langs->trans("DAVSetup"), $help_url); --- htdocs/admin/dav.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/dav.php b/htdocs/admin/dav.php index 3d159801173..32b91ed7cea 100644 --- a/htdocs/admin/dav.php +++ b/htdocs/admin/dav.php @@ -58,8 +58,9 @@ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; * View */ +$help_url = 'EN:Module_DAV'; -llxHeader('', $langs->trans("DAVSetup"), $wikihelp); +llxHeader('', $langs->trans("DAVSetup"), $help_url); $linkback = ''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("DAVSetup"), $linkback, 'title_setup'); From 29f55fbeace34b32f01c82c2a97f32c47e0d61e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 17:12:31 +0100 Subject: [PATCH 087/180] fix typo --- htdocs/langs/en_US/admin.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 1f99e51c45b..6f7515a01ac 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -2107,8 +2107,8 @@ SeeLinkToOnlineDocumentation=See link to online documention on top menu for exam SHOW_SUBPRODUCT_REF_IN_PDF=If the feature "%s" of module %s is used, show details of subproducts of a kit on PDF. AskThisIDToYourBank=Contact your bank to get this ID AdvancedModeOnly=Permision available in Advanced permission mode only -ConfFileIsReadableOrWritableByAnyUsers=The conf file is reabable or writable by any users. Give permission to web server user and group only. +ConfFileIsReadableOrWritableByAnyUsers=The conf file is readable or writable by any users. Give permission to web server user and group only. MailToSendEventOrganization=Event Organization AGENDA_EVENT_DEFAULT_STATUS=Default event status when creating a event from the form YouShouldDisablePHPFunctions=You should disable PHP functions -IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system commands (for the module Scheduled job for example), you shoud disable PHP functions \ No newline at end of file +IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system commands (for the module Scheduled job for example), you shoud disable PHP functions From 358dcff0cfe77eb9c13a92229084da60a95c541c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 17:38:12 +0100 Subject: [PATCH 088/180] fix php8 --- htdocs/comm/index.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/comm/index.php b/htdocs/comm/index.php index 87345bb905e..b720ff638c9 100644 --- a/htdocs/comm/index.php +++ b/htdocs/comm/index.php @@ -441,7 +441,7 @@ if (!empty($conf->commande->enabled) && $user->rights->commande->lire) { * Draft purchase orders */ if ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) || !empty($conf->supplier_order->enabled)) && $user->rights->fournisseur->commande->lire) { - $sql = "SELECT cf.rowid, cf.ref, cf.ref_supplier, cf.total_ttc, cf.fk_statut as status"; + $sql = "SELECT cf.rowid, cf.ref, cf.ref_supplier, cf.total_ht, cf.total_tva, cf.total_ttc, cf.fk_statut as status"; $sql .= ", s.rowid as socid, s.nom as name, s.name_alias"; $sql .= ", s.code_client, s.code_compta, s.client"; $sql .= ", s.code_fournisseur, s.code_compta_fournisseur, s.fournisseur"; @@ -485,7 +485,7 @@ if ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SU $supplierorderstatic->id = $obj->rowid; $supplierorderstatic->ref = $obj->ref; - $supplierorderstatic->ref_supplier = $obj->ref_suppliert; + $supplierorderstatic->ref_supplier = $obj->ref_supplier; $supplierorderstatic->total_ht = $obj->total_ht; $supplierorderstatic->total_tva = $obj->total_tva; $supplierorderstatic->total_ttc = $obj->total_ttc; @@ -882,7 +882,7 @@ if (!empty($conf->propal->enabled) && $user->rights->propal->lire) { $filename = dol_sanitizeFileName($obj->ref); $filedir = $conf->propal->multidir_output[$obj->entity].'/'.dol_sanitizeFileName($obj->ref); - $urlsource = $_SERVER['PHP_SELF'].'?id='.$obj->propalid; + //$urlsource = $_SERVER['PHP_SELF'].'?id='.$obj->propalid; $warning = ($db->jdate($obj->dfv) < ($now - $conf->propal->cloture->warning_delay)) ? img_warning($langs->trans("Late")) : ''; print ''; @@ -998,7 +998,7 @@ if (!empty($conf->commande->enabled) && $user->rights->commande->lire) { $filename = dol_sanitizeFileName($obj->ref); $filedir = $conf->commande->dir_output.'/'.dol_sanitizeFileName($obj->ref); - $urlsource = $_SERVER['PHP_SELF'].'?id='.$obj->propalid; + //$urlsource = $_SERVER['PHP_SELF'].'?id='.$obj->propalid; //$warning = ($db->jdate($obj->dfv) < ($now - $conf->propal->cloture->warning_delay)) ? img_warning($langs->trans("Late")) : ''; print ''; @@ -1013,7 +1013,7 @@ if (!empty($conf->commande->enabled) && $user->rights->commande->lire) { print ''; print ''.$companystatic->getNomUrl(1, 'customer', 44).''; - print ''.dol_print_date($db->jdate($obj->dp), 'day').''; + print ''.dol_print_date($db->jdate($obj->dv), 'day').''; print ''.price(!empty($conf->global->MAIN_DASHBOARD_USE_TOTAL_HT) ? $obj->total_ht : $obj->total_ttc).''; print ''.$orderstatic->LibStatut($obj->fk_statut, $obj->billed, 3).''; From e1ad7013d9b2230c0622a6f1c81b700c9481e3a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 17:47:24 +0100 Subject: [PATCH 089/180] fix php8 --- htdocs/asset/card.php | 2 +- htdocs/core/boxes/box_services_contracts.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/asset/card.php b/htdocs/asset/card.php index e4bf739515f..3d722bca400 100644 --- a/htdocs/asset/card.php +++ b/htdocs/asset/card.php @@ -79,7 +79,7 @@ $permissiontoadd = $user->rights->asset->write; // Used by the include of action $permissiontodelete = $user->rights->asset->delete || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT); $permissionnote = $user->rights->asset->write; // Used by the include of actions_setnotes.inc.php $permissiondellink = $user->rights->asset->write; // Used by the include of actions_dellink.inc.php -$upload_dir = $conf->mymodule->multidir_output[isset($object->entity) ? $object->entity : 1]; +$upload_dir = $conf->asset->multidir_output[isset($object->entity) ? $object->entity : 1]; /* diff --git a/htdocs/core/boxes/box_services_contracts.php b/htdocs/core/boxes/box_services_contracts.php index 6623556e27f..43f5babcf04 100644 --- a/htdocs/core/boxes/box_services_contracts.php +++ b/htdocs/core/boxes/box_services_contracts.php @@ -90,7 +90,7 @@ class box_services_contracts extends ModeleBoxes $sql = "SELECT s.nom as name, s.rowid as socid, s.email, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur,"; $sql .= " c.rowid, c.ref, c.statut as contract_status, c.ref_customer, c.ref_supplier,"; $sql .= " cd.rowid as cdid, cd.label, cd.description, cd.tms as datem, cd.statut as contractline_status, cd.product_type as type, cd.date_fin_validite as date_line,"; - $sql .= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as product_type, p.entity, p.tobuy, p.tosell"; + $sql .= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as product_type, p.entity as product_entity, p.tobuy, p.tosell"; $sql .= " FROM (".MAIN_DB_PREFIX."societe as s"; $sql .= " INNER JOIN ".MAIN_DB_PREFIX."contrat as c ON s.rowid = c.fk_soc"; $sql .= " INNER JOIN ".MAIN_DB_PREFIX."contratdet as cd ON c.rowid = cd.fk_contrat"; @@ -155,7 +155,7 @@ class box_services_contracts extends ModeleBoxes $productstatic->id = $objp->product_id; $productstatic->type = $objp->product_type; $productstatic->ref = $objp->product_ref; - $productstatic->entity = $objp->pentity; + $productstatic->entity = $objp->product_entity; $productstatic->label = $objp->product_label; $productstatic->status = $objp->tosell; $productstatic->status_buy = $objp->tobuy; From dc39a68b583e2418dd6f34aa76db154aaccf3179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 17:50:43 +0100 Subject: [PATCH 090/180] fix php8 --- htdocs/holiday/list.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index 2518e6d7b2b..4474aecf748 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -3,7 +3,7 @@ * Copyright (C) 2013-2020 Laurent Destailleur * Copyright (C) 2012-2016 Regis Houssin * Copyright (C) 2018 Charlene Benke - * Copyright (C) 2019 Frédéric France + * Copyright (C) 2019-2021 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -53,7 +53,7 @@ $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected $contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'holidaylist'; // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page -$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') +$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $id = GETPOST('id', 'int'); @@ -438,7 +438,7 @@ if ($resql) { //'builddoc'=>$langs->trans("PDFMerge"), //'presend'=>$langs->trans("SendByMail"), ); - if ($user->rights->holiday->supprimer) { + if (!empty($user->rights->holiday->delete)) { $arrayofmassactions['predelete'] = ''.$langs->trans("Delete"); } if (in_array($massaction, array('presend', 'predelete'))) { From 7b8d1abfcfb7cd4b04739e73f438f0fee760d01e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 18:04:51 +0100 Subject: [PATCH 091/180] fix php8 warnings --- htdocs/accountancy/bookkeeping/list.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 8ca4175f87f..39906b09bb3 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -3,7 +3,7 @@ * Copyright (C) 2013-2016 Florian Henry * Copyright (C) 2013-2020 Alexandre Spangaro * Copyright (C) 2016-2017 Laurent Destailleur - * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018-2021 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -471,7 +471,7 @@ if (count($filter) > 0) { } } $sql .= ' WHERE t.entity IN ('.getEntity('accountancy').')'; -if ($conf->global->ACCOUNTING_REEXPORT == 0) { +if (empty($conf->global->ACCOUNTING_REEXPORT)) { $sql .= " AND t.date_export IS NULL"; } if (count($sqlwhere) > 0) { @@ -487,7 +487,7 @@ if (!empty($sortfield)) { // Must be after definition of $sql if ($action == 'export_fileconfirm' && $user->rights->accounting->mouvements->export) { // TODO Replace the fetchAll + ->export later that consume too much memory on large export with the query($sql) and loop on each line to export them. - $result = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter, 'AND', $conf->global->ACCOUNTING_REEXPORT); + $result = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter, 'AND', (empty($conf->global->ACCOUNTING_REEXPORT) ? 0 : 1)); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); From aefc3bcef8f313564624545d5b98ce6a7cc23dda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 18:13:02 +0100 Subject: [PATCH 092/180] fix php8 warnings --- htdocs/imports/class/import.class.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/imports/class/import.class.php b/htdocs/imports/class/import.class.php index 5372a6e16c5..567aaf754a8 100644 --- a/htdocs/imports/class/import.class.php +++ b/htdocs/imports/class/import.class.php @@ -2,6 +2,7 @@ /* Copyright (C) 2011 Laurent Destailleur * Copyright (C) 2016 Raphaël Doursenaud * Copyright (C) 2020 Ahmad Jamaly Rabib + * Copyright (C) 2021 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -166,15 +167,15 @@ class Import // Array of fields to import (key=field, value=label) $this->array_import_fields[$i] = $module->import_fields_array[$r]; // Array of hidden fields to import (key=field, value=label) - $this->array_import_fieldshidden[$i] = $module->import_fieldshidden_array[$r]; + $this->array_import_fieldshidden[$i] = (isset($module->import_fieldshidden_array[$r]) ? $module->import_fieldshidden_array[$r] : ''); // Tableau des entites a exporter (cle=champ, valeur=entite) $this->array_import_entities[$i] = $module->import_entities_array[$r]; // Tableau des alias a exporter (cle=champ, valeur=alias) - $this->array_import_regex[$i] = $module->import_regex_array[$r]; + $this->array_import_regex[$i] = (isset($module->import_regex_array[$r]) ? $module->import_regex_array[$r] : ''); // Array of columns allowed as UPDATE options - $this->array_import_updatekeys[$i] = $module->import_updatekeys_array[$r]; + $this->array_import_updatekeys[$i] = (isset($module->import_updatekeys_array[$r]) ? $module->import_updatekeys_array[$r] : ''); // Array of examples - $this->array_import_examplevalues[$i] = $module->import_examplevalues_array[$r]; + $this->array_import_examplevalues[$i] = (isset($module->import_examplevalues_array[$r]) ? $module->import_examplevalues_array[$r] : ''); // Tableau des regles de conversion d'une valeur depuis une autre source (cle=champ, valeur=tableau des regles) $this->array_import_convertvalue[$i] = (isset($module->import_convertvalue_array[$r]) ? $module->import_convertvalue_array[$r] : ''); // Sql request to run after import From 519b08b78210b30a73232a89589441088318ee27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 18:25:25 +0100 Subject: [PATCH 093/180] fix php8 warnings --- htdocs/compta/facture/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 8f3a54fe4ba..9f2585ea3cb 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -204,8 +204,8 @@ $arrayfields = array( 'typent.code'=>array('label'=>"ThirdPartyType", 'checked'=>$checkedtypetiers, 'position'=>75), 'f.fk_mode_reglement'=>array('label'=>"PaymentMode", 'checked'=>1, 'position'=>80), 'f.fk_cond_reglement'=>array('label'=>"PaymentConditionsShort", 'checked'=>1, 'position'=>85), - 'f.module_source'=>array('label'=>"Module", 'checked'=>($contextpage == 'poslist' ? 1 : 0), 'enabled'=>($conf->cashdesk->enabled || $conf->takepos->enabled || $conf->global->INVOICE_SHOW_POS), 'position'=>90), - 'f.pos_source'=>array('label'=>"Terminal", 'checked'=>($contextpage == 'poslist' ? 1 : 0), 'enabled'=>($conf->cashdesk->enabled || $conf->takepos->enabled || $conf->global->INVOICE_SHOW_POS), 'position'=>91), + 'f.module_source'=>array('label'=>"Module", 'checked'=>($contextpage == 'poslist' ? 1 : 0), 'enabled'=>((empty($conf->cashdesk->enabled) && empty($conf->takepos->enabled) && empty($conf->global->INVOICE_SHOW_POS)) ? 0 : 1), 'position'=>90), + 'f.pos_source'=>array('label'=>"Terminal", 'checked'=>($contextpage == 'poslist' ? 1 : 0), 'enabled'=>((empty($conf->cashdesk->enabled) && empty($conf->takepos->enabled) && empty($conf->global->INVOICE_SHOW_POS)) ? 0 : 1), 'position'=>91), 'f.total_ht'=>array('label'=>"AmountHT", 'checked'=>1, 'position'=>95), 'f.total_vat'=>array('label'=>"AmountVAT", 'checked'=>0, 'position'=>100), 'f.total_localtax1'=>array('label'=>$langs->transcountry("AmountLT1", $mysoc->country_code), 'checked'=>0, 'enabled'=>($mysoc->localtax1_assuj == "1"), 'position'=>110), From d4ad9294c47fc221e3e800d4de2859478b9c8abd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 18:32:10 +0100 Subject: [PATCH 094/180] fix unknown var --- htdocs/adherents/stats/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/adherents/stats/index.php b/htdocs/adherents/stats/index.php index b092c7bcf20..11c0025dcc5 100644 --- a/htdocs/adherents/stats/index.php +++ b/htdocs/adherents/stats/index.php @@ -137,7 +137,7 @@ if (!$mesg) { } -$head = member_stats_prepare_head($adh); +$head = member_stats_prepare_head($memberstatic); print dol_get_fiche_head($head, 'statssubscription', '', -1, ''); From bdae6794639fc304193509e2e5468db46200425e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 18:42:35 +0100 Subject: [PATCH 095/180] fix php8 warnings --- htdocs/adherents/stats/byproperties.php | 6 +++--- htdocs/adherents/stats/geo.php | 18 +++++++++--------- htdocs/adherents/stats/index.php | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/htdocs/adherents/stats/byproperties.php b/htdocs/adherents/stats/byproperties.php index 9f8691a69a6..1238fd0fe15 100644 --- a/htdocs/adherents/stats/byproperties.php +++ b/htdocs/adherents/stats/byproperties.php @@ -59,7 +59,7 @@ $title = $langs->trans("MembersStatisticsByProperties"); print load_fiche_titre($title, '', $memberstatic->picto); -dol_mkdir($dir); +//dol_mkdir($dir); $data = array(); @@ -134,7 +134,7 @@ if ($resql) { } -$head = member_stats_prepare_head($adh); +$head = member_stats_prepare_head($memberstatic); print dol_get_fiche_head($head, 'statsbyproperties', '', -1, ''); @@ -169,7 +169,7 @@ if (!$foundmor) { foreach ($data as $val) { $nb = $val['nb']; - $nbsubscriptions = $val['nbsubscriptions']; + $nbsubscriptions = isset($val['nbsubscriptions']) ? $val['nbsubscriptions'] : 0; $nbactive = $val['nbactive']; print ''; diff --git a/htdocs/adherents/stats/geo.php b/htdocs/adherents/stats/geo.php index 6107669c967..2d1450b8ae5 100644 --- a/htdocs/adherents/stats/geo.php +++ b/htdocs/adherents/stats/geo.php @@ -78,7 +78,7 @@ llxHeader('', $title, '', '', 0, 0, $arrayjs); print load_fiche_titre($title, '', $memberstatic->picto); -dol_mkdir($dir); +//dol_mkdir($dir); if ($mode) { // Define sql @@ -87,7 +87,7 @@ if ($mode) { $tab = 'statscountry'; $data = array(); - $sql .= "SELECT COUNT(DISTINCT d.rowid) as nb, COUNT(s.rowid) as nbsubscriptions, MAX(d.datevalid) as lastdate, MAX(s.dateadh) as lastsubscriptiondate, c.code, c.label"; + $sql = "SELECT COUNT(DISTINCT d.rowid) as nb, COUNT(s.rowid) as nbsubscriptions, MAX(d.datevalid) as lastdate, MAX(s.dateadh) as lastsubscriptiondate, c.code, c.label"; $sql .= " FROM ".MAIN_DB_PREFIX."adherent as d"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as c on d.country = c.rowid"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."subscription as s ON s.fk_adherent = d.rowid"; @@ -103,7 +103,7 @@ if ($mode) { $tab = 'statsstate'; $data = array(); - $sql .= "SELECT COUNT(DISTINCT d.rowid) as nb, COUNT(s.rowid) as nbsubscriptions, MAX(d.datevalid) as lastdate, MAX(s.dateadh) as lastsubscriptiondate, co.code, co.label, c.nom as label2"; // + $sql = "SELECT COUNT(DISTINCT d.rowid) as nb, COUNT(s.rowid) as nbsubscriptions, MAX(d.datevalid) as lastdate, MAX(s.dateadh) as lastsubscriptiondate, co.code, co.label, c.nom as label2"; // $sql .= " FROM ".MAIN_DB_PREFIX."adherent as d"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as c on d.state_id = c.rowid"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_regions as r on c.fk_region = r.code_region"; @@ -120,7 +120,7 @@ if ($mode) { $tab = 'statsregion'; //onglet $data = array(); //tableau de donnée - $sql .= "SELECT COUNT(DISTINCT d.rowid) as nb, COUNT(s.rowid) as nbsubscriptions, MAX(d.datevalid) as lastdate, MAX(s.dateadh) as lastsubscriptiondate, co.code, co.label, r.nom as label2"; + $sql = "SELECT COUNT(DISTINCT d.rowid) as nb, COUNT(s.rowid) as nbsubscriptions, MAX(d.datevalid) as lastdate, MAX(s.dateadh) as lastsubscriptiondate, co.code, co.label, r.nom as label2"; $sql .= " FROM ".MAIN_DB_PREFIX."adherent as d"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as c on d.state_id = c.rowid"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_regions as r on c.fk_region = r.code_region"; @@ -137,7 +137,7 @@ if ($mode) { $tab = 'statstown'; $data = array(); - $sql .= "SELECT COUNT(DISTINCT d.rowid) as nb, COUNT(s.rowid) as nbsubscriptions, MAX(d.datevalid) as lastdate, MAX(s.dateadh) as lastsubscriptiondate, c.code, c.label, d.town as label2"; + $sql = "SELECT COUNT(DISTINCT d.rowid) as nb, COUNT(s.rowid) as nbsubscriptions, MAX(d.datevalid) as lastdate, MAX(s.dateadh) as lastsubscriptiondate, c.code, c.label, d.town as label2"; $sql .= " FROM ".MAIN_DB_PREFIX."adherent as d"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as c on d.country = c.rowid"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."subscription as s ON s.fk_adherent = d.rowid"; @@ -207,7 +207,7 @@ if ($mode) { } -$head = member_stats_prepare_head($adh); +$head = member_stats_prepare_head($memberstatic); print dol_get_fiche_head($head, $tab, '', -1, ''); @@ -299,7 +299,7 @@ if ($mode) { print ''; print ''; print ''; - if ($label2) { + if (isset($label2)) { print ''; } print ''; @@ -308,10 +308,10 @@ if ($mode) { print ''; foreach ($data as $val) { - $year = $val['year']; + $year = isset($val['year']) ? $val['year'] : '';; print ''; print ''; - if ($label2) { + if (isset($label2)) { print ''; } print ''; diff --git a/htdocs/adherents/stats/index.php b/htdocs/adherents/stats/index.php index b092c7bcf20..11c0025dcc5 100644 --- a/htdocs/adherents/stats/index.php +++ b/htdocs/adherents/stats/index.php @@ -137,7 +137,7 @@ if (!$mesg) { } -$head = member_stats_prepare_head($adh); +$head = member_stats_prepare_head($memberstatic); print dol_get_fiche_head($head, 'statssubscription', '', -1, ''); From 9ea7c92b1bdd9fbc4022d3d17a558d5483b7a9b2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Mar 2021 18:56:10 +0100 Subject: [PATCH 096/180] FIX Filter on debit/credit --- htdocs/compta/bank/bankentries_list.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 217b735a299..cb6b6095d92 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -651,13 +651,13 @@ if (!empty($search_type)) { $sql .= " AND b.fk_type = '".$db->escape($search_type)."' "; } // Search criteria amount -$search_debit = price2num(str_replace('-', '', $search_debit)); -$search_credit = price2num(str_replace('-', '', $search_credit)); if ($search_debit) { - $sql .= natural_search('- b.amount', $search_debit, 1); + $sql .= natural_search('ABS(b.amount)', $search_debit, 1); + $sql .= ' AND b.amount <= 0'; } if ($search_credit) { $sql .= natural_search('b.amount', $search_credit, 1); + $sql .= ' AND b.amount >= 0'; } // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; From 26dc3ef1b0aacae520e86824e096a03073db205f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Mar 2021 18:56:10 +0100 Subject: [PATCH 097/180] FIX Filter on debit/credit Conflicts: htdocs/compta/bank/bankentries_list.php --- htdocs/compta/bank/bankentries_list.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 63021eb3b07..7abd2c6a2b7 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -515,13 +515,17 @@ if ($search_description) } $sql .= natural_search("b.label", $search_description_to_use); // Warning some text are just translation keys, not translated strings } -if ($search_bid > 0) $sql .= " AND b.rowid=l.lineid AND l.fk_categ=".$search_bid; -if (!empty($search_type)) $sql .= " AND b.fk_type = '".$db->escape($search_type)."' "; +if ($search_bid > 0) $sql .= " AND b.rowid=l.lineid AND l.fk_categ=".((int) $search_bid); +if (!empty($search_type)) $sql .= " AND b.fk_type = '".$db->escape($search_type)."'"; // Search criteria amount -$search_debit = price2num(str_replace('-', '', $search_debit)); -$search_credit = price2num(str_replace('-', '', $search_credit)); -if ($search_debit) $sql .= natural_search('- b.amount', $search_debit, 1); -if ($search_credit) $sql .= natural_search('b.amount', $search_credit, 1); +if ($search_debit) { + $sql .= natural_search('ABS(b.amount)', $search_debit, 1); + $sql .= ' AND b.amount <= 0'; +} +if ($search_credit) { + $sql .= natural_search('b.amount', $search_credit, 1); + $sql .= ' AND b.amount >= 0'; +} // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; From 3de108aea273f4b5f34faae07cd78daaf3e4be1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 19:07:07 +0100 Subject: [PATCH 098/180] doxygen --- htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php b/htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php index 51e0350a8ad..82632773c87 100644 --- a/htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php +++ b/htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php @@ -1,6 +1,6 @@ - * Copyright (C) 2018-2020 Frédéric France + * Copyright (C) 2018-2021 Frédéric France * Copyright (C) ---Put here your own copyright and developer email--- * * This program is free software: you can redistribute it and/or modify @@ -206,7 +206,7 @@ class mymodulewidget1 extends ModeleBoxes * @param array $head Array with properties of box title * @param array $contents Array with properties of box lines * @param int $nooutput No print, only return string - * @return void + * @return string */ public function showBox($head = null, $contents = null, $nooutput = 0) { From 22ed95a629b4ca861e28aca0a1abe516453d7553 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Mar 2021 19:09:56 +0100 Subject: [PATCH 099/180] Look and feel v14 --- htdocs/compta/bank/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/bank/card.php b/htdocs/compta/bank/card.php index a72e79a054d..1524c1d1727 100644 --- a/htdocs/compta/bank/card.php +++ b/htdocs/compta/bank/card.php @@ -904,7 +904,7 @@ if ($action == 'create') { } elseif ($conciliate == -3) { print $langs->trans("No").' ('.$langs->trans("Closed").')'; } else { - print ' 0) ? '' : ' checked="checked"').'"> '.$langs->trans("DisableConciliation"); + print ' 0) ? '' : ' checked="checked"').'"> '; } print ''; From 4e8ea5c07e64deb2f70d069722f44200f1294f01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 21:13:15 +0100 Subject: [PATCH 100/180] fix php8 warnings --- htdocs/core/class/commonobject.class.php | 42 ++++++++++++------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 5827c54763a..04cbf0eb5a9 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -2000,7 +2000,7 @@ abstract class CommonObject if ($this->element == 'societe') { $aliastablesociete = 'te'; // te as table_element } - + $restrictiononfksoc = empty($this->restrictiononfksoc) ? 0 : $this->restrictiononfksoc; $sql = "SELECT MAX(te.".$fieldid.")"; $sql .= " FROM ".(empty($nodbprefix) ?MAIN_DB_PREFIX:'').$this->table_element." as te"; if ($this->element == 'user' && !empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE)) { @@ -2009,19 +2009,19 @@ abstract class CommonObject if (isset($this->ismultientitymanaged) && !is_numeric($this->ismultientitymanaged)) { $tmparray = explode('@', $this->ismultientitymanaged); $sql .= ", ".MAIN_DB_PREFIX.$tmparray[1]." as ".($tmparray[1] == 'societe' ? 's' : 'parenttable'); // If we need to link to this table to limit select to entity - } elseif ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) { + } elseif ($restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) { $sql .= ", ".MAIN_DB_PREFIX."societe as s"; // If we need to link to societe to limit select to socid - } elseif ($this->restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) { + } elseif ($restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON te.fk_soc = s.rowid"; // If we need to link to societe to limit select to socid } - if ($this->restrictiononfksoc && !$user->rights->societe->client->voir && !$socid) { + if ($restrictiononfksoc && !$user->rights->societe->client->voir && !$socid) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$aliastablesociete.".rowid = sc.fk_soc"; } $sql .= " WHERE te.".$fieldid." < '".$this->db->escape($fieldid == 'rowid' ? $this->id : $this->ref)."'"; // ->ref must always be defined (set to id if field does not exists) - if ($this->restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) { + if ($restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) { $sql .= " AND sc.fk_user = ".$user->id; } - if ($this->restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) { + if ($restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) { $sql .= " AND (sc.fk_user = ".$user->id.' OR te.fk_soc IS NULL)'; } if (!empty($filter)) { @@ -2033,7 +2033,7 @@ abstract class CommonObject if (isset($this->ismultientitymanaged) && !is_numeric($this->ismultientitymanaged)) { $tmparray = explode('@', $this->ismultientitymanaged); $sql .= ' AND te.'.$tmparray[0].' = '.($tmparray[1] == 'societe' ? 's' : 'parenttable').'.rowid'; // If we need to link to this table to limit select to entity - } elseif ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) { + } elseif ($restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) { $sql .= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to socid } if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) { @@ -2052,16 +2052,16 @@ abstract class CommonObject $tmparray = explode('@', $this->ismultientitymanaged); $sql .= ' AND parenttable.entity IN ('.getEntity($tmparray[1]).')'; } - if ($this->restrictiononfksoc == 1 && $socid && $this->element != 'societe') { + if ($restrictiononfksoc == 1 && $socid && $this->element != 'societe') { $sql .= ' AND te.fk_soc = '.$socid; } - if ($this->restrictiononfksoc == 2 && $socid && $this->element != 'societe') { + if ($restrictiononfksoc == 2 && $socid && $this->element != 'societe') { $sql .= ' AND (te.fk_soc = '.$socid.' OR te.fk_soc IS NULL)'; } - if ($this->restrictiononfksoc && $socid && $this->element == 'societe') { + if ($restrictiononfksoc && $socid && $this->element == 'societe') { $sql .= ' AND te.rowid = '.$socid; } - //print 'socid='.$socid.' restrictiononfksoc='.$this->restrictiononfksoc.' ismultientitymanaged = '.$this->ismultientitymanaged.' filter = '.$filter.' -> '.$sql."
"; + //print 'socid='.$socid.' restrictiononfksoc='.$restrictiononfksoc.' ismultientitymanaged = '.$this->ismultientitymanaged.' filter = '.$filter.' -> '.$sql."
"; $result = $this->db->query($sql); if (!$result) { @@ -2079,19 +2079,19 @@ abstract class CommonObject if (isset($this->ismultientitymanaged) && !is_numeric($this->ismultientitymanaged)) { $tmparray = explode('@', $this->ismultientitymanaged); $sql .= ", ".MAIN_DB_PREFIX.$tmparray[1]." as ".($tmparray[1] == 'societe' ? 's' : 'parenttable'); // If we need to link to this table to limit select to entity - } elseif ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) { + } elseif ($restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) { $sql .= ", ".MAIN_DB_PREFIX."societe as s"; // If we need to link to societe to limit select to socid - } elseif ($this->restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) { + } elseif ($restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON te.fk_soc = s.rowid"; // If we need to link to societe to limit select to socid } - if ($this->restrictiononfksoc && !$user->rights->societe->client->voir && !$socid) { + if ($restrictiononfksoc && !$user->rights->societe->client->voir && !$socid) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$aliastablesociete.".rowid = sc.fk_soc"; } $sql .= " WHERE te.".$fieldid." > '".$this->db->escape($fieldid == 'rowid' ? $this->id : $this->ref)."'"; // ->ref must always be defined (set to id if field does not exists) - if ($this->restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) { + if ($restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) { $sql .= " AND sc.fk_user = ".$user->id; } - if ($this->restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) { + if ($restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) { $sql .= " AND (sc.fk_user = ".$user->id.' OR te.fk_soc IS NULL)'; } if (!empty($filter)) { @@ -2103,7 +2103,7 @@ abstract class CommonObject if (isset($this->ismultientitymanaged) && !is_numeric($this->ismultientitymanaged)) { $tmparray = explode('@', $this->ismultientitymanaged); $sql .= ' AND te.'.$tmparray[0].' = '.($tmparray[1] == 'societe' ? 's' : 'parenttable').'.rowid'; // If we need to link to this table to limit select to entity - } elseif ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) { + } elseif ($restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) { $sql .= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to socid } if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) { @@ -2122,16 +2122,16 @@ abstract class CommonObject $tmparray = explode('@', $this->ismultientitymanaged); $sql .= ' AND parenttable.entity IN ('.getEntity($tmparray[1]).')'; } - if ($this->restrictiononfksoc == 1 && $socid && $this->element != 'societe') { + if ($restrictiononfksoc == 1 && $socid && $this->element != 'societe') { $sql .= ' AND te.fk_soc = '.$socid; } - if ($this->restrictiononfksoc == 2 && $socid && $this->element != 'societe') { + if ($restrictiononfksoc == 2 && $socid && $this->element != 'societe') { $sql .= ' AND (te.fk_soc = '.$socid.' OR te.fk_soc IS NULL)'; } - if ($this->restrictiononfksoc && $socid && $this->element == 'societe') { + if ($restrictiononfksoc && $socid && $this->element == 'societe') { $sql .= ' AND te.rowid = '.$socid; } - //print 'socid='.$socid.' restrictiononfksoc='.$this->restrictiononfksoc.' ismultientitymanaged = '.$this->ismultientitymanaged.' filter = '.$filter.' -> '.$sql."
"; + //print 'socid='.$socid.' restrictiononfksoc='.$restrictiononfksoc.' ismultientitymanaged = '.$this->ismultientitymanaged.' filter = '.$filter.' -> '.$sql."
"; // Rem: Bug in some mysql version: SELECT MIN(rowid) FROM llx_socpeople WHERE rowid > 1 when one row in database with rowid=1, returns 1 instead of null $result = $this->db->query($sql); From 6cbb400d0cfc9180074c2fdacd59ff07ff095b91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 21:28:56 +0100 Subject: [PATCH 101/180] fix php8 warnings --- htdocs/user/agenda_extsites.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/htdocs/user/agenda_extsites.php b/htdocs/user/agenda_extsites.php index 3bd0468cc27..3faf6dc770c 100644 --- a/htdocs/user/agenda_extsites.php +++ b/htdocs/user/agenda_extsites.php @@ -174,7 +174,7 @@ print '
'; print ''.$langs->trans("AgendaExtSitesDesc")."
\n"; print "
\n"; -$selectedvalue = $conf->global->AGENDA_DISABLE_EXT; +$selectedvalue = empty($conf->global->AGENDA_DISABLE_EXT) ? 0 : $conf->global->AGENDA_DISABLE_EXT; if ($selectedvalue == 1) { $selectedvalue = 0; } else { @@ -201,20 +201,23 @@ while ($i <= $MAXAGENDA) { $offsettz = 'AGENDA_EXT_OFFSETTZ_'.$id.'_'.$key; $color = 'AGENDA_EXT_COLOR_'.$id.'_'.$key; - print '
'; // Nb print '"; // Name - print ''; + $name_value = (GETPOST('AGENDA_EXT_NAME_'.$id.'_'.$key) ?GETPOST('AGENDA_EXT_NAME_'.$id.'_'.$key) : (empty($object->conf->$name) ? '' : $object->conf->$name)); + print ''; // URL - print ''; + $src_value = (GETPOST('AGENDA_EXT_SRC_'.$id.'_'.$key) ?GETPOST('AGENDA_EXT_SRC_'.$id.'_'.$key) : (empty($object->conf->$src) ? '' : $object->conf->$src)); + print ''; // Offset TZ - print ''; + $offsettz_value = (GETPOST('AGENDA_EXT_OFFSETTZ_'.$id.'_'.$key) ? GETPOST('AGENDA_EXT_OFFSETTZ_'.$id.'_'.$key) : (empty($object->conf->$offsettz) ? 0 : $object->conf->$offsettz)); + print ''; // Color (Possible colors are limited by Google) print ''; print ""; $i++; From 567a65b44d8401a6fa5088cd116ab1085d1dd1b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 21:41:11 +0100 Subject: [PATCH 102/180] fix php8 warnings --- htdocs/supplier_proposal/list.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index 0bb4936d460..3ad210b2f77 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -272,7 +272,7 @@ if ($sall || $search_product_category > 0 || $search_user > 0) { $sql .= ' s.rowid as socid, s.nom as name, s.town, s.zip, s.fk_pays, s.client, s.code_client,'; $sql .= " typent.code as typent_code,"; $sql .= " state.code_departement as state_code, state.nom as state_name,"; -$sql .= ' sp.rowid, sp.note_private, sp.total_ht, sp.total_tva, sp.total_ttc, sp.localtax1, sp.localtax2, sp.ref, sp.fk_statut as status, sp.fk_user_author, sp.date_valid, sp.date_livraison as dp,'; +$sql .= ' sp.rowid, sp.note_public, sp.note_private, sp.total_ht, sp.total_tva, sp.total_ttc, sp.localtax1, sp.localtax2, sp.ref, sp.fk_statut as status, sp.fk_user_author, sp.date_valid, sp.date_livraison as dp,'; $sql .= ' sp.fk_multicurrency, sp.multicurrency_code, sp.multicurrency_tx, sp.multicurrency_total_ht, sp.multicurrency_total_tva as multicurrency_total_vat, sp.multicurrency_total_ttc,'; $sql .= ' sp.datec as date_creation, sp.tms as date_update,'; $sql .= " p.rowid as project_id, p.ref as project_ref,"; @@ -822,6 +822,11 @@ if ($resql) { $total = 0; $subtotal = 0; $totalarray = array(); + $totalarray['nbfield'] = 0; + $totalarray['val'] = array(); + $totalarray['val']['sp.total_ht'] = 0; + $totalarray['val']['sp.total_tva'] = 0; + $totalarray['val']['sp.total_ttc'] = 0; while ($i < min($num, $limit)) { $obj = $db->fetch_object($resql); @@ -956,7 +961,7 @@ if ($resql) { if (!$i) { $totalarray['pos'][$totalarray['nbfield']] = 'sp.total_ht'; } - $totalarray['val']['sp.total_ht'] += $obj->total_ht; + $totalarray['val']['sp.total_ht'] += $obj->total_ht; } // Amount VAT if (!empty($arrayfields['sp.total_tva']['checked'])) { From dde51a23f0768e325349a09c6d0c26897a039950 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 22:01:59 +0100 Subject: [PATCH 103/180] fix php8 warning sometimes $size == '' and cause warnings later in the code --- htdocs/core/lib/functions.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 61f81416f29..1ff47bd2de3 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3391,7 +3391,7 @@ function dol_trunc($string, $size = 40, $trunc = 'right', $stringencoding = 'UTF { global $conf; - if ($size == 0 || !empty($conf->global->MAIN_DISABLE_TRUNC)) { + if (empty($size) || !empty($conf->global->MAIN_DISABLE_TRUNC)) { return $string; } From ff690861c436ef2331aa8116bdf41d004b633495 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 22:50:14 +0100 Subject: [PATCH 104/180] fix php8 warnings --- htdocs/comm/action/index.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index 3616de126be..c6b1a75f2fe 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -1212,7 +1212,7 @@ if (count($listofextcals)) { // LOW = 0 to 4 // MEDIUM = 5 // HIGH = 6 to 9 - if ($icalevent['PRIORITY']) { + if (!empty($icalevent['PRIORITY'])) { $event->priority = $icalevent['PRIORITY']; } @@ -1233,7 +1233,7 @@ if (count($listofextcals)) { // X-MICROSOFT-CDO-BUSYSTATUS:OOF + TRANSP:OPAQUE => Away from the office / off-site } - if ($icalevent['LOCATION']) { + if (!empty($icalevent['LOCATION'])) { $event->location = $icalevent['LOCATION']; } From 11a6961c132856118b00c119a6a0a39ad6f978dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 16 Mar 2021 23:02:28 +0100 Subject: [PATCH 105/180] fix php8 warning --- htdocs/comm/action/index.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index 3616de126be..24bcfa271c3 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -1138,7 +1138,11 @@ if (count($listofextcals)) { if (isset($icalevent['DTSTART;VALUE=DATE'])) { // fullday event // For full day events, date are also GMT but they wont but converted using tz during output $datestart = dol_stringtotime($icalevent['DTSTART;VALUE=DATE'], 1); - $dateend = dol_stringtotime($icalevent['DTEND;VALUE=DATE'], 1) - 1; // We remove one second to get last second of day + if (empty($icalevent['DTEND;VALUE=DATE'])) { + $dateend = $datestart + 86400 - 1; + } else { + $dateend = dol_stringtotime($icalevent['DTEND;VALUE=DATE'], 1) - 1; // We remove one second to get last second of day + } //print 'x'.$datestart.'-'.$dateend;exit; //print dol_print_date($dateend,'dayhour','gmt'); $event->fulldayevent = 1; From c24e3006c04ab079d1ab0dd657b24ac207d79d21 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Wed, 17 Mar 2021 08:46:31 +0100 Subject: [PATCH 106/180] Update llx_10_c_regions.sql --- htdocs/install/mysql/data/llx_10_c_regions.sql | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/htdocs/install/mysql/data/llx_10_c_regions.sql b/htdocs/install/mysql/data/llx_10_c_regions.sql index ddda0f7ff32..f10b86fca7a 100644 --- a/htdocs/install/mysql/data/llx_10_c_regions.sql +++ b/htdocs/install/mysql/data/llx_10_c_regions.sql @@ -32,7 +32,15 @@ -- -- --- Regions +-- Regions +-- ID Country +-- 1 France +-- 2 Belgium +-- 3 Italy +-- 4 Spain +-- 5 Germany -> use departments +-- 6 Switzerland +-- 7 United Kingdom (NOT England) -- insert into llx_c_regions (fk_pays,code_region,cheflieu,tncc,nom) values ( 0, 0, '0',0,'-'); @@ -131,7 +139,7 @@ INSERT INTO llx_c_regions ( code_region, fk_pays, cheflieu, tncc, nom, active) v -- Regions Switzerland (id country=6) INSERT INTO llx_c_regions (fk_pays, code_region, cheflieu, tncc, nom, active) values ( 6, 601, '', 1, 'Cantons', 1); --- Regions England (id_country=7) +-- Regions UK United Kingdom (id_country=7) INSERT INTO llx_c_regions (fk_pays, code_region, cheflieu, tncc, nom, active) values ( 7, 701, '', 0, 'England', 1); INSERT INTO llx_c_regions (fk_pays, code_region, cheflieu, tncc, nom, active) values ( 7, 702, '', 0, 'Wales', 1); INSERT INTO llx_c_regions (fk_pays, code_region, cheflieu, tncc, nom, active) values ( 7, 703, '', 0, 'Scotland', 1); @@ -163,7 +171,7 @@ insert into llx_c_regions (fk_pays,code_region,cheflieu,tncc,nom) values (10,102 insert into llx_c_regions (fk_pays,code_region,cheflieu,tncc,nom) values (10,1023, '',0,'Tunis'); insert into llx_c_regions (fk_pays,code_region,cheflieu,tncc,nom) values (10,1024, '',0,'Zaghouan'); --- Region US (id country=11) +-- Region USA (id country=11) INSERT INTO llx_c_regions (fk_pays, code_region, cheflieu, tncc, nom, active) values ( 11, 1101, '', 0, 'United-States', 1); -- Regions Algeria (id country=13) From 7a1f81f521ca5aae967f3731dcd2866d5905ea34 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Wed, 17 Mar 2021 09:10:07 +0100 Subject: [PATCH 107/180] Update llx_20_c_departements.sql --- .../mysql/data/llx_20_c_departements.sql | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/htdocs/install/mysql/data/llx_20_c_departements.sql b/htdocs/install/mysql/data/llx_20_c_departements.sql index 50a1317430b..1c38927d2bf 100644 --- a/htdocs/install/mysql/data/llx_20_c_departements.sql +++ b/htdocs/install/mysql/data/llx_20_c_departements.sql @@ -33,7 +33,17 @@ -- Departements/Cantons/Provinces -- -insert into llx_c_departements (fk_region, code_departement,cheflieu,tncc,ncc,nom) values ( 0, '0', '0',0,'-','-'); +insert into llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc, nom) values ( 0, '0', '0',0,'-','-'); + + +-- Andorra Provinces (rowid country=34) +INSERT INTO llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc, nom) VALUES (34000, 'AD-002', 'AD100', NULL, NULL, 'Canillo'); +INSERT INTO llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc, nom) VALUES (34000, 'AD-003', 'AD200', NULL, NULL, 'Encamp'); +INSERT INTO llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc, nom) VALUES (34000, 'AD-004', 'AD400', NULL, NULL, 'La Massana'); +INSERT INTO llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc, nom) VALUES (34000, 'AD-005', 'AD300', NULL, NULL, 'Ordino'); +INSERT INTO llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc, nom) VALUES (34000, 'AD-006', 'AD600', NULL, NULL, 'Sant Julià de Lòria'); +INSERT INTO llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc, nom) VALUES (34000, 'AD-007', 'AD500', NULL, NULL, 'Andorra la Vella'); +INSERT INTO llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc, nom) VALUES (34000, 'AD-008', 'AD700', NULL, NULL, 'Escaldes-Engordany'); -- Departements France (id country=1) insert into llx_c_departements (fk_region, code_departement,cheflieu,tncc,ncc,nom) values ( 1,'971','97105',3,'GUADELOUPE','Guadeloupe'); @@ -1539,15 +1549,6 @@ INSERT INTO llx_c_departements (code_departement, fk_region, cheflieu, tncc, ncc INSERT INTO llx_c_departements (code_departement, fk_region, cheflieu, tncc, ncc, nom, active) VALUES ('AE-6', 22701, '', 0, '', 'Sharjah', 1); INSERT INTO llx_c_departements (code_departement, fk_region, cheflieu, tncc, ncc, nom, active) VALUES ('AE-7', 22701, '', 0, '', 'Umm al-Quwain', 1); --- Provinces Andorra (rowid country=34) -INSERT INTO llx_c_departements (code_departement, fk_region, cheflieu, tncc, ncc, nom) VALUES ('AD-002', 34000, 'AD100', NULL, NULL, 'Canillo'); -INSERT INTO llx_c_departements (code_departement, fk_region, cheflieu, tncc, ncc, nom) VALUES ('AD-003', 34000, 'AD200', NULL, NULL, 'Encamp'); -INSERT INTO llx_c_departements (code_departement, fk_region, cheflieu, tncc, ncc, nom) VALUES ('AD-004', 34000, 'AD400', NULL, NULL, 'La Massana'); -INSERT INTO llx_c_departements (code_departement, fk_region, cheflieu, tncc, ncc, nom) VALUES ('AD-005', 34000, 'AD300', NULL, NULL, 'Ordino'); -INSERT INTO llx_c_departements (code_departement, fk_region, cheflieu, tncc, ncc, nom) VALUES ('AD-006', 34000, 'AD600', NULL, NULL, 'Sant Julià de Lòria'); -INSERT INTO llx_c_departements (code_departement, fk_region, cheflieu, tncc, ncc, nom) VALUES ('AD-007', 34000, 'AD500', NULL, NULL, 'Andorra la Vella'); -INSERT INTO llx_c_departements (code_departement, fk_region, cheflieu, tncc, ncc, nom) VALUES ('AD-008', 34000, 'AD700', NULL, NULL, 'Escaldes-Engordany'); - -- Provinces Hungary (rowid country=18) INSERT INTO llx_c_departements (code_departement, fk_region, cheflieu, tncc, ncc, nom) VALUES ('HU-BK', 183300, 'HU331', NULL, NULL, 'Bács-Kiskun'); INSERT INTO llx_c_departements (code_departement, fk_region, cheflieu, tncc, ncc, nom) VALUES ('HU-BA', 182300, 'HU231', NULL, NULL, 'Baranya'); From bd58e964309f7281266c806a1fa669ab3e70a59f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 17 Mar 2021 11:12:30 +0100 Subject: [PATCH 108/180] Fix position of param --- htdocs/admin/agenda_other.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/htdocs/admin/agenda_other.php b/htdocs/admin/agenda_other.php index d23bd42848a..54d5158b4ed 100644 --- a/htdocs/admin/agenda_other.php +++ b/htdocs/admin/agenda_other.php @@ -330,16 +330,6 @@ if (empty($conf->global->AGENDA_USE_EVENT_TYPE)) { } print ''."\n"; -// AGENDA_DEFAULT_VIEW -print ''."\n"; -$htmltext = $langs->trans("ThisValueCanOverwrittenOnUserLevel", $langs->transnoentitiesnoconv("UserGUISetup")); -print ''."\n"; -print ''."\n"; -print ''."\n"; - if (!empty($conf->global->AGENDA_USE_EVENT_TYPE)) { print ''; print ''."\n"; @@ -350,6 +340,16 @@ if (!empty($conf->global->AGENDA_USE_EVENT_TYPE)) { print ''."\n"; } +// AGENDA_DEFAULT_VIEW +print ''."\n"; +$htmltext = $langs->trans("ThisValueCanOverwrittenOnUserLevel", $langs->transnoentitiesnoconv("UserGUISetup")); +print ''."\n"; +print ''."\n"; +print ''."\n"; + // AGENDA_EVENT_DEFAULT_STATUS print ''."\n"; print ''."\n"; From 8de1b4c94e31d8ffabfc519299df8357b692ad74 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 17 Mar 2021 11:34:19 +0100 Subject: [PATCH 109/180] Factorize code --- htdocs/comm/action/class/actioncomm.class.php | 7 +++-- htdocs/core/class/html.formactions.class.php | 27 +++++++++++++---- htdocs/core/lib/company.lib.php | 29 ++----------------- 3 files changed, 28 insertions(+), 35 deletions(-) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index ab6de76f340..21c130cafac 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -743,7 +743,7 @@ class ActionComm extends CommonObject $sql .= " a.fk_element as elementid, a.elementtype,"; $sql .= " a.priority, a.fulldayevent, a.location, a.transparency,"; $sql .= " a.email_msgid, a.email_subject, a.email_from, a.email_to, a.email_tocc, a.email_tobcc, a.errors_to,"; - $sql .= " c.id as type_id, c.code as type_code, c.libelle as type_label, c.color as type_color, c.picto as type_picto,"; + $sql .= " c.id as type_id, c.type as type_type, c.code as type_code, c.libelle as type_label, c.color as type_color, c.picto as type_picto,"; $sql .= " s.nom as socname,"; $sql .= " u.firstname, u.lastname as lastname,"; $sql .= " num_vote, event_paid, a.status"; @@ -779,8 +779,9 @@ class ActionComm extends CommonObject $this->type_code = $obj->type_code; $this->type_color = $obj->type_color; $this->type_picto = $obj->type_picto; - $transcode = $langs->trans("Action".$obj->type_code); - $this->type = (($transcode != "Action".$obj->type_code) ? $transcode : $obj->type_label); + $this->type = $obj->type_type; + /*$transcode = $langs->trans("Action".$obj->type_code); + $this->type = (($transcode != "Action".$obj->type_code) ? $transcode : $obj->type_label); */ $transcode = $langs->trans("Action".$obj->type_code.'Short'); $this->type_short = (($transcode != "Action".$obj->type_code.'Short') ? $transcode : ''); diff --git a/htdocs/core/class/html.formactions.class.php b/htdocs/core/class/html.formactions.class.php index f1b80843488..0380b26a392 100644 --- a/htdocs/core/class/html.formactions.class.php +++ b/htdocs/core/class/html.formactions.class.php @@ -183,6 +183,10 @@ class FormActions dol_print_error($this->db, 'FailedToGetActions'); } + require_once DOL_DOCUMENT_ROOT.'/comm/action/class/cactioncomm.class.php'; + $caction = new CActionComm($this->db); + $arraylist = $caction->liste_array(1, 'code', '', (empty($conf->global->AGENDA_USE_EVENT_TYPE) ? 1 : 0), '', 1); + $num = count($listofactions); if ($num || $forceshowtitle) { if ($typeelement == 'invoice') { @@ -275,14 +279,25 @@ class FormActions } print ''; + $actionstatic = $actioncomm; // Type - print ''; // Label diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 6f49606ebdf..09f7fbed871 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -1783,31 +1783,6 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin $out .= ''; // Type - $out .= ''; // Title From 1685e1be795b4e8e574654333f77fb595971700d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 17 Mar 2021 12:39:29 +0100 Subject: [PATCH 110/180] Fix to keep tms not updated --- htdocs/install/mysql/migration/13.0.0-14.0.0.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/13.0.0-14.0.0.sql b/htdocs/install/mysql/migration/13.0.0-14.0.0.sql index ffe09f54588..0a93f7586e3 100644 --- a/htdocs/install/mysql/migration/13.0.0-14.0.0.sql +++ b/htdocs/install/mysql/migration/13.0.0-14.0.0.sql @@ -141,7 +141,8 @@ ALTER TABLE llx_societe ADD INDEX idx_societe_warehouse(fk_warehouse); -- VMYSQL4.3 ALTER TABLE llx_societe MODIFY COLUMN fk_typent integer NULL; -- VPGSQL8.2 ALTER TABLE llx_societe ALTER COLUMN fk_typent DROP NOT NULL; -UPDATE llx_societe SET fk_typent=NULL WHERE fk_typent=0; +UPDATE llx_societe SET fk_typent=NULL, tms=tms WHERE fk_typent=0; + DELETE FROM llx_c_typent WHERE code='TE_UNKNOWN'; ALTER TABLE llx_socpeople MODIFY poste varchar(255); From bb4c8d9114335b9b3dacfafd5e5acd0614291c99 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 17 Mar 2021 12:48:59 +0100 Subject: [PATCH 111/180] FIX avoid warning with php 8 --- htdocs/core/class/defaultvalues.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/defaultvalues.class.php b/htdocs/core/class/defaultvalues.class.php index 92ea543d1a3..da9d0ad9f19 100644 --- a/htdocs/core/class/defaultvalues.class.php +++ b/htdocs/core/class/defaultvalues.class.php @@ -264,7 +264,7 @@ class DefaultValues extends CommonObject foreach ($filter as $key => $value) { if ($key == 't.rowid' || ($key == 't.entity' && !is_array($value)) || ($key == 't.user_id' && !is_array($value))) { $sqlwhere[] = $key.'='.$value; - } elseif (in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { + } elseif (isset($this->fields[$key]) && in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { $sqlwhere[] = $key.' = \''.$this->db->idate($value).'\''; } elseif ($key == 't.page' || $key == 't.param' || $key == 't.type') { $sqlwhere[] = $key.' = \''.$this->db->escape($value).'\''; From 5fc40f2b121f35fcb629c75d604dfd8de8e45782 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 17 Mar 2021 14:32:25 +0100 Subject: [PATCH 112/180] FIX avoid php 8 warning --- htdocs/core/tpl/admin_extrafields_view.tpl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/admin_extrafields_view.tpl.php b/htdocs/core/tpl/admin_extrafields_view.tpl.php index 829ccaee903..ef7d22337ac 100644 --- a/htdocs/core/tpl/admin_extrafields_view.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_view.tpl.php @@ -1,6 +1,6 @@ - * Copyright (C) 2012-2017 Regis Houssin + * Copyright (C) 2012-2021 Regis Houssin * Copyright (C) 2018-2019 Frédéric France * * This program is free software; you can redistribute it and/or modify @@ -71,7 +71,7 @@ if ($conf->multicompany->enabled) { print ''; print "\n"; -if (is_array($extrafields->attributes[$elementtype]['type']) && count($extrafields->attributes[$elementtype]['type'])) { +if (isset($extrafields->attributes[$elementtype]['type']) && is_array($extrafields->attributes[$elementtype]['type']) && count($extrafields->attributes[$elementtype]['type'])) { foreach ($extrafields->attributes[$elementtype]['type'] as $key => $value) { /*if (! dol_eval($extrafields->attributes[$elementtype]['enabled'][$key], 1)) { // TODO Uncomment this to exclude extrafields of modules not enabled. Add a link to "Show extrafields disabled" From 4d149dc3feceb45341c7660e1b7c88ca9961d174 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 17 Mar 2021 15:14:43 +0100 Subject: [PATCH 113/180] FIX avoid php 8.x warning --- htdocs/core/class/extrafields.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 5ab49dd4b9b..ca703979a7d 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -2038,7 +2038,7 @@ class ExtraFields $nofillrequired = 0; // For error when required field left blank $error_field_required = array(); - if (is_array($this->attributes[$object->table_element]['label'])) { + if (isset($this->attributes[$object->table_element]['label']) && is_array($this->attributes[$object->table_element]['label'])) { $extralabels = $this->attributes[$object->table_element]['label']; } From 432131ddc7cbfb5834f3d35722e1905819ea0323 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 17 Mar 2021 18:21:07 +0100 Subject: [PATCH 114/180] fix php8 warning --- htdocs/contrat/class/contrat.class.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 36a97be3b27..02929f281a8 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -9,7 +9,7 @@ * Copyright (C) 2013 Florian Henry * Copyright (C) 2014-2015 Marcos García * Copyright (C) 2018 Nicolas ZABOURI - * Copyright (C) 2018-2020 Frédéric France + * Copyright (C) 2018-2021 Frédéric France * Copyright (C) 2015-2018 Ferran Marcet * * This program is free software; you can redistribute it and/or modify @@ -2001,7 +2001,8 @@ class Contrat extends CommonObject $label .= ' '.$this->getLibStatut(5); }*/ $label .= '
'.$langs->trans('Ref').': '.($this->ref ? $this->ref : $this->id); - $label .= '
'.$langs->trans('RefCustomer').': '.($this->ref_customer ? $this->ref_customer : $this->ref_client); + $ref_customer = (!empty($this->ref_customer) ? $this->ref_customer : (empty($this->ref_client) ? '' : $this->ref_client)); + $label .= '
'.$langs->trans('RefCustomer').': '.$ref_customer; $label .= '
'.$langs->trans('RefSupplier').': '.$this->ref_supplier; if (!empty($this->total_ht)) { $label .= '
'.$langs->trans('AmountHT').': '.price($this->total_ht, 0, $langs, 0, -1, -1, $conf->currency); From 340f67fce890aae455fa53c037dd08b64bfed078 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 17 Mar 2021 18:23:44 +0100 Subject: [PATCH 115/180] fix php8 warning --- htdocs/accountancy/journal/sellsjournal.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index 16209e1a241..03cd3a32c3f 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -8,7 +8,7 @@ * Copyright (C) 2013-2016 Florian Henry * Copyright (C) 2013-2016 Olivier Geffroy * Copyright (C) 2014 Raphaël Doursenaud - * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018-2021 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -656,7 +656,7 @@ if (empty($action) || $action == 'view') { $periodlink = ''; $exportlink = ''; $builddate = dol_now(); - $description .= $langs->trans("DescJournalOnlyBindedVisible").'
'; + $description = $langs->trans("DescJournalOnlyBindedVisible").'
'; if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { $description .= $langs->trans("DepositsAreNotIncluded"); } else { From 0da5c8997302d8440d58bbcadf9136fc7129432d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 17 Mar 2021 18:24:37 +0100 Subject: [PATCH 116/180] Look and feel v14 --- htdocs/compta/facture/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 8f3a54fe4ba..49bacd13291 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -187,7 +187,7 @@ if (empty($user->socid)) { $checkedtypetiers = 0; $arrayfields = array( 'f.ref'=>array('label'=>"Ref", 'checked'=>1, 'position'=>5), - 'f.ref_client'=>array('label'=>"RefCustomer", 'checked'=>1, 'position'=>10), + 'f.ref_client'=>array('label'=>"RefCustomer", 'checked'=>-1, 'position'=>10), 'f.type'=>array('label'=>"Type", 'checked'=>0, 'position'=>15), 'f.date'=>array('label'=>"DateInvoice", 'checked'=>1, 'position'=>20), 'f.date_valid'=>array('label'=>"DateValidation", 'checked'=>0, 'position'=>22), From e33c035218ecfcacd62a4a7c46cb31022ddc5787 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Wed, 17 Mar 2021 18:27:20 +0100 Subject: [PATCH 117/180] Update llx_20_c_departements.sql --- .../mysql/data/llx_20_c_departements.sql | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/htdocs/install/mysql/data/llx_20_c_departements.sql b/htdocs/install/mysql/data/llx_20_c_departements.sql index 1c38927d2bf..acd9f0532b5 100644 --- a/htdocs/install/mysql/data/llx_20_c_departements.sql +++ b/htdocs/install/mysql/data/llx_20_c_departements.sql @@ -30,13 +30,13 @@ -- Do not concatenate the values in a single query, for the same reason. -- --- Departements/Cantons/Provinces +-- Departements/Cantons/Provinces/States -- insert into llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc, nom) values ( 0, '0', '0',0,'-','-'); --- Andorra Provinces (rowid country=34) +-- Andorra Parròquies (id country=34) INSERT INTO llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc, nom) VALUES (34000, 'AD-002', 'AD100', NULL, NULL, 'Canillo'); INSERT INTO llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc, nom) VALUES (34000, 'AD-003', 'AD200', NULL, NULL, 'Encamp'); INSERT INTO llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc, nom) VALUES (34000, 'AD-004', 'AD400', NULL, NULL, 'La Massana'); @@ -45,6 +45,19 @@ INSERT INTO llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc INSERT INTO llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc, nom) VALUES (34000, 'AD-007', 'AD500', NULL, NULL, 'Andorra la Vella'); INSERT INTO llx_c_departements (fk_region, code_departement, cheflieu, tncc, ncc, nom) VALUES (34000, 'AD-008', 'AD700', NULL, NULL, 'Escaldes-Engordany'); + +-- Austria States (Bundesländer) (id country=41) +INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'B','BURGENLAND','Burgenland',1); +INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'K','KAERNTEN','Kärnten',1); +INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'N','NIEDEROESTERREICH','Niederösterreich',1); +INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'O','OBEROESTERREICH','Oberösterreich',1); +INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'S','SALZBURG','Salzburg',1); +INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'ST','STEIERMARK','Steiermark',1); +INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'T','TIROL','Tirol',1); +INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'V','VORARLBERG','Vorarlberg',1); +INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'W','WIEN','Wien',1); + + -- Departements France (id country=1) insert into llx_c_departements (fk_region, code_departement,cheflieu,tncc,ncc,nom) values ( 1,'971','97105',3,'GUADELOUPE','Guadeloupe'); insert into llx_c_departements (fk_region, code_departement,cheflieu,tncc,ncc,nom) values ( 2,'972','97209',3,'MARTINIQUE','Martinique'); @@ -149,16 +162,6 @@ insert into llx_c_departements (fk_region, code_departement,cheflieu,tncc,ncc,no insert into llx_c_departements (fk_region, code_departement,cheflieu,tncc,ncc,nom) values (11,'94','94028',2,'VAL-DE-MARNE','Val-de-Marne'); insert into llx_c_departements (fk_region, code_departement,cheflieu,tncc,ncc,nom) values (11,'95','95500',2,'VAL-D OISE','Val-d Oise'); --- Provinces Austria (id country=41) -INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'B','BURGENLAND','Burgenland',1); -INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'K','KAERNTEN','Kärnten',1); -INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'N','NIEDEROESTERREICH','Niederösterreich',1); -INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'O','OBEROESTERREICH','Oberösterreich',1); -INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'S','SALZBURG','Salzburg',1); -INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'ST','STEIERMARK','Steiermark',1); -INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'T','TIROL','Tirol',1); -INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'V','VORARLBERG','Vorarlberg',1); -INSERT INTO llx_c_departements (fk_region, code_departement, ncc, nom, active) VALUES (4101,'W','WIEN','Wien',1); -- Provinces Belgium (id country=2) insert into llx_c_departements (fk_region, code_departement,cheflieu,tncc,ncc,nom) values (201,'01','',1,'ANVERS','Anvers'); From efaa2be3b81a7504e271b6b4e8c74ba413ca3453 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 17 Mar 2021 18:38:24 +0100 Subject: [PATCH 118/180] fix php8 warnings --- htdocs/core/photos_resize.php | 2 +- htdocs/projet/stats/index.php | 21 +++++++++++---------- htdocs/projet/tasks/stats/index.php | 12 ++++++------ 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/htdocs/core/photos_resize.php b/htdocs/core/photos_resize.php index 008e524f299..f03436c0043 100644 --- a/htdocs/core/photos_resize.php +++ b/htdocs/core/photos_resize.php @@ -142,7 +142,7 @@ if ($modulepart == 'produit' || $modulepart == 'product' || $modulepart == 'serv if ($result <= 0) { dol_print_error($db, 'Failed to load object'); } - $dir = $conf->project->multidir_output[$object->entity]; // By default + $dir = $conf->projet->multidir_output[$object->entity]; // By default } } elseif ($modulepart == 'propal') { require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; diff --git a/htdocs/projet/stats/index.php b/htdocs/projet/stats/index.php index f25e78bceda..afbc4f7c55b 100644 --- a/htdocs/projet/stats/index.php +++ b/htdocs/projet/stats/index.php @@ -99,7 +99,7 @@ if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) $data1 = array(array(0=>$langs->trans("None"), 1=>1)); } - $filenamenb = $conf->project->dir_output."/stats/projectbystatus.png"; + $filenamenb = $conf->projet->dir_output."/stats/projectbystatus.png"; $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=projectstats&file=projectbystatus.png'; $px = new DolGraph(); $mesg = $px->isGraphKo(); @@ -150,7 +150,7 @@ if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) $data = $stats_project->getNbByMonthWithPrevYear($endyear, $startyear); //var_dump($data); -$filenamenb = $conf->project->dir_output."/stats/projectnbprevyear-".$year.".png"; +$filenamenb = $conf->projet->dir_output."/stats/projectnbprevyear-".$year.".png"; $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=projectstats&file=projectnbprevyear-'.$year.'.png'; $px1 = new DolGraph(); @@ -182,7 +182,7 @@ if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) { //var_dump($data); // $data = array(array('Lib',val1,val2,val3),...) - $filenamenb = $conf->project->dir_output."/stats/projectamountprevyear-".$year.".png"; + $filenamenb = $conf->projet->dir_output."/stats/projectamountprevyear-".$year.".png"; $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=projectstats&file=projectamountprevyear-'.$year.'.png'; $px2 = new DolGraph(); @@ -217,14 +217,15 @@ if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) { //var_dump($data); // $data = array(array('Lib',val1,val2,val3),...) - $filenamenb = $conf->project->dir_output."/stats/projecttransrateprevyear-".$year.".png"; + $filenamenb = $conf->projet->dir_output."/stats/projecttransrateprevyear-".$year.".png"; $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=projectstats&file=projecttransrateprevyear-'.$year.'.png'; $px3 = new DolGraph(); $mesg = $px3->isGraphKo(); if (!$mesg) { $px3->SetData($data); - $i = $startyear; $legend = array(); + $i = $startyear; + $legend = array(); while ($i <= $endyear) { $legend[] = $i; $i++; @@ -268,7 +269,7 @@ $head[$h][1] = $langs->trans("ByMonthYear"); $head[$h][2] = 'byyear'; $h++; -complete_head_from_modules($conf, $langs, null, $head, $h, $type); +complete_head_from_modules($conf, $langs, null, $head, $h, 'projet_stats'); print dol_get_fiche_head($head, 'byyear', $langs->trans("Statistics"), -1, ''); @@ -337,9 +338,9 @@ foreach ($data_all_year as $val) { print '
'; print ''; if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) { - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; } print ''; $oldyear = $year; @@ -350,7 +351,7 @@ print ''; print '
'; -$stringtoshow .= '
'.$label.''.$label2.''.$langs->trans("NbOfMembers").' ('.$langs->trans("AllTime").')
'.$val['label'].''.$val['label2'].''.$val['nb'].'
'.$langs->trans("AgendaExtNb", $key)."'; //print $formadmin->selectColor($conf->global->$color, "google_agenda_color".$key, $colorlist); - print $formother->selectColor((GETPOST("AGENDA_EXT_COLOR_".$id.'_'.$key) ?GETPOST("AGENDA_EXT_COLOR_".$id.'_'.$key) : $object->conf->$color), "AGENDA_EXT_COLOR_".$id.'_'.$key, 'extsitesconfig', 1, '', 'hideifnotset'); + $color_value = (GETPOST("AGENDA_EXT_COLOR_".$id.'_'.$key) ?GETPOST("AGENDA_EXT_COLOR_".$id.'_'.$key) : (empty($object->conf->$color) ? 'ffffff' : $object->conf->$color)); + print $formother->selectColor($color_value, "AGENDA_EXT_COLOR_".$id.'_'.$key, 'extsitesconfig', 1, '', 'hideifnotset'); print '
'.$form->textwithpicto($langs->trans("AGENDA_DEFAULT_VIEW"), $htmltext).' '."\n"; -$tmplist = array(''=>' ', 'show_list'=>$langs->trans("ViewList"), 'show_month'=>$langs->trans("ViewCal"), 'show_week'=>$langs->trans("ViewWeek"), 'show_day'=>$langs->trans("ViewDay"), 'show_peruser'=>$langs->trans("ViewPerUser")); -print $form->selectarray('AGENDA_DEFAULT_VIEW', $tmplist, $conf->global->AGENDA_DEFAULT_VIEW); -print '
'.$form->textwithpicto($langs->trans("AGENDA_DEFAULT_VIEW"), $htmltext).' '."\n"; +$tmplist = array(''=>' ', 'show_list'=>$langs->trans("ViewList"), 'show_month'=>$langs->trans("ViewCal"), 'show_week'=>$langs->trans("ViewWeek"), 'show_day'=>$langs->trans("ViewDay"), 'show_peruser'=>$langs->trans("ViewPerUser")); +print $form->selectarray('AGENDA_DEFAULT_VIEW', $tmplist, $conf->global->AGENDA_DEFAULT_VIEW); +print '
'.$langs->trans("AGENDA_EVENT_DEFAULT_STATUS").''; - print $actioncomm->getTypePicto(); - if ($actioncomm->type_code == 'AC_OTH' && $actioncomm->code == 'TICKET_MSG') { - print $langs->trans("Message"); - } else { - print $actioncomm->type_short ? $actioncomm->type_short : $actioncomm->type; + $labeltype = $actionstatic->type_code; + if (empty($conf->global->AGENDA_USE_EVENT_TYPE) && empty($arraylist[$labeltype])) { + $labeltype = 'AC_OTH'; } + if ($actionstatic->type_code == 'AC_OTH' && $actionstatic->code == 'TICKET_MSG') { + $labeltype = $langs->trans("Message"); + } else { + if (!empty($arraylist[$labeltype])) { + $labeltype = $arraylist[$labeltype]; + } + if ($actionstatic->type_code == 'AC_OTH_AUTO' && ($actionstatic->type_code != $actionstatic->code) && $labeltype && !empty($arraylist[$actionstatic->code])) { + $labeltype .= ' - '.$arraylist[$actionstatic->code]; // Use code in priority on type_code + } + } + print ''; + print $actioncomm->getTypePicto(); + print $labeltype; print ''; - // TODO Code common with code into showactions - $imgpicto = ''; - if (!empty($conf->global->AGENDA_USE_EVENT_TYPE)) { - if ($actionstatic->type_picto) { - $imgpicto .= img_picto('', $actionstatic->type_picto); - } else { - if ($actionstatic->type_code == 'AC_RDV') { - $imgpicto .= img_picto('', 'object_group', '', false, 0, 0, '', 'paddingright').' '; - } elseif ($actionstatic->type_code == 'AC_TEL') { - $imgpicto .= img_picto('', 'object_phoning', '', false, 0, 0, '', 'paddingright').' '; - } elseif ($actionstatic->type_code == 'AC_FAX') { - $imgpicto .= img_picto('', 'object_phoning_fax', '', false, 0, 0, '', 'paddingright').' '; - } elseif ($actionstatic->type_code == 'AC_EMAIL' || $actionstatic->type_code == 'AC_EMAIL_IN') { - $imgpicto .= img_picto('', 'object_email', '', false, 0, 0, '', 'paddingright').' '; - } elseif ($actionstatic->type_code == 'AC_INT') { - $imgpicto .= img_picto('', 'object_intervention', '', false, 0, 0, '', 'paddingright').' '; - } elseif ($actionstatic->type_code == 'AC_OTH' && $actionstatic->code == 'TICKET_MSG') { - $imgpicto = img_picto('', 'object_conversation', '', false, 0, 0, '', 'paddingright').' '; - } elseif (!preg_match('/_AUTO/', $actionstatic->type_code)) { - $imgpicto .= img_picto('', 'object_action', '', false, 0, 0, '', 'paddingright').' '; - } - } - } - $out .= $imgpicto; $labeltype = $actionstatic->type_code; if (empty($conf->global->AGENDA_USE_EVENT_TYPE) && empty($arraylist[$labeltype])) { $labeltype = 'AC_OTH'; @@ -1822,7 +1797,9 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin $labeltype .= ' - '.$arraylist[$actionstatic->code]; // Use code in priority on type_code } } - $out .= dol_trunc($labeltype, 28); + $out .= ''; + $out .= $actionstatic->getTypePicto(); + $out .= $labeltype; $out .= ' 
0 ? '&userid='.$userid : '').'">'.$year.''.$val['nb'].''.($val['total'] ?price(price2num($val['total'], 'MT'), 1) : '0').''.($val['avg'] ?price(price2num($val['avg'], 'MT'), 1) : '0').''.($val['weighted'] ?price(price2num($val['weighted'], 'MT'), 1) : '0').''.($val['total'] ? price(price2num($val['total'], 'MT'), 1) : '0').''.($val['avg'] ? price(price2num($val['avg'], 'MT'), 1) : '0').''.(isset($val['weighted']) ? price(price2num($val['weighted'], 'MT'), 1) : '0').'
'; +$stringtoshow = ''; - print ''; + print ''; print ''; print ''; } print ''; - print ''; + print ''; print ''; print ''; $oldyear = $year; @@ -208,7 +208,7 @@ print ''; print '
'; -$stringtoshow .= '
'; if ($mesg) { print $mesg; } else { diff --git a/htdocs/projet/tasks/stats/index.php b/htdocs/projet/tasks/stats/index.php index 81c05fde59d..be6ac3c7802 100644 --- a/htdocs/projet/tasks/stats/index.php +++ b/htdocs/projet/tasks/stats/index.php @@ -90,7 +90,7 @@ if (!empty($year)) { $data = $stats_tasks->getNbByMonthWithPrevYear($endyear, $startyear); //var_dump($data); -$filenamenb = $conf->project->dir_output."/stats/tasknbprevyear-".$year.".png"; +$filenamenb = $conf->projet->dir_output."/stats/tasknbprevyear-".$year.".png"; $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=taskstats&file=tasknbprevyear-'.$year.'.png'; $px1 = new DolGraph(); @@ -134,12 +134,12 @@ if (!count($arrayyears)) { $h = 0; $head = array(); -$head[$h][0] = DOL_URL_ROOT.'/projet/tasks/stats/index.php?mode='.$mode; +$head[$h][0] = DOL_URL_ROOT.'/projet/tasks/stats/index.php?'; $head[$h][1] = $langs->trans("ByMonthYear"); $head[$h][2] = 'byyear'; $h++; -complete_head_from_modules($conf, $langs, null, $head, $h, $type); +complete_head_from_modules($conf, $langs, null, $head, $h, 'projet_tasks_stats'); print dol_get_fiche_head($head, 'byyear', $langs->trans("Statistics"), -1, ''); @@ -191,13 +191,13 @@ foreach ($data_all_year as $val) { $oldyear--; print '
0 ? '&userid='.$userid : '').'">'.$oldyear.' 0 ? '&userid='.$userid : '').'">'.$oldyear.'0
0 ? '&userid='.$userid : '').'">'.$year.' 0 ? '&userid='.$userid : '').'">'.$year.''.$val['nb'].'
'; +$stringtoshow = '\n"; } @@ -993,6 +993,7 @@ if ($action == 'create' || $action == 'adduserldap') { // Country print ''; print ''; } print "\n"; From 75cf5e3599ac3bcf57c6f16784bd5f5008ed59e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 17 Mar 2021 23:55:46 +0100 Subject: [PATCH 135/180] fix php8 warning --- htdocs/adherents/admin/adherent.php | 3 ++- htdocs/compta/bank/transfer.php | 1 + htdocs/core/tpl/admin_extrafields_add.tpl.php | 4 ++-- htdocs/core/tpl/admin_extrafields_edit.tpl.php | 4 ++-- htdocs/core/tpl/admin_extrafields_view.tpl.php | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/htdocs/adherents/admin/adherent.php b/htdocs/adherents/admin/adherent.php index 092d9b0de38..7a9effb6e0d 100644 --- a/htdocs/adherents/admin/adherent.php +++ b/htdocs/adherents/admin/adherent.php @@ -254,7 +254,8 @@ if ($conf->facture->enabled) { if (!empty($conf->product->enabled) || !empty($conf->service->enabled)) { print ''; print ''; } print "\n"; diff --git a/htdocs/compta/bank/transfer.php b/htdocs/compta/bank/transfer.php index 0533a04c12f..c94f8810cd8 100644 --- a/htdocs/compta/bank/transfer.php +++ b/htdocs/compta/bank/transfer.php @@ -233,6 +233,7 @@ $account_from = ''; $account_to = ''; $label = ''; $amount = ''; +$amountto = ''; if ($error) { $account_from = GETPOST('account_from', 'int'); diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index c22d3d932de..b0ab3e5bb76 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -204,8 +204,8 @@ $listofexamplesforlink = 'Societe:societe/class/societe.class.php
Contact:con - -multicompany->enabled) { ?> + +multicompany->enabled)) { ?> diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php index bba6fd1bb7c..73721d4c0c4 100644 --- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php @@ -141,7 +141,7 @@ $listofexamplesforlink = 'Societe:societe/class/societe.class.php
Contact:con - + @@ -295,7 +295,7 @@ if (in_array($type, array_keys($typewecanchangeinto))) { -multicompany->enabled) { ?> +multicompany->enabled)) { ?> diff --git a/htdocs/core/tpl/admin_extrafields_view.tpl.php b/htdocs/core/tpl/admin_extrafields_view.tpl.php index ef7d22337ac..82b5db4f74b 100644 --- a/htdocs/core/tpl/admin_extrafields_view.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_view.tpl.php @@ -65,7 +65,7 @@ print ''; print ''; print ''; print ''; -if ($conf->multicompany->enabled) { +if (empty($conf->multicompany->enabled)) { print ''; } print ''; From 7878f3cba0781269c0aa86cb68de3d883d25a16d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 08:08:37 +0100 Subject: [PATCH 136/180] fix php8 warning --- htdocs/admin/system/dolibarr.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/system/dolibarr.php b/htdocs/admin/system/dolibarr.php index 92b60cce4e2..cfdc196d79d 100644 --- a/htdocs/admin/system/dolibarr.php +++ b/htdocs/admin/system/dolibarr.php @@ -442,7 +442,7 @@ foreach ($configfileparameters as $key => $value) { print img_warning($langs->trans('SwitchThisForABetterSecurity', 0)); } } else { - print ${$newkey}; + print (empty(${$newkey}) ? '' : ${$newkey}); } if ($newkey == 'dolibarr_main_url_root' && ${$newkey} != DOL_MAIN_URL_ROOT) { print ' (currently overwritten by autodetected value: '.DOL_MAIN_URL_ROOT.')'; From 0769c8ee22a0943a93ffeeaa66ac08f89a1e0022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 08:16:28 +0100 Subject: [PATCH 137/180] fix php8 warnings --- htdocs/cron/list.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/cron/list.php b/htdocs/cron/list.php index 35da0b83659..712b2ceb163 100644 --- a/htdocs/cron/list.php +++ b/htdocs/cron/list.php @@ -62,7 +62,7 @@ if (!$sortfield) { if (!$sortorder) { $sortorder = 'DESC,ASC'; } - +$optioncss = GETPOST('optioncss', 'alpha'); $mode = GETPOST('mode', 'aZ09'); //Search criteria $search_status = (GETPOSTISSET('search_status') ?GETPOST('search_status', 'int') : GETPOST('status', 'int')); @@ -71,7 +71,11 @@ $search_module_name = GETPOST("search_module_name", 'alpha'); $search_lastresult = GETPOST("search_lastresult", "alpha"); $securitykey = GETPOST('securitykey', 'alpha'); -$diroutputmassaction = $conf->cronjob->dir_output.'/temp/massgeneration/'.$user->id; +$outputdir = $conf->cron->dir_output; +if (empty($outputdir)) { + $outputdir = $conf->cronjob->dir_output; +} +$diroutputmassaction = $outputdir.'/temp/massgeneration/'.$user->id; $object = new Cronjob($db); @@ -360,7 +364,7 @@ $arrayofmassactions = array( 'enable'=>$langs->trans("CronStatusActiveBtn"), 'disable'=>$langs->trans("CronStatusInactiveBtn"), ); -if ($user->rights->mymodule->delete) { +if ($user->rights->cron->delete) { $arrayofmassactions['predelete'] = ''.$langs->trans("Delete"); } if (in_array($massaction, array('presend', 'predelete'))) { From c147d47ad98afd0ed975c9c0889e960222132dee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 08:23:06 +0100 Subject: [PATCH 138/180] fix php8 warning --- htdocs/adherents/card.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 1286e19b416..48b27ec49c2 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -1691,6 +1691,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { */ print '
'; + $isinspip = 0; $parameters = array(); $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been if (empty($reshook)) { From 39acef8df769399fb2c8601f849e51e7e521454f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 08:26:47 +0100 Subject: [PATCH 139/180] Update card.php --- htdocs/adherents/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 48b27ec49c2..b34e39872ac 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -1828,7 +1828,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { $genallowed = $user->rights->adherent->lire; $delallowed = $user->rights->adherent->creer; - print $formfile->showdocuments('member', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0, '', '', '', $object->default_lang, '', $object); + print $formfile->showdocuments('member', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0, '', '', '', (empty($object->default_lang) ? '' : $object->default_lang), '', $object); $somethingshown = $formfile->numoffiles; // Show links to link elements From c33347b46146a58af4881fd4b89a87ab6fecb755 Mon Sep 17 00:00:00 2001 From: Alexis LAURIER Date: Thu, 18 Mar 2021 10:43:26 +0100 Subject: [PATCH 140/180] add invoice getNomUrl hook --- htdocs/compta/facture/class/facture.class.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index ef0962a0169..b1eaaf8acf8 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -1504,6 +1504,13 @@ class Facture extends CommonInvoice } } + global $action; + $hookmanager->initHooks(array('invoicedao')); + $parameters = array('id'=>$this->id, 'getnomurl'=>$result, 'notooltip' => $notooltip, 'addlinktonotes' => $addlinktonotes, 'save_lastsearch_value'=> $save_lastsearch_value, 'target' => $target); + $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + if ($reshook > 0) $result = $hookmanager->resPrint; + else $result .= $hookmanager->resPrint; + return $result; } From b41622319455c55124d489d611f49be982c328ce Mon Sep 17 00:00:00 2001 From: Alexis LAURIER Date: Thu, 18 Mar 2021 11:16:49 +0100 Subject: [PATCH 141/180] fix --- htdocs/compta/facture/class/facture.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index b1eaaf8acf8..2c5a52280b8 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -1504,7 +1504,7 @@ class Facture extends CommonInvoice } } - global $action; + global $action, $hookmanager; $hookmanager->initHooks(array('invoicedao')); $parameters = array('id'=>$this->id, 'getnomurl'=>$result, 'notooltip' => $notooltip, 'addlinktonotes' => $addlinktonotes, 'save_lastsearch_value'=> $save_lastsearch_value, 'target' => $target); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks From ac6b6f22e71f2a5d9ed09789ab266ec5e5b5348c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Mar 2021 11:39:23 +0100 Subject: [PATCH 142/180] Enhance sanitizing of data --- htdocs/core/class/doleditor.class.php | 3 ++- htdocs/core/lib/functions.lib.php | 12 ++++-------- htdocs/theme/eldy/global.inc.php | 5 +++++ htdocs/theme/eldy/main_menu_fa_icons.inc.php | 2 +- htdocs/theme/md/info-box.inc.php | 2 +- htdocs/website/index.php | 14 +++++++++----- 6 files changed, 22 insertions(+), 16 deletions(-) diff --git a/htdocs/core/class/doleditor.class.php b/htdocs/core/class/doleditor.class.php index c9f3d3837d1..25b1a43486a 100644 --- a/htdocs/core/class/doleditor.class.php +++ b/htdocs/core/class/doleditor.class.php @@ -170,7 +170,8 @@ class DolEditor readOnly : '.($this->readonly ? 'true' : 'false').', htmlEncodeOutput :'.$htmlencode_force.', allowedContent :'.($disallowAnyContent ? 'false' : 'true').', - extraAllowedContent : \'\', + extraAllowedContent : \'a[target];div{float,display}\', /* Add the style float and display into div to default other allowed tags */ + disallowedContent : '.($disallowAnyContent ? '\'\'' : '\'\'').', fullPage : '.($fullpage ? 'true' : 'false').', toolbar: \''.$this->toolbarname.'\', toolbarStartupExpanded: '.($this->toolbarstartexpanded ? 'true' : 'false').', diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 5edc3e3bde7..d2383679995 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3515,12 +3515,12 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ 'object_technic', 'object_ticket', 'object_trip', 'object_user', 'object_group', 'object_member', 'object_phoning', 'object_phoning_mobile', 'object_phoning_fax', 'object_email', 'object_website', 'object_movement', 'off', 'on', 'order', - 'paiment', 'play', 'pdf', 'playdisabled', 'previous', 'poll', 'pos', 'printer', 'product', 'propal', 'projecttask', 'stock', 'resize', 'service', 'stats', 'trip', + 'paiment', 'play', 'pdf', 'playdisabled', 'previous', 'poll', 'pos', 'printer', 'product', 'propal', 'stock', 'resize', 'service', 'stats', 'trip', 'setup', 'share-alt', 'sign-out', 'split', 'stripe', 'stripe-s', 'switch_off', 'switch_on', 'tools', 'unlink', 'uparrow', 'user', 'vcard', 'wrench', 'github', 'jabber', 'skype', 'twitter', 'facebook', 'linkedin', 'instagram', 'snapchat', 'youtube', 'google-plus-g', 'whatsapp', 'chevron-left', 'chevron-right', 'chevron-down', 'chevron-top', 'commercial', 'companies', 'generic', 'home', 'hrm', 'members', 'products', 'invoicing', - 'payment', 'pencil-ruler', 'preview', 'project', 'projectpub', 'refresh', 'salary', 'shipment', 'supplier_invoice', 'technic', 'ticket', + 'payment', 'pencil-ruler', 'preview', 'project', 'projectpub', 'projecttask', 'refresh', 'salary', 'shipment', 'supplier_invoice', 'technic', 'ticket', 'error', 'warning', 'recruitmentcandidature', 'recruitmentjobposition', 'resource', 'shapes', 'supplier_proposal', 'supplier_order', 'supplier_invoice', @@ -3563,7 +3563,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ 'intervention'=>'ambulance', 'invoice'=>'file-invoice-dollar', 'multicurrency'=>'dollar-sign', 'order'=>'file-invoice', 'error'=>'exclamation-triangle', 'warning'=>'exclamation-triangle', 'other'=>'square', - 'playdisabled'=>'play', 'pdf'=>'file-pdf', 'poll'=>'check-double', 'pos'=>'cash-register', 'preview'=>'binoculars', 'project'=>'sitemap', 'projectpub'=>'sitemap', 'projecttask'=>'tasks', 'propal'=>'file-signature', + 'playdisabled'=>'play', 'pdf'=>'file-pdf', 'poll'=>'check-double', 'pos'=>'cash-register', 'preview'=>'binoculars', 'project'=>'project-diagram', 'projectpub'=>'project-diagram', 'projecttask'=>'tasks', 'propal'=>'file-signature', 'payment'=>'money-check-alt', 'phoning'=>'phone', 'phoning_mobile'=>'mobile-alt', 'phoning_fax'=>'fax', 'previous'=>'arrow-alt-circle-left', 'printer'=>'print', 'product'=>'cube', 'service'=>'concierge-bell', 'recruitmentjobposition'=>'id-card-alt', 'recruitmentcandidature'=>'id-badge', 'resize'=>'crop', 'supplier_order'=>'dol-order_supplier', 'supplier_proposal'=>'file-signature', @@ -6253,10 +6253,6 @@ function dol_string_onlythesehtmltags($stringtoclean, $cleanalsosomestyles = 1, "ol", "p", "q", "s", "section", "span", "strike", "strong", "title", "table", "tr", "th", "td", "u", "ul", "sup", "sub", "blockquote", "pre", "h1", "h2", "h3", "h4", "h5", "h6" ); - $allowed_attributes = array( - "class", "href", "src", "style", "id", "name", "data-html" - ); - $allowed_tags_string = join("><", $allowed_tags); $allowed_tags_string = '<'.$allowed_tags_string.'>'; @@ -6301,7 +6297,7 @@ function dol_string_onlythesehtmltags($stringtoclean, $cleanalsosomestyles = 1, * * @see dol_escape_htmltag() strip_tags() dol_string_nohtmltag() dol_string_onlythesehtmltags() dol_string_neverthesehtmltags() */ -function dol_string_onlythesehtmlattributes($stringtoclean, $allowed_attributes = array("class", "href", "src", "style", "id", "name", "data-html")) +function dol_string_onlythesehtmlattributes($stringtoclean, $allowed_attributes = array("alt", "class", "contenteditable", "data-html", "href", "id", "name", "src", "style", "target", "title")) { if (class_exists('DOMDocument')) { $dom = new DOMDocument(); diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index b3efe3f293f..9a9b4e7ed6c 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -4619,6 +4619,11 @@ span[phptag] { border: none; font-weight: normal; } +.websitebar .button.bordertransp { + color: unset; + text-decoration: unset !important; +} + .websitebar { border-bottom: 1px solid #ccc; background: #e6e6e6; diff --git a/htdocs/theme/eldy/main_menu_fa_icons.inc.php b/htdocs/theme/eldy/main_menu_fa_icons.inc.php index e9f6893ca98..339235ce2c7 100644 --- a/htdocs/theme/eldy/main_menu_fa_icons.inc.php +++ b/htdocs/theme/eldy/main_menu_fa_icons.inc.php @@ -119,7 +119,7 @@ div.mainmenu.mrp::before { } div.mainmenu.project::before { - content: "\f0e8"; + content: "\f542"; } div.mainmenu.ticket::before { diff --git a/htdocs/theme/md/info-box.inc.php b/htdocs/theme/md/info-box.inc.php index 1ab7dc02bf0..0946315391a 100644 --- a/htdocs/theme/md/info-box.inc.php +++ b/htdocs/theme/md/info-box.inc.php @@ -375,7 +375,7 @@ if (GETPOSTISSET('THEME_SATURATE_RATIO')) { content: "\f571"; } .fa-dol-project:before { - content: "\f0e8"; + content: "\f542"; } .fa-dol-commande:before, .fa-dol-order_supplier:before { diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 36601a39f52..034583d3440 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -2230,9 +2230,10 @@ if ($action == 'generatesitemaps') { $action = 'preview'; } + /* -* View -*/ + * View + */ $form = new Form($db); $formadmin = new FormAdmin($db); @@ -2428,7 +2429,8 @@ if (!GETPOST('hide_websitemenu')) { if ($websitekey && $websitekey != '-1' && ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' || $action == 'deletesite')) { print '   '; - print ''; + //print ''; + print ''.dol_escape_htmltag($langs->trans("EditCss")).''; $importlabel = $langs->trans("ImportSite"); $exportlabel = $langs->trans("ExportSite"); @@ -2726,9 +2728,11 @@ if (!GETPOST('hide_websitemenu')) { print '   '; - print ''; + //print ''; + print ''.dol_escape_htmltag($langs->trans("EditPageMeta")).''; - print ''; + //print ''; + print ''.dol_escape_htmltag($langs->trans("EditHTMLSource")).''; print ''."\n"; print '
'; From c58ed983476796b9c5a0d253ad9759e29206bd0d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Mar 2021 12:04:24 +0100 Subject: [PATCH 143/180] Removed deprecated images --- .../img/menus => common/weather}/index.html | 0 .../weather/weather-clear-night.png | Bin .../img => common}/weather/weather-clear.png | Bin .../weather/weather-clouds-night.png | Bin .../img => common}/weather/weather-clouds.png | Bin .../weather/weather-few-clouds-night.png | Bin .../weather/weather-few-clouds.png | Bin .../weather/weather-freezing-rain.png | Bin .../img => common}/weather/weather-hail.png | Bin .../weather/weather-many-clouds.png | Bin .../img => common}/weather/weather-mist.png | Bin .../weather/weather-showers-day.png | Bin .../weather/weather-showers-night.png | Bin .../weather/weather-showers-scattered-day.png | Bin .../weather-showers-scattered-night.png | Bin .../weather/weather-showers-scattered.png | Bin .../weather/weather-showers.png | Bin .../weather/weather-snow-rain.png | Bin .../weather/weather-snow-scattered-day.png | Bin .../weather/weather-snow-scattered-night.png | Bin .../weather/weather-snow-scattered.png | Bin .../img => common}/weather/weather-snow.png | Bin .../weather/weather-storm-day.png | Bin .../weather/weather-storm-night.png | Bin .../img => common}/weather/weather-storm.png | Bin htdocs/theme/eldy/img/menus/README.md | 14 --- htdocs/theme/eldy/img/menus/agenda.png | Bin 535 -> 0 bytes htdocs/theme/eldy/img/menus/agenda_over.png | Bin 349 -> 0 bytes htdocs/theme/eldy/img/menus/bank.png | Bin 628 -> 0 bytes htdocs/theme/eldy/img/menus/bank_over.png | Bin 399 -> 0 bytes htdocs/theme/eldy/img/menus/commercial.png | Bin 579 -> 0 bytes .../theme/eldy/img/menus/commercial_over.png | Bin 403 -> 0 bytes htdocs/theme/eldy/img/menus/company.png | Bin 457 -> 0 bytes htdocs/theme/eldy/img/menus/company_over.png | Bin 235 -> 0 bytes htdocs/theme/eldy/img/menus/ecm.png | Bin 683 -> 0 bytes htdocs/theme/eldy/img/menus/ecm_over.png | Bin 406 -> 0 bytes htdocs/theme/eldy/img/menus/externalsite.png | Bin 436 -> 0 bytes .../eldy/img/menus/externalsite_over.png | Bin 286 -> 0 bytes htdocs/theme/eldy/img/menus/ftp.png | Bin 613 -> 0 bytes htdocs/theme/eldy/img/menus/ftp_over.png | Bin 358 -> 0 bytes htdocs/theme/eldy/img/menus/generic1.png | Bin 424 -> 0 bytes htdocs/theme/eldy/img/menus/generic1_over.png | Bin 296 -> 0 bytes htdocs/theme/eldy/img/menus/generic2.png | Bin 424 -> 0 bytes htdocs/theme/eldy/img/menus/generic2_over.png | Bin 433 -> 0 bytes htdocs/theme/eldy/img/menus/generic3.png | Bin 424 -> 0 bytes htdocs/theme/eldy/img/menus/generic3_over.png | Bin 296 -> 0 bytes htdocs/theme/eldy/img/menus/generic4.png | Bin 424 -> 0 bytes htdocs/theme/eldy/img/menus/generic4_over.png | Bin 296 -> 0 bytes htdocs/theme/eldy/img/menus/globe.png | Bin 864 -> 0 bytes htdocs/theme/eldy/img/menus/globe_over.png | Bin 533 -> 0 bytes htdocs/theme/eldy/img/menus/holiday.png | Bin 881 -> 0 bytes htdocs/theme/eldy/img/menus/holiday_over.png | Bin 881 -> 0 bytes htdocs/theme/eldy/img/menus/home.png | Bin 516 -> 0 bytes htdocs/theme/eldy/img/menus/home_over.png | Bin 300 -> 0 bytes htdocs/theme/eldy/img/menus/mail.png | Bin 553 -> 0 bytes htdocs/theme/eldy/img/menus/mail_over.png | Bin 325 -> 0 bytes htdocs/theme/eldy/img/menus/members.png | Bin 726 -> 0 bytes htdocs/theme/eldy/img/menus/members_over.png | Bin 460 -> 0 bytes htdocs/theme/eldy/img/menus/menu.png | Bin 257 -> 0 bytes htdocs/theme/eldy/img/menus/money.png | Bin 916 -> 0 bytes htdocs/theme/eldy/img/menus/money_over.png | Bin 599 -> 0 bytes htdocs/theme/eldy/img/menus/pointofsale.png | Bin 419 -> 0 bytes .../theme/eldy/img/menus/pointofsale_over.png | Bin 252 -> 0 bytes htdocs/theme/eldy/img/menus/products.png | Bin 407 -> 0 bytes htdocs/theme/eldy/img/menus/products_over.png | Bin 226 -> 0 bytes htdocs/theme/eldy/img/menus/project.png | Bin 351 -> 0 bytes htdocs/theme/eldy/img/menus/project_over.png | Bin 227 -> 0 bytes htdocs/theme/eldy/img/menus/shop.png | Bin 484 -> 0 bytes htdocs/theme/eldy/img/menus/shop_over.png | Bin 331 -> 0 bytes htdocs/theme/eldy/img/menus/ticket.png | Bin 112 -> 0 bytes htdocs/theme/eldy/img/menus/ticket_over.png | Bin 112 -> 0 bytes htdocs/theme/eldy/img/menus/tools.png | Bin 697 -> 0 bytes htdocs/theme/eldy/img/menus/tools_over.png | Bin 442 -> 0 bytes htdocs/theme/eldy/img/menus_black/agenda.png | Bin 550 -> 0 bytes .../eldy/img/menus_black/agenda_over.png | Bin 349 -> 0 bytes htdocs/theme/eldy/img/menus_black/bank.png | Bin 669 -> 0 bytes .../theme/eldy/img/menus_black/bank_over.png | Bin 404 -> 0 bytes .../theme/eldy/img/menus_black/commercial.png | Bin 593 -> 0 bytes .../eldy/img/menus_black/commercial_over.png | Bin 403 -> 0 bytes htdocs/theme/eldy/img/menus_black/company.png | Bin 483 -> 0 bytes .../eldy/img/menus_black/company_over.png | Bin 239 -> 0 bytes htdocs/theme/eldy/img/menus_black/ecm.png | Bin 712 -> 0 bytes .../theme/eldy/img/menus_black/ecm_over.png | Bin 406 -> 0 bytes .../eldy/img/menus_black/externalsite.png | Bin 460 -> 0 bytes .../img/menus_black/externalsite_over.png | Bin 286 -> 0 bytes htdocs/theme/eldy/img/menus_black/ftp.png | Bin 628 -> 0 bytes .../theme/eldy/img/menus_black/ftp_over.png | Bin 358 -> 0 bytes .../theme/eldy/img/menus_black/generic1.png | Bin 454 -> 0 bytes .../eldy/img/menus_black/generic1_over.png | Bin 296 -> 0 bytes .../theme/eldy/img/menus_black/generic2.png | Bin 454 -> 0 bytes .../eldy/img/menus_black/generic2_over.png | Bin 296 -> 0 bytes .../theme/eldy/img/menus_black/generic3.png | Bin 454 -> 0 bytes .../eldy/img/menus_black/generic3_over.png | Bin 296 -> 0 bytes .../theme/eldy/img/menus_black/generic4.png | Bin 454 -> 0 bytes .../eldy/img/menus_black/generic4_over.png | Bin 296 -> 0 bytes htdocs/theme/eldy/img/menus_black/globe.png | Bin 882 -> 0 bytes .../theme/eldy/img/menus_black/globe_over.png | Bin 533 -> 0 bytes htdocs/theme/eldy/img/menus_black/holiday.png | Bin 838 -> 0 bytes .../eldy/img/menus_black/holiday_over.png | Bin 838 -> 0 bytes htdocs/theme/eldy/img/menus_black/home.png | Bin 573 -> 0 bytes .../theme/eldy/img/menus_black/home_over.png | Bin 313 -> 0 bytes htdocs/theme/eldy/img/menus_black/mail.png | Bin 569 -> 0 bytes .../theme/eldy/img/menus_black/mail_over.png | Bin 325 -> 0 bytes htdocs/theme/eldy/img/menus_black/members.png | Bin 754 -> 0 bytes .../eldy/img/menus_black/members_over.png | Bin 460 -> 0 bytes htdocs/theme/eldy/img/menus_black/menu.png | Bin 101 -> 0 bytes htdocs/theme/eldy/img/menus_black/money.png | Bin 948 -> 0 bytes .../theme/eldy/img/menus_black/money_over.png | Bin 600 -> 0 bytes .../eldy/img/menus_black/pointofsale.png | Bin 434 -> 0 bytes .../eldy/img/menus_black/pointofsale_over.png | Bin 260 -> 0 bytes .../theme/eldy/img/menus_black/products.png | Bin 428 -> 0 bytes .../eldy/img/menus_black/products_over.png | Bin 231 -> 0 bytes htdocs/theme/eldy/img/menus_black/project.png | Bin 378 -> 0 bytes .../eldy/img/menus_black/project_over.png | Bin 237 -> 0 bytes htdocs/theme/eldy/img/menus_black/shop.png | Bin 499 -> 0 bytes .../theme/eldy/img/menus_black/shop_over.png | Bin 331 -> 0 bytes htdocs/theme/eldy/img/menus_black/ticket.png | Bin 110 -> 0 bytes .../eldy/img/menus_black/ticket_over.png | Bin 110 -> 0 bytes htdocs/theme/eldy/img/menus_black/tools.png | Bin 720 -> 0 bytes .../theme/eldy/img/menus_black/tools_over.png | Bin 442 -> 0 bytes htdocs/theme/eldy/img/weather/index.html | 0 htdocs/theme/md/img/menus/agenda.png | Bin 131 -> 0 bytes htdocs/theme/md/img/menus/bank.png | Bin 158 -> 0 bytes htdocs/theme/md/img/menus/cart.png | Bin 259 -> 0 bytes htdocs/theme/md/img/menus/chart.png | Bin 127 -> 0 bytes htdocs/theme/md/img/menus/commercial.png | Bin 133 -> 0 bytes htdocs/theme/md/img/menus/company.png | Bin 105 -> 0 bytes htdocs/theme/md/img/menus/ecm.png | Bin 178 -> 0 bytes htdocs/theme/md/img/menus/externalsite.png | Bin 124 -> 0 bytes htdocs/theme/md/img/menus/ftp.png | Bin 92 -> 0 bytes htdocs/theme/md/img/menus/generic1.png | Bin 424 -> 0 bytes htdocs/theme/md/img/menus/generic1_over.png | Bin 296 -> 0 bytes htdocs/theme/md/img/menus/generic2.png | Bin 424 -> 0 bytes htdocs/theme/md/img/menus/generic2_over.png | Bin 433 -> 0 bytes htdocs/theme/md/img/menus/generic3.png | Bin 424 -> 0 bytes htdocs/theme/md/img/menus/generic3_over.png | Bin 296 -> 0 bytes htdocs/theme/md/img/menus/generic4.png | Bin 424 -> 0 bytes htdocs/theme/md/img/menus/generic4_over.png | Bin 296 -> 0 bytes htdocs/theme/md/img/menus/globe.png | Bin 390 -> 0 bytes htdocs/theme/md/img/menus/graph.png | Bin 179 -> 0 bytes htdocs/theme/md/img/menus/holiday.png | Bin 308 -> 0 bytes htdocs/theme/md/img/menus/home.png | Bin 179 -> 0 bytes htdocs/theme/md/img/menus/index.html | 0 htdocs/theme/md/img/menus/mail.png | Bin 211 -> 0 bytes htdocs/theme/md/img/menus/members.png | Bin 210 -> 0 bytes htdocs/theme/md/img/menus/menu.png | Bin 257 -> 0 bytes htdocs/theme/md/img/menus/money.png | Bin 256 -> 0 bytes htdocs/theme/md/img/menus/pointofsale.png | Bin 131 -> 0 bytes htdocs/theme/md/img/menus/products.png | Bin 323 -> 0 bytes htdocs/theme/md/img/menus/project.png | Bin 156 -> 0 bytes htdocs/theme/md/img/menus/shop.png | Bin 403 -> 0 bytes htdocs/theme/md/img/menus/ticket.png | Bin 112 -> 0 bytes htdocs/theme/md/img/menus/tools.png | Bin 239 -> 0 bytes htdocs/theme/md/img/weather/index.html | 0 .../md/img/weather/weather-clear-night.png | Bin 2276 -> 0 bytes htdocs/theme/md/img/weather/weather-clear.png | Bin 7439 -> 0 bytes .../md/img/weather/weather-clouds-night.png | Bin 4363 -> 0 bytes .../theme/md/img/weather/weather-clouds.png | Bin 6267 -> 0 bytes .../img/weather/weather-few-clouds-night.png | Bin 2212 -> 0 bytes .../md/img/weather/weather-few-clouds.png | Bin 5730 -> 0 bytes .../md/img/weather/weather-freezing-rain.png | Bin 5046 -> 0 bytes htdocs/theme/md/img/weather/weather-hail.png | Bin 5090 -> 0 bytes .../md/img/weather/weather-many-clouds.png | Bin 4399 -> 0 bytes htdocs/theme/md/img/weather/weather-mist.png | Bin 1524 -> 0 bytes .../md/img/weather/weather-showers-day.png | Bin 6954 -> 0 bytes .../md/img/weather/weather-showers-night.png | Bin 6123 -> 0 bytes .../weather/weather-showers-scattered-day.png | Bin 6317 -> 0 bytes .../weather-showers-scattered-night.png | Bin 5171 -> 0 bytes .../img/weather/weather-showers-scattered.png | Bin 4937 -> 0 bytes .../theme/md/img/weather/weather-showers.png | Bin 5138 -> 0 bytes .../md/img/weather/weather-snow-rain.png | Bin 5406 -> 0 bytes .../weather/weather-snow-scattered-day.png | Bin 6823 -> 0 bytes .../weather/weather-snow-scattered-night.png | Bin 5583 -> 0 bytes .../md/img/weather/weather-snow-scattered.png | Bin 5038 -> 0 bytes htdocs/theme/md/img/weather/weather-snow.png | Bin 5332 -> 0 bytes .../md/img/weather/weather-storm-day.png | Bin 7437 -> 0 bytes .../md/img/weather/weather-storm-night.png | Bin 7471 -> 0 bytes htdocs/theme/md/img/weather/weather-storm.png | Bin 7261 -> 0 bytes htdocs/theme/md/main_menu_fa_icons.inc.php | 92 +++++++++++++++++- 179 files changed, 88 insertions(+), 18 deletions(-) rename htdocs/theme/{eldy/img/menus => common/weather}/index.html (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-clear-night.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-clear.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-clouds-night.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-clouds.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-few-clouds-night.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-few-clouds.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-freezing-rain.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-hail.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-many-clouds.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-mist.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-showers-day.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-showers-night.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-showers-scattered-day.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-showers-scattered-night.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-showers-scattered.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-showers.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-snow-rain.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-snow-scattered-day.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-snow-scattered-night.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-snow-scattered.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-snow.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-storm-day.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-storm-night.png (100%) rename htdocs/theme/{eldy/img => common}/weather/weather-storm.png (100%) delete mode 100644 htdocs/theme/eldy/img/menus/README.md delete mode 100644 htdocs/theme/eldy/img/menus/agenda.png delete mode 100644 htdocs/theme/eldy/img/menus/agenda_over.png delete mode 100644 htdocs/theme/eldy/img/menus/bank.png delete mode 100644 htdocs/theme/eldy/img/menus/bank_over.png delete mode 100644 htdocs/theme/eldy/img/menus/commercial.png delete mode 100644 htdocs/theme/eldy/img/menus/commercial_over.png delete mode 100644 htdocs/theme/eldy/img/menus/company.png delete mode 100644 htdocs/theme/eldy/img/menus/company_over.png delete mode 100644 htdocs/theme/eldy/img/menus/ecm.png delete mode 100644 htdocs/theme/eldy/img/menus/ecm_over.png delete mode 100644 htdocs/theme/eldy/img/menus/externalsite.png delete mode 100644 htdocs/theme/eldy/img/menus/externalsite_over.png delete mode 100644 htdocs/theme/eldy/img/menus/ftp.png delete mode 100644 htdocs/theme/eldy/img/menus/ftp_over.png delete mode 100644 htdocs/theme/eldy/img/menus/generic1.png delete mode 100644 htdocs/theme/eldy/img/menus/generic1_over.png delete mode 100644 htdocs/theme/eldy/img/menus/generic2.png delete mode 100644 htdocs/theme/eldy/img/menus/generic2_over.png delete mode 100644 htdocs/theme/eldy/img/menus/generic3.png delete mode 100644 htdocs/theme/eldy/img/menus/generic3_over.png delete mode 100644 htdocs/theme/eldy/img/menus/generic4.png delete mode 100644 htdocs/theme/eldy/img/menus/generic4_over.png delete mode 100644 htdocs/theme/eldy/img/menus/globe.png delete mode 100644 htdocs/theme/eldy/img/menus/globe_over.png delete mode 100644 htdocs/theme/eldy/img/menus/holiday.png delete mode 100644 htdocs/theme/eldy/img/menus/holiday_over.png delete mode 100644 htdocs/theme/eldy/img/menus/home.png delete mode 100644 htdocs/theme/eldy/img/menus/home_over.png delete mode 100644 htdocs/theme/eldy/img/menus/mail.png delete mode 100644 htdocs/theme/eldy/img/menus/mail_over.png delete mode 100644 htdocs/theme/eldy/img/menus/members.png delete mode 100644 htdocs/theme/eldy/img/menus/members_over.png delete mode 100644 htdocs/theme/eldy/img/menus/menu.png delete mode 100644 htdocs/theme/eldy/img/menus/money.png delete mode 100644 htdocs/theme/eldy/img/menus/money_over.png delete mode 100644 htdocs/theme/eldy/img/menus/pointofsale.png delete mode 100644 htdocs/theme/eldy/img/menus/pointofsale_over.png delete mode 100644 htdocs/theme/eldy/img/menus/products.png delete mode 100644 htdocs/theme/eldy/img/menus/products_over.png delete mode 100644 htdocs/theme/eldy/img/menus/project.png delete mode 100644 htdocs/theme/eldy/img/menus/project_over.png delete mode 100644 htdocs/theme/eldy/img/menus/shop.png delete mode 100644 htdocs/theme/eldy/img/menus/shop_over.png delete mode 100644 htdocs/theme/eldy/img/menus/ticket.png delete mode 100644 htdocs/theme/eldy/img/menus/ticket_over.png delete mode 100644 htdocs/theme/eldy/img/menus/tools.png delete mode 100644 htdocs/theme/eldy/img/menus/tools_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/agenda.png delete mode 100644 htdocs/theme/eldy/img/menus_black/agenda_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/bank.png delete mode 100644 htdocs/theme/eldy/img/menus_black/bank_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/commercial.png delete mode 100644 htdocs/theme/eldy/img/menus_black/commercial_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/company.png delete mode 100644 htdocs/theme/eldy/img/menus_black/company_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/ecm.png delete mode 100644 htdocs/theme/eldy/img/menus_black/ecm_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/externalsite.png delete mode 100644 htdocs/theme/eldy/img/menus_black/externalsite_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/ftp.png delete mode 100644 htdocs/theme/eldy/img/menus_black/ftp_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/generic1.png delete mode 100644 htdocs/theme/eldy/img/menus_black/generic1_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/generic2.png delete mode 100644 htdocs/theme/eldy/img/menus_black/generic2_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/generic3.png delete mode 100644 htdocs/theme/eldy/img/menus_black/generic3_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/generic4.png delete mode 100644 htdocs/theme/eldy/img/menus_black/generic4_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/globe.png delete mode 100644 htdocs/theme/eldy/img/menus_black/globe_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/holiday.png delete mode 100644 htdocs/theme/eldy/img/menus_black/holiday_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/home.png delete mode 100644 htdocs/theme/eldy/img/menus_black/home_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/mail.png delete mode 100644 htdocs/theme/eldy/img/menus_black/mail_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/members.png delete mode 100644 htdocs/theme/eldy/img/menus_black/members_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/menu.png delete mode 100644 htdocs/theme/eldy/img/menus_black/money.png delete mode 100644 htdocs/theme/eldy/img/menus_black/money_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/pointofsale.png delete mode 100644 htdocs/theme/eldy/img/menus_black/pointofsale_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/products.png delete mode 100644 htdocs/theme/eldy/img/menus_black/products_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/project.png delete mode 100644 htdocs/theme/eldy/img/menus_black/project_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/shop.png delete mode 100644 htdocs/theme/eldy/img/menus_black/shop_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/ticket.png delete mode 100644 htdocs/theme/eldy/img/menus_black/ticket_over.png delete mode 100644 htdocs/theme/eldy/img/menus_black/tools.png delete mode 100644 htdocs/theme/eldy/img/menus_black/tools_over.png delete mode 100644 htdocs/theme/eldy/img/weather/index.html delete mode 100644 htdocs/theme/md/img/menus/agenda.png delete mode 100644 htdocs/theme/md/img/menus/bank.png delete mode 100644 htdocs/theme/md/img/menus/cart.png delete mode 100644 htdocs/theme/md/img/menus/chart.png delete mode 100644 htdocs/theme/md/img/menus/commercial.png delete mode 100644 htdocs/theme/md/img/menus/company.png delete mode 100644 htdocs/theme/md/img/menus/ecm.png delete mode 100644 htdocs/theme/md/img/menus/externalsite.png delete mode 100644 htdocs/theme/md/img/menus/ftp.png delete mode 100644 htdocs/theme/md/img/menus/generic1.png delete mode 100644 htdocs/theme/md/img/menus/generic1_over.png delete mode 100644 htdocs/theme/md/img/menus/generic2.png delete mode 100644 htdocs/theme/md/img/menus/generic2_over.png delete mode 100644 htdocs/theme/md/img/menus/generic3.png delete mode 100644 htdocs/theme/md/img/menus/generic3_over.png delete mode 100644 htdocs/theme/md/img/menus/generic4.png delete mode 100644 htdocs/theme/md/img/menus/generic4_over.png delete mode 100644 htdocs/theme/md/img/menus/globe.png delete mode 100644 htdocs/theme/md/img/menus/graph.png delete mode 100644 htdocs/theme/md/img/menus/holiday.png delete mode 100644 htdocs/theme/md/img/menus/home.png delete mode 100644 htdocs/theme/md/img/menus/index.html delete mode 100644 htdocs/theme/md/img/menus/mail.png delete mode 100644 htdocs/theme/md/img/menus/members.png delete mode 100644 htdocs/theme/md/img/menus/menu.png delete mode 100644 htdocs/theme/md/img/menus/money.png delete mode 100644 htdocs/theme/md/img/menus/pointofsale.png delete mode 100644 htdocs/theme/md/img/menus/products.png delete mode 100644 htdocs/theme/md/img/menus/project.png delete mode 100644 htdocs/theme/md/img/menus/shop.png delete mode 100644 htdocs/theme/md/img/menus/ticket.png delete mode 100644 htdocs/theme/md/img/menus/tools.png delete mode 100644 htdocs/theme/md/img/weather/index.html delete mode 100644 htdocs/theme/md/img/weather/weather-clear-night.png delete mode 100644 htdocs/theme/md/img/weather/weather-clear.png delete mode 100644 htdocs/theme/md/img/weather/weather-clouds-night.png delete mode 100644 htdocs/theme/md/img/weather/weather-clouds.png delete mode 100644 htdocs/theme/md/img/weather/weather-few-clouds-night.png delete mode 100644 htdocs/theme/md/img/weather/weather-few-clouds.png delete mode 100644 htdocs/theme/md/img/weather/weather-freezing-rain.png delete mode 100644 htdocs/theme/md/img/weather/weather-hail.png delete mode 100644 htdocs/theme/md/img/weather/weather-many-clouds.png delete mode 100644 htdocs/theme/md/img/weather/weather-mist.png delete mode 100644 htdocs/theme/md/img/weather/weather-showers-day.png delete mode 100644 htdocs/theme/md/img/weather/weather-showers-night.png delete mode 100644 htdocs/theme/md/img/weather/weather-showers-scattered-day.png delete mode 100644 htdocs/theme/md/img/weather/weather-showers-scattered-night.png delete mode 100644 htdocs/theme/md/img/weather/weather-showers-scattered.png delete mode 100644 htdocs/theme/md/img/weather/weather-showers.png delete mode 100644 htdocs/theme/md/img/weather/weather-snow-rain.png delete mode 100644 htdocs/theme/md/img/weather/weather-snow-scattered-day.png delete mode 100644 htdocs/theme/md/img/weather/weather-snow-scattered-night.png delete mode 100644 htdocs/theme/md/img/weather/weather-snow-scattered.png delete mode 100644 htdocs/theme/md/img/weather/weather-snow.png delete mode 100644 htdocs/theme/md/img/weather/weather-storm-day.png delete mode 100644 htdocs/theme/md/img/weather/weather-storm-night.png delete mode 100644 htdocs/theme/md/img/weather/weather-storm.png diff --git a/htdocs/theme/eldy/img/menus/index.html b/htdocs/theme/common/weather/index.html similarity index 100% rename from htdocs/theme/eldy/img/menus/index.html rename to htdocs/theme/common/weather/index.html diff --git a/htdocs/theme/eldy/img/weather/weather-clear-night.png b/htdocs/theme/common/weather/weather-clear-night.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-clear-night.png rename to htdocs/theme/common/weather/weather-clear-night.png diff --git a/htdocs/theme/eldy/img/weather/weather-clear.png b/htdocs/theme/common/weather/weather-clear.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-clear.png rename to htdocs/theme/common/weather/weather-clear.png diff --git a/htdocs/theme/eldy/img/weather/weather-clouds-night.png b/htdocs/theme/common/weather/weather-clouds-night.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-clouds-night.png rename to htdocs/theme/common/weather/weather-clouds-night.png diff --git a/htdocs/theme/eldy/img/weather/weather-clouds.png b/htdocs/theme/common/weather/weather-clouds.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-clouds.png rename to htdocs/theme/common/weather/weather-clouds.png diff --git a/htdocs/theme/eldy/img/weather/weather-few-clouds-night.png b/htdocs/theme/common/weather/weather-few-clouds-night.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-few-clouds-night.png rename to htdocs/theme/common/weather/weather-few-clouds-night.png diff --git a/htdocs/theme/eldy/img/weather/weather-few-clouds.png b/htdocs/theme/common/weather/weather-few-clouds.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-few-clouds.png rename to htdocs/theme/common/weather/weather-few-clouds.png diff --git a/htdocs/theme/eldy/img/weather/weather-freezing-rain.png b/htdocs/theme/common/weather/weather-freezing-rain.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-freezing-rain.png rename to htdocs/theme/common/weather/weather-freezing-rain.png diff --git a/htdocs/theme/eldy/img/weather/weather-hail.png b/htdocs/theme/common/weather/weather-hail.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-hail.png rename to htdocs/theme/common/weather/weather-hail.png diff --git a/htdocs/theme/eldy/img/weather/weather-many-clouds.png b/htdocs/theme/common/weather/weather-many-clouds.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-many-clouds.png rename to htdocs/theme/common/weather/weather-many-clouds.png diff --git a/htdocs/theme/eldy/img/weather/weather-mist.png b/htdocs/theme/common/weather/weather-mist.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-mist.png rename to htdocs/theme/common/weather/weather-mist.png diff --git a/htdocs/theme/eldy/img/weather/weather-showers-day.png b/htdocs/theme/common/weather/weather-showers-day.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-showers-day.png rename to htdocs/theme/common/weather/weather-showers-day.png diff --git a/htdocs/theme/eldy/img/weather/weather-showers-night.png b/htdocs/theme/common/weather/weather-showers-night.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-showers-night.png rename to htdocs/theme/common/weather/weather-showers-night.png diff --git a/htdocs/theme/eldy/img/weather/weather-showers-scattered-day.png b/htdocs/theme/common/weather/weather-showers-scattered-day.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-showers-scattered-day.png rename to htdocs/theme/common/weather/weather-showers-scattered-day.png diff --git a/htdocs/theme/eldy/img/weather/weather-showers-scattered-night.png b/htdocs/theme/common/weather/weather-showers-scattered-night.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-showers-scattered-night.png rename to htdocs/theme/common/weather/weather-showers-scattered-night.png diff --git a/htdocs/theme/eldy/img/weather/weather-showers-scattered.png b/htdocs/theme/common/weather/weather-showers-scattered.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-showers-scattered.png rename to htdocs/theme/common/weather/weather-showers-scattered.png diff --git a/htdocs/theme/eldy/img/weather/weather-showers.png b/htdocs/theme/common/weather/weather-showers.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-showers.png rename to htdocs/theme/common/weather/weather-showers.png diff --git a/htdocs/theme/eldy/img/weather/weather-snow-rain.png b/htdocs/theme/common/weather/weather-snow-rain.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-snow-rain.png rename to htdocs/theme/common/weather/weather-snow-rain.png diff --git a/htdocs/theme/eldy/img/weather/weather-snow-scattered-day.png b/htdocs/theme/common/weather/weather-snow-scattered-day.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-snow-scattered-day.png rename to htdocs/theme/common/weather/weather-snow-scattered-day.png diff --git a/htdocs/theme/eldy/img/weather/weather-snow-scattered-night.png b/htdocs/theme/common/weather/weather-snow-scattered-night.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-snow-scattered-night.png rename to htdocs/theme/common/weather/weather-snow-scattered-night.png diff --git a/htdocs/theme/eldy/img/weather/weather-snow-scattered.png b/htdocs/theme/common/weather/weather-snow-scattered.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-snow-scattered.png rename to htdocs/theme/common/weather/weather-snow-scattered.png diff --git a/htdocs/theme/eldy/img/weather/weather-snow.png b/htdocs/theme/common/weather/weather-snow.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-snow.png rename to htdocs/theme/common/weather/weather-snow.png diff --git a/htdocs/theme/eldy/img/weather/weather-storm-day.png b/htdocs/theme/common/weather/weather-storm-day.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-storm-day.png rename to htdocs/theme/common/weather/weather-storm-day.png diff --git a/htdocs/theme/eldy/img/weather/weather-storm-night.png b/htdocs/theme/common/weather/weather-storm-night.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-storm-night.png rename to htdocs/theme/common/weather/weather-storm-night.png diff --git a/htdocs/theme/eldy/img/weather/weather-storm.png b/htdocs/theme/common/weather/weather-storm.png similarity index 100% rename from htdocs/theme/eldy/img/weather/weather-storm.png rename to htdocs/theme/common/weather/weather-storm.png diff --git a/htdocs/theme/eldy/img/menus/README.md b/htdocs/theme/eldy/img/menus/README.md deleted file mode 100644 index 72f376c3f2b..00000000000 --- a/htdocs/theme/eldy/img/menus/README.md +++ /dev/null @@ -1,14 +0,0 @@ - -Tutorial to create a new image for menu: - -1) First find an image. -2) With Gimp, open image and check there is a alpha channel. If not add one (Menu Color - Convert to alpha). -3) Convert image into black and white (Menu Image - Mode - Grey levels). -4) Use the degrade tool with option (Menu Tools - Paint - Degrade - CTRL+L): -* Mode: Erase color (you can also try "Clear only") -* Opacity: 50 +/- -* Offset: 0 -* PP toward transparent -* Shape: Linear -* Select on image top of file and drag to bottom. -Il est possible aussi d'augmenter la transparence globale depuis le calque. diff --git a/htdocs/theme/eldy/img/menus/agenda.png b/htdocs/theme/eldy/img/menus/agenda.png deleted file mode 100644 index 0caf60eb2717497ba44e1024046c5f239f889c09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 535 zcmV+y0_gpTP)Uhj_Y;|Jcy)9sfMF0Q5&zjpl;7r)k>@euKNxuyBmSL{{owJ6bGU^aygh=QXz`v4*vIQb*h295Q@D#R zdU%O0Qe5_CQ@k2cH)MPP_c4HG3uhosg24znq2j0U2z^f*f;Re|s}LteADVWk_y_30 z*My*%aXt&dGE&~2y=Do_$pe8H3-h*3Vbaueofg`wT`b~L$L}` zY&hc7lwCKiE(?w~e?vk+WDO)(oHejckw zRE9W<8Rk(4d1F>W^^hu>?4iJ)6ULIc3KY3pLR(6e# zJ?nMTPNYA)TDXNF>Av{-b{@u!&%1BNr`(;^aN*I0sy!~WDO_>2Yvw~!%e5PN7J7A^(P^1~iJPrjPH?D2lwjK5lYTLGLyFK^aWG0#Nyt6;v z4i;h%YQqs`?qD}>6Ba`4G7i8NM$S-e-h-eg)`{*4;qakMEAl?g`FaQm4O2d2Jt0y=F zHK!nZj=}g~#AlS;W;wEXd+Uh zKc?Y{&iDLN?1j-@jKd);#sD-$2P{HMtj7@C!&j`=x%oX%yMpFO`Ip-^f*bcCJE`*n zdlhOWk@7#cZv?e(xNE|X)L-?(az$z{x6cHl<%&$Y-ZqC2p>TP*{YMx@C|>CLz@Eoe z#RV_7KMSL+ig>!-^F^Tc4#(m6i_h4P#E@k{+;IL#+5RIx62T}Dy5bAA<0Wju1H3jU;%M$Txv`HwiH(ZgVdci^o?-(s#wS+SoM)D{M9Qeese O0000(5tdqYd|{^Wiz`G1g) zpyPWjZP)}Buv)3qBv1d22T{0zO|yIk)5(SoG;Rci^1Pu*UXYxuMLvW1;sqArC?4gR zO@sU-xszOPa(xF0yn|=p4&sBnNUABHDBpuOa25~XMcfHfO?m$Dr$YXn*MCj8xXQ$^lW{%axs12`hr{PMg3A$S=t)CY!|%O-=48qjjG z6h5WaM`~ni?IyKR=N#zEp4IgTMlG{VI*6BMn@QtfChNZ_Kd2eZC<5>o@;z8vI7wxZ t&O)+dpvnJzn0yDuiu7gqMltzXd;>DS_lJJz^o9Tc002ovPDHLkV1j3wy>kEn diff --git a/htdocs/theme/eldy/img/menus/commercial.png b/htdocs/theme/eldy/img/menus/commercial.png deleted file mode 100644 index 2c36155fb96f35003f27d0244e4e065896c64089..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 579 zcmV-J0=)f+P)ZlNe3S9z7B56VadZ^Yh|g`q zZHL{NL(4aG{)L`Jl_dhC95ER9M-n@7}y{wg2Y%ReZGlp@oljBABFyzCBkY+ zbX(%1W0|DoKl7G~x$*dlSO8gV6vqMwVNAz|!6eLvtUNL~%wYZ*HW#KjD2%9z`4H3b z-7(QYGO;sJA-$>iI2f%ETI{t{>@+kLUlzk0^i%CgLYau~g+UG)Nq-lE6f(ITpAdZ% zihE+WyxZ|b&|M*`{D-a3!R`3E=%f%&+Ha!SkM34{NVL_E&yvb$_LI039~;dz0!gxJ z_OrSb9}A5XN+FOWf#xxp+=`Ehx(a2y@R$s4#Ro@T)KJJF?U&H($94NjDjM>mvV*K5 zyokfRoY)Ct@_0T1(xM>BOG-ihI6LAaxNSGof+H$oA*GN+d@hV%zm*vf{|j}e#eaRB RZ*Kqq002ovPDHLkV1nKy6Sx2X diff --git a/htdocs/theme/eldy/img/menus/commercial_over.png b/htdocs/theme/eldy/img/menus/commercial_over.png deleted file mode 100644 index 51146c7235930cfa7317b7b56bfa673896789db1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC{tgQo&7+=1E!OM?7@ z84?y8*w7GQ@ZkT13l0Jb9}4!|h%y37{_}Kk45?tedii1(t0D(m!s?CB^w-||pDC_& z?q%A=)vbTmr8yiqGXGzzz~#d;=bY+(dUoHl9~~*$J3@?1@BDcy-0g8PML=h5#tKc- zlEwS_{|3lKs7aa_i|1O*;E_pxAZ{UNlp=HPpX?6SO)4>MlU&ynzF{`s@uZ<2f^urTgAGbi6nk_9DD1_5Ru9{E&h*hc_6jl?QCvzi+Pm z>bUvug|=4eISEaxIOV=YDLCu*lkc2fd|ERry_Va5Xa4a*cwR1Zj0Z3z7(8A5T-G@y GGywoeL(ND4 diff --git a/htdocs/theme/eldy/img/menus/company.png b/htdocs/theme/eldy/img/menus/company.png deleted file mode 100644 index 39a3b75db682f1e3a08c6fd96e0f2a9e47fa327c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 457 zcmV;)0XF`LP)^V3p(V8QjvrN2fatna6LpIBp`sJSBNMP2;~Ba5`}YAfSI|w=?{@@ zXWXo*nPonH0ORvDyKNfRT91`A6G-J#`BXlYPvxzd#9yZlIOiD%TmAwIaLp&`_y}2k z9ty6R#wspDmY3*YAEq2&1=$Qi!j|vh3a0cRk&O;rUZD?L`cN@0FQ8zHf{1nb2HG&C z5$p02Q&@*3ao%}}8|=Z96Kq7e{3s7>w9Ak9z)GLX?*h(w#8IYv1#2*+Qe=7CAK+&w znilRnpX0Q=z&$$1OBGEJ>yKNYi*uOLMAhfDQMkn^^0JH_h89ezxxXsyZ<}Kj%^@B+XWjdOdjX;3o%s lnZb*vyVVKryj%c(LT?WU17;}wbCdu8002ovPDHLkV1kVTVgdjF diff --git a/htdocs/theme/eldy/img/menus/ecm.png b/htdocs/theme/eldy/img/menus/ecm.png deleted file mode 100644 index 3ba3f280a541117464d651fe9c3953ba078ea61b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 683 zcmV;c0#yBpP)b1U|!U?FdWdi(@H%8jhlw zW~cXIp?nh@z<0w!WP>Q3JMc_sln+8j+`=dI5(AJ7;_%7g78*eeMX(kFY?V)nS$K>$ z>M9x_2%-w?rAhD|ybLtPv&o+*eVxQm_;l?2mt{>q`J zzslFfDLgeyMiPh$M0e+NDnA01pe)wmsf+HumT!iOxM$do0EkMAak%Fq9|F(}M~u0f z&c2o(jhhZjA;_bdnLB;%EN*(Bqp#(w;F7}vh-RDG`dU6A&N|G2Xtt@fPvzAf95>8> zXtt?^Kgy55LBnK-W}BLNTfP8#Xs(XkhVc;1HZ}6Jd`T?8RuvB^vDGjNqS>bUo|dnJ z^@cnU$84B6v#5@z228-1&2&x&gz7WkeRr9#K8jZOs zCej-F9uUno74WuvK1^3>AjZCnxwoJT68m}>X^)903qcRvw})u$oj%FPx(>kM$2LMDsON#jt Rfj|HN002ovPDHLkV1i+{IDP;C diff --git a/htdocs/theme/eldy/img/menus/ecm_over.png b/htdocs/theme/eldy/img/menus/ecm_over.png deleted file mode 100644 index d72bc896f38f035876234f20a072daa5c6d05b46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC{tgQo&7+=1E!OM?7@ z859;ga5(T^Afe&I27`hN0TVXv?ag6eU}W@kaSW+oe0wpxj75>h<)V;>>x&)#ul~AV zA)S`-{L4Q5z#s2(J3mYK_by3TBVg+-sO))ajW2VQtY^1QYK*p&r#Z9DtiqKWDvZ<_ zSA7?3@LT!4e&+;+6~Q63Z!UbXnrOl*5FVtud>8ZVe?RQi9X$34@G{PxnDa|@a*XrM z38uDsmp-=}t@x;SI_3WHS2x!@e7eNl?&Wghy5fjqwO^K;d2BcFj=?);welMqjytXM zcq})Mr|RT!@ynrK_MWYnW|;W4B6yES=8f6++_xAdW&e=5=(plw>v_!u)4e0+|6Hfn z*)mN6Pt4t2-C|Z(SSnweD~P_pA2)<8um@iF|0i%b>7W@J6Ij>mguBF?hQA KxvXY`eINfq}8w)5S5Qg7NK)MtA2#k)!p# z9Gg5vOqRNIY-mtvVqkIjfAZfNhlClEoESrbT|<+)&R$y<_wd8K^Iv}ot+;!*w0e2* z`?`7D_adgH{t2DR&|Y4FgnkIN$@9jT*Dhw|_7Rc@}*2{$)#`F33Li1fand^@WSD15N%>8Ua?Hvo$+sb{^f8Xn(# zH^Jb{3io1WW#>nAscuitW*21al@zv{CoLr@^j+IH$vmEK&&ngS=NsqM8P$D$7IQM; zhfm}BRbBVy@%meTC~tl~w_yJliTTMn{T+_pC}-I+aZUcz*9TVRz2(bbI)8v| zL(UHm<5M9|TeJ$30qG-tf+Fv6G5tHukV#7hdtFe|z8T828H@HH>%L&d<2_bL!z^ mLAzt4d2h@+oZl?Vz_4#OSMi2i$L~N#F?hQAxvXC2>g7{?E`HB@PTz28 z{{8zGx5D@^K8%l!Fun#}DC~gILJ5q(4b-q7uW)2ad~^I(cm|^+?`)1|V#}2HX85V_ z5JsUIzKgTX@K9`-65j+r6z;$%ob{Y-f;(a}@F|8SR& z>zu2CXP(!rNiDu1zA0SN#EUZzoc)sL&Y4cb7iX7_MCx1RSC9HQ>)EHl;Dy+I+D0P& zvqxQ=@a&UNSZr@F6j#N*HYk3)WisHCM;#m%TOk%vha$uM9e30k<_2Tng$f1evhbz`9 zyH$2JFZp^$2^h)lT~OI`{}lAI>OuW0ac?XYTP2)R5a-n7{k_xs`+N^95L*QtR}kma z#j@NIM z)zL0q<13?OyvAoop70;7VSE@L#)t7?e6;)r@ubFP&%>7d>4ZLn;{GTxOltVj#e9v9FA4|NqSIUmv90 zUF)`?zxmJicb5CbQuLR-nY8NKz75aL8+WtMdmj7QXujp|2(Owm+Z|q=S*)~UtmET*ESJBfDB;Q0)bGO@|Hjf0FloJXaI%+FBVUEA_?;kRvv-o4y?x7ohZT4UoK3;F%86sljzSG}9|Q|sF8 znk!pF_R6pPcK&?L-+5PUtN!#?KXBgL+5a^({^jD`(uV^W7BetNhVf^#?kZykdXB-< L)z4*}Q$iB}Ycap& diff --git a/htdocs/theme/eldy/img/menus/generic1.png b/htdocs/theme/eldy/img/menus/generic1.png deleted file mode 100644 index ef13122ace583000ba6af4096c8ca1122ca3333f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424 zcmV;Z0ayNsP)Bjdv-A;P9$cGOf z{H;>?2vYf&`T;J6{88omh13gahe~pH91pP<7lkt$<@;bV#-NgTPGA|9<6$PsFTn(v z^%%o&B4+tnm@hl7ppD!qE^i*-jqG>}G0U$(bIg!gS1}{@=4;_YKmtEwqt|v zt(fKK;Q;mv&^)9jx&pe$*)<`d;P<~-5i2kzX8GA6Td@$=#5XQ{qXt^V-28jI!HAI4 z*n>kjg(vc_X-FsZM|r>-h*|y}-Uv`XWV!%H08emQ5L7@DK=qJ-+)Kx~`JA*Cpog60 zUNrK}zm|RRXOn&LXA@tVO`1)*`Ly{on>3p=n{@MO^JzAjkY;lyi#LBW6MwYUMn{yB zIp=X0uVa@F)I&{FK?#NT5O;7I&$9V4QVC_lSt6V{d4os7iM#1dDwR*=^X?;~Gp1Cz SZpXF&0000W=xI%|E8j`ObL$Ve+Ok*+-Lj*^5urtjXaET6FA=Le8D5idV${N$jp}77%a~|GtJp zU=jO;ER)Am^Ij_LQmS9Zu(a&ee4UHdcdllgQu$hcH0PM{;WeMT{%r+&#QuN$oz#G^ u<Bjdv-A;P9$cGOf z{H;>?2vYf&`T;J6{88omh13gahe~pH91pP<7lkt$<@;bV#-NgTPGA|9<6$PsFTn(v z^%%o&B4+tnm@hl7ppD!qE^i*-jqG>}G0U$(bIg!gS1}{@=4;_YKmtEwqt|v zt(fKK;Q;mv&^)9jx&pe$*)<`d;P<~-5i2kzX8GA6Td@$=#5XQ{qXt^V-28jI!HAI4 z*n>kjg(vc_X-FsZM|r>-h*|y}-Uv`XWV!%H08emQ5L7@DK=qJ-+)Kx~`JA*Cpog60 zUNrK}zm|RRXOn&LXA@tVO`1)*`Ly{on>3p=n{@MO^JzAjkY;lyi#LBW6MwYUMn{yB zIp=X0uVa@F)I&{FK?#NT5O;7I&$9V4QVC_lSt6V{d4os7iM#1dDwR*=^X?;~Gp1Cz SZpXF&0000F|mJB0tm$qiCHIkoS7o?l(w zxb;U-)YqwT%KIWEJj|k6O1QxZ!uZ~zypMI{rKna)D2kgT$``SQ zBy$TNfoAyvc3_b*QmC2%)RG(6N2z=fdq!hDuU$Tc0@5-NWoYIQ8%QOwz;5A0#PLK5 zzPy&JVa$dCzkYL0o_na8A=H{%XQ|{tfr` z#r4WR*caC?Z(m%kyg~6!nCHzF*jG2tyLrCx@?Eo$iaBjdv-A;P9$cGOf z{H;>?2vYf&`T;J6{88omh13gahe~pH91pP<7lkt$<@;bV#-NgTPGA|9<6$PsFTn(v z^%%o&B4+tnm@hl7ppD!qE^i*-jqG>}G0U$(bIg!gS1}{@=4;_YKmtEwqt|v zt(fKK;Q;mv&^)9jx&pe$*)<`d;P<~-5i2kzX8GA6Td@$=#5XQ{qXt^V-28jI!HAI4 z*n>kjg(vc_X-FsZM|r>-h*|y}-Uv`XWV!%H08emQ5L7@DK=qJ-+)Kx~`JA*Cpog60 zUNrK}zm|RRXOn&LXA@tVO`1)*`Ly{on>3p=n{@MO^JzAjkY;lyi#LBW6MwYUMn{yB zIp=X0uVa@F)I&{FK?#NT5O;7I&$9V4QVC_lSt6V{d4os7iM#1dDwR*=^X?;~Gp1Cz SZpXF&0000W=xI%|E8j`ObL$Ve+Ok*+-Lj*^5urtjXaET6FA=Le8D5idV${N$jp}77%a~|GtJp zU=jO;ER)Am^Ij_LQmS9Zu(a&ee4UHdcdllgQu$hcH0PM{;WeMT{%r+&#QuN$oz#G^ u<Bjdv-A;P9$cGOf z{H;>?2vYf&`T;J6{88omh13gahe~pH91pP<7lkt$<@;bV#-NgTPGA|9<6$PsFTn(v z^%%o&B4+tnm@hl7ppD!qE^i*-jqG>}G0U$(bIg!gS1}{@=4;_YKmtEwqt|v zt(fKK;Q;mv&^)9jx&pe$*)<`d;P<~-5i2kzX8GA6Td@$=#5XQ{qXt^V-28jI!HAI4 z*n>kjg(vc_X-FsZM|r>-h*|y}-Uv`XWV!%H08emQ5L7@DK=qJ-+)Kx~`JA*Cpog60 zUNrK}zm|RRXOn&LXA@tVO`1)*`Ly{on>3p=n{@MO^JzAjkY;lyi#LBW6MwYUMn{yB zIp=X0uVa@F)I&{FK?#NT5O;7I&$9V4QVC_lSt6V{d4os7iM#1dDwR*=^X?;~Gp1Cz SZpXF&0000W=xI%|E8j`ObL$Ve+Ok*+-Lj*^5urtjXaET6FA=Le8D5idV${N$jp}77%a~|GtJp zU=jO;ER)Am^Ij_LQmS9Zu(a&ee4UHdcdllgQu$hcH0PM{;WeMT{%r+&#QuN$oz#G^ u<Qc>1ScF z&>6jo0hv)BEF6Ychb<^PHs(JL8a^@5i#KCoXW()ug!4QQHWTiI$+XuoJb?M0@J{GR zwM@{zIiQ4dtTVg^``4oe-97v&A;Ms%rKf-}Tez>+k9nF8v(XJpKfS9(U*w*@E#I+qW-|x{|@^-!>1RX3ttQ-p|(eB=vg4tLd`FE zG5;pbPAHV79D6*&<6(Sba36z8lFl3v#t8$^t5HHa<9bu{Y{P8rX9mE#jr5WnUXwt0 zLi9mxG3idgyTOO=G`z)0-(U@o=iD74fslrEcktr#=gkTK5z^Dx!p{({7|eiPhjeG) zU*gl-1^xk~*Rh2^B%C#93cU~M&cHw4r*|^^Wl8U23xAX-0DUIu&II(&guejmw(xt2 ze9$M8?o2@cWcV|){?C1%UrXeIKAd!C0{R=kpNsUqw(z5br3N{m*CE{*_y_v*R))Va z>DG6fR>E9^8qo8R?hO3BeR`9?--+~Ww(xm`sRn(a#}>vKx-;;1b?J57J=W{HO@CpW zK_ci4NOuC>4nBMZ;Vnpd1F!J;gkc7?p(n(3rlU{=z6?T2K@llY%ZJ`p@LHiCA3dm+ z&>kLOct3;W(97d`T_Lv+3%Xyj3e^zM+?NjZlBAb(`7x4A=w{FadQ2g{r9Tbs)uKXm zp`L+)UKBlPFh>zN&|lOu1L1YAv;&oBVLaUPHBk3LaUZBF6tn$0!u*y-Z%b%y;X!60 zEe+K_jvEQh9Z*6g)`_}83d`@07L!2|9QF zubbWKusSOA@BMq?66U2%2g3h7uBn*DZzJeG@k#zFwTWx^%YHiloOn*^QHaT}X)6EU zDE<8w%&x1+5~;90^nd7C$MxUpjCRlCuba0+Y5Kjc4ii1Mx8naJ`%C3Ed_1&wo95Ak zYXN6#O7673kxk#IT*wj>X*iWR+->RALMch>vy(j5izT-llh9edQc^a1SpC0i)C>8U07L~qK>d^v=q!pD@ z<4qgyesq{BCbLdP^=+nvSh8Ely2ab46(5T~e{>mRih34b!2I<;f7kTQy7oD$g*l+7 zjTCQgQu&X%Q~loCIC`Q5hDNq diff --git a/htdocs/theme/eldy/img/menus/holiday.png b/htdocs/theme/eldy/img/menus/holiday.png deleted file mode 100644 index 146dcdaf1207cc8925963dffc6f19c93aac34a8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 881 zcmV-%1CIQOP)9bp&*FAm!6-z{3LQr; z9Fnj<;IGy%cmfB|AE87B_h15^!oRI&Fb^%@Pek}?xK-yJg=$WHNT-#&Wa&KJAF07?zY| zAc`o);baN!MmN+n*yBe;`aU?5A-Dxmv`0mQeO81KfkUQ~B76*OQQoW&9t4CBUYT>l z0gFNSl4ym}W`(bd{uqIQ=!f2-4a(@8v!OW}AZAwhNq7LC;XS;A*QI?JOLfk_!am0i%`bwe~zKJ5f3Wdj|Y&C zzG5mG%9#j;p|IKE>tQQy6*uD+aRV}uEAyk_Kz%fV&+PDJF&DWiIls5!3MQj9rl1~T zaKZV<*9(aZ-vAqMQRO@?i1XqE4&yiuVjs3+2}YtdDkBct{~5XhI%B?sII3_&;qae0 zgag=y)mVth7>aJFheH2FU>k~~EyiOFc3`KpYTFep2q>-CDy`C1u?ed%1B1{W^-v1l zzk4qdKxGWZT9q{_t5toaRR&gSSfQ{KgV6|OQ3O$VAAa~@htYj?d(6N>4GT2P*D+7S zTpe>1W@{LQ&ZtWGf_mXwV>G6!Owln}!z3LOHB8XZ6CKeT-O(NmPzE8wd-cK>LsN7| zAN0on48&jz!w3x5F-*fy9YZt>Mi*2;SOnpP6IQ}o{_LTkC`zIf%7}6(kBX>_>Zpwd zXpH7)jdtjW&ghEn=z*T1hv<%O=qh_Vpe-7qcp~n1T<{@`IEtVIN~1g~p{l&lnhG^! zt{N(%0?NwS!U(}(>Qj`kD%cdP3Kr9DnNyXj-$oP|1)~4}HYczGw1qlI00000NkvXX Hu0mjfC|Zuj diff --git a/htdocs/theme/eldy/img/menus/holiday_over.png b/htdocs/theme/eldy/img/menus/holiday_over.png deleted file mode 100644 index 146dcdaf1207cc8925963dffc6f19c93aac34a8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 881 zcmV-%1CIQOP)9bp&*FAm!6-z{3LQr; z9Fnj<;IGy%cmfB|AE87B_h15^!oRI&Fb^%@Pek}?xK-yJg=$WHNT-#&Wa&KJAF07?zY| zAc`o);baN!MmN+n*yBe;`aU?5A-Dxmv`0mQeO81KfkUQ~B76*OQQoW&9t4CBUYT>l z0gFNSl4ym}W`(bd{uqIQ=!f2-4a(@8v!OW}AZAwhNq7LC;XS;A*QI?JOLfk_!am0i%`bwe~zKJ5f3Wdj|Y&C zzG5mG%9#j;p|IKE>tQQy6*uD+aRV}uEAyk_Kz%fV&+PDJF&DWiIls5!3MQj9rl1~T zaKZV<*9(aZ-vAqMQRO@?i1XqE4&yiuVjs3+2}YtdDkBct{~5XhI%B?sII3_&;qae0 zgag=y)mVth7>aJFheH2FU>k~~EyiOFc3`KpYTFep2q>-CDy`C1u?ed%1B1{W^-v1l zzk4qdKxGWZT9q{_t5toaRR&gSSfQ{KgV6|OQ3O$VAAa~@htYj?d(6N>4GT2P*D+7S zTpe>1W@{LQ&ZtWGf_mXwV>G6!Owln}!z3LOHB8XZ6CKeT-O(NmPzE8wd-cK>LsN7| zAN0on48&jz!w3x5F-*fy9YZt>Mi*2;SOnpP6IQ}o{_LTkC`zIf%7}6(kBX>_>Zpwd zXpH7)jdtjW&ghEn=z*T1hv<%O=qh_Vpe-7qcp~n1T<{@`IEtVIN~1g~p{l&lnhG^! zt{N(%0?NwS!U(}(>Qj`kD%cdP3Kr9DnNyXj-$oP|1)~4}HYczGw1qlI00000NkvXX Hu0mjfC|Zuj diff --git a/htdocs/theme/eldy/img/menus/home.png b/htdocs/theme/eldy/img/menus/home.png deleted file mode 100644 index 175c9e9df7192c22c1c32d1dd93e57030983ea1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmV+f0{i`mP)ZLC2fIKNfGE)3HZ zZ$n(TO*>r2a+HI(!Ey}I5%1uei^S6iJFpF9@Xd$CXsaXsf159i#n^+^kbpL#p^2Bx z2%JEFNJx1xABA;qeme3(BC3Vey5m)9j_IitZ)q?XT~)@n!bFHBGf*dLd_j!IN>qbr zk_YopFl>BZY{5W?0VOayXna{L!DQry7}OBc{Kogh8Z>~!L{~KR6F(ZcATeY6iGKiz zk*ipXvwq^ophqI(AewDR^!Q`2DeOn31JNu&)ic2Z}ZXP zH(;g@w;+J$?{3hwc?W*Rf&iZ5=z7iDsSs~xZeC%0LWFpwo3|1P5^n*4AHyv^^9|b- zLwqO^$2V*-l=C55T;8zXq6qOA=8tXS^0KiaF#l;2k=ZY)h>U$ny-LfQ|At4J->^@j z#wVVGIEC|}c+bZ~zk3wVRmKZ$;z}sq^C{8q-pdg8VZQ_KL%a8x-!;Sl0000qlTBqj}r*o>)Ii0&toZ?icxb%JSYIl=d+DW$a_CNFUk5<<0`+i&h zDc<52gcN_4si7&z%UFA_jbP|L#ajHG<1CPp71fJlr-W8akeuQxSrZV40MX&fFh+!AX<1S*xBqWDeMphh0%-E&7m@4lTKL8K0 z1)`D5@z6Mc0uW0z$5lKu20+w9Rn{xM4{lN z;38H)jJ(*4i^d#{&Wruu*o$#dmGp}5f|FPTft3^kaMC!8FU{&fEOk;9_loa;W0(W6 z)G!?TLA4>4I;M(x#ka+NOoPB0g#CI?qUZJ-ZFRR$-)lf%?N^1p;#*)F#zTxgy6a=+ z^>w}$1tBU4X6mjg#Mq_^dc`-zdW zq_eS*2(n_n$_i1-RbH?7x|olC5LD6kVMqjtC^M$3%n;01xxM0RVmf-Dq&^Rb8g695 z1eFQXRZg$?su+(EdhdyZ5GNThLXB71z2Ylk_(y8!%u`eI8(F>L%VNMUmc=VRFB<$} rY5u3bK0R?Ynwg zUw_^n&OUARt_j>6vh7g{|4&_S3HLDmzINB)UGLP(9%Y~8{2$W75wm2*&jl6wEi7uq ze;Ah81>DeNh`OetQ>(Jhc}dDGQEB-nJ9}$R9k}Km>Yr14O*=DBgLUfly333rsj3GW zx85&t5HP>DYR{L|Top~sX1aeCF)ifw`Fo~He#Vb&FKZJXX+P~}{8)X>`x>{o7|hcx*0yheK|KdKjUlOym|B6 z3d#rNJqyYQCU>1Q zur5!_;Dz7_L;@pW_Ju+L+wyhbk-}Zb_tDNG*hq_bX7~n_JQm#2}i(ZzDe4aF3>q!5#{B!g}Fbg)_>G4n%RGQGf1FU39E+m>$w%LHwhO)F)Y zF%W~ZB!=Je(P6%XIRhOP+1_BNxguZJZ~2NaOVEVbXq+`tdDxlgxBM`eB8bLp1I`+q z!B8tjK9kq-@nD>w8M9$Hdl8kp$rahUUdxw&F@ki==I8811u)cG$PV#Zz8MU6(H{(T z=b0LJ43$&l<9I1QP*91v*qr@{?cpAowB=(#Z$V0Ci*xpjyN0?5+5Fn_381SW6tm4a z`_TXlRT8p!wB_SL2N!jii^$oApY3XB%yU zXa9>k5@dz4P)Q*dME@24KOYTJL1xHH>39|`cx5CgAC&j+EduA57l5u_y#N3J07*qo IM6N<$f|K@ALjV8( diff --git a/htdocs/theme/eldy/img/menus/members_over.png b/htdocs/theme/eldy/img/menus/members_over.png deleted file mode 100644 index 9ff7409af9afdec29805c66a98dbdf92d360c118..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 460 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC{tgQo&7+=1E!OM?7@ z85A5A9N3T`(D32^1%n3@0t(D4`V$x!7|lIh978G?lNJc{FgbkxGEv8ZgPC!Q>#~Cn z|4siJ>AG&#*F8&hr6wMEa3JD&jf4I&pG%T!7CrA5Vhq*)#}!dgBpI-RN3Bsyn&toH z$UQ4hS;oDJU(+4il`zFLHtD6)<&}#6JUy0hb^Huizp%;2mEGcBm&D6U0yh~a_02gE zuhSxX_Pprkc6+TGF&&Yo#i!lZu@TMBb>FaJm*7;b?sxl-9?HD9*mdWrpLPK0#B*VJ?H>LcBiG25Hcx6l02@rL6}+0m6t_q@52 z`)tqMn!o>_Grik(-gowvqJZ1&8#4c2v?$#^eY#n@^j6tWhWd5-0)7o!u6bX)TVr7; zmBu>v`0M2R*QSRXbozfv443ac82ClT;;ii|v*60+`ou}4@BG;Q&-XXoq43l1mYfK4l{an^LB{Ts5>c8q} diff --git a/htdocs/theme/eldy/img/menus/menu.png b/htdocs/theme/eldy/img/menus/menu.png deleted file mode 100644 index 526e1975ab099c01efbc07e714d16d8257508d56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257 zcmV+c0sj7pP)-~Hk&sfi*YA_DaV$y;fB zd*b!{9Rk?bhMm|nMBz|t46G*Az(X87p;)hhh*)qATsP8!vl0lvp_@YYe~V6IkQs%# zQ`%^Noq|Q7G~N*r#vHhm*8fu*`vDyN8121$l!y95_zmbUt=E5I=Uo3rW@zjm6%p1P zIQt3IOeJym0B~|sNEf`weZZcq-kE*_`ezsG#oA>>L`1|BK)z7^20#4I00000NkvXX Hu0mjfcYkb5 diff --git a/htdocs/theme/eldy/img/menus/money.png b/htdocs/theme/eldy/img/menus/money.png deleted file mode 100644 index 2190aa22c7040a25277b158bc65fdc3e2d3fe6d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 916 zcmV;F18e+=P)nEaU9;nZ}=yT{o|b9>fyWKN&Hp9ooKSP z!Vkjt__HkcJ8zBfpWx?B;K3~&z7u}jRJLe%eU7g;fjhQz_zu_$Uv8uiF=~s3*AjpD zDST1Fz3A(mEgrst-hLl}^YIcss*1jIBivhrJGVyoJMj*VN4rFCc#7Q-)DCAy`ypHU zt+L@~;T}|U307ig+HvbEovY{u3{IJCi~a3aQn~M3+oIubH{@(QgjWlA$h|hcMnP?G zwKGMXVxC;#pTJERy$|ZhgIT!M!J}yYEg(?zhPdZ;)qo5vHTHy=r!I z?jrXd#z=d2Sld{q=Lvr@y5d|s9=RFkYCoJS>hxu;3ywgrwy9)>e-OuGS9Hc+xY&9s z`+GUx(&sb1ce^ti>-fB{&E2>OYYh|B34J1+5Y*E7o7^8~eVWgud9!z(@Cz^&*WgxN zjKl3EQK#>$dqXfC!OxC3!G2LExIZ>e`0FtmyI=}Vv6khO#NN@~yBs|c{9KQ7Gj5&h zoO|5$URL-MaV7Rcdj$2s0L+Svw7yF;bGZAntR3U?8Z<+Y^HSV*evSK!^MoIYgK)8q z#sc(1H|&g{Zq^q#cd=Gj_ntjqFN{y#($3b$I~VWt%@h7KwDrB+59j9Pd{_6^c<(Um z?7ia(-aF1c?`4NS5+`D?&rSS3345iOX}^i{liXhzy@m&&v(IfX3M;Xfy)*pXy{u1i zF1UB1^<1ybQ7#;espyHF5R$BS!qjMQA9S!kDXOo=0PJZm9ew9kyLVLH*Jgo%X5#1+ z%OZ!yJ)cMW<1?dsEuBx!dZ+qLYpuMO8Ge5(!XDTWy)hLlJSJ9 zUPgFz!cy#|)tH45 z7#tY^>hzs;uUYb5a>l*EDW=$uXWNwhuW~$A<}g0vzseo#Psw?2it{^cihqflpd~t^ qub(ZghoanV=PmI}z4rfnUAF<7+#jM(hS)v;0000-STj1@a|9 ze!&a|4hjVaKK$RXK;S`^ZNh~k6QUbxy!5)$0#5j(gv%>CPnplaz}V&K;uuoF`1aDl zqALbG$3FTOsodn7`g#`wsn7I_z3pk!wlBBLzv-j*d%0rq!HETzR?QcFGtX$kldI2eNtkR}vGR#y!r9Z$ z`qLhL&M!5r-JLVfGl_Sip3wP|yPHCbPfz{jbHQq<+UaNSeXE%|W^#JOzGajbJKMhc z<~;WkyJyNtn@tLzJ^T9Fn^*SaF+IILyMBuggM2d2b1pII9ovg?`({7m7fP2CoY8Nw zN9Osnua|7<4=s686gO3Ke~zEz<#l~eoSnY6EPT51=d`6a>vHXC!*2f$6x1r;TGsAv zYwCaT5BIW|ZdSogAFF-So<_Wkjv4YDJ1GdVI;V|$ywQkHC%E~X*5=cW3ou%zjljTm3`Fy^sep-=Drnzr%3_qI zvRa!zj^_|Z7jV*d{AmnFAFPA7dBZMY_a(j*o0L{#CL@# zsE1mv@hOOsBChcUq9p6SdHwimnEDk1e-xjFQId-r#-qkpbVA!d{j|9a!R5~!#)+TZ z{C*FveP#1$7;N~=u3tIlk9u$e5^I7kCw33o>p?|G>=3rc zwzY`eG%NFDZcaSW+oe0$>}=OF`;)`xu$ zR3-@;dAYyfkUS{3tFxTNUBmA}dhL%|K`%$gD(`g*pC9!9VW5Qif}EUN4cBewH%k7`yU4%!(a&4$$G;yr z^X-6ip||ei%^wc_V7bw*r~BZ2P5l4&KeRu5srwnE82wnh`TLo2Q7s+m>FrV3KfcQ8 z)g0I;+3@FG&5r7Q0-Gz>ho>?Xo&DmT?Y)=5C2Vq(#PPRxf!<;8boFyt=akR{0Hot_ AP5=M^ diff --git a/htdocs/theme/eldy/img/menus/products.png b/htdocs/theme/eldy/img/menus/products.png deleted file mode 100644 index 2e3f6f70c4df4c2db362236a16ba063e34f975f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 407 zcmV;I0cie-P)Y`eG%NUijAaSW+oe0#l-^{|7)(T{x- z1dW{BcLZ8Fxj_g)BQNtG;;oB0)<3NJBhTM-USH+;ZfS$uqut{AaeIDj7F*C7>;Aa> z)0K-qj;Tur?24S2%^l+P3~OI!tJMg7d~~#1e&g*Op?&Lr6kYuON5S9o<5Zis zzl1dpUw^PPYC~lo&?x(V?V=##I6p{Ne#<*I*(SOxzCr5Sy|a<^Gd5R9{@lKg(Yx!{ V8mTM!fj~zyc)I$ztaD0e0swI@W4-_Y diff --git a/htdocs/theme/eldy/img/menus/project.png b/htdocs/theme/eldy/img/menus/project.png deleted file mode 100644 index dfb2fa7c0a0e74adb26b9bf95a2fa48e46c28f74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmV-l0igbgP)dk%IF}j4XHp$uAvQ5Oa%LH-P+~B_oaiSGIHHe8#@fyL`#m033*u1vy_b zdY9i?D)9W;aRwFp#z*o6F$LiHMmpVDfStlcJ|`vsJYQhvhnK)kj?4SKmM^gLOY`eG%NUid8aSW+oe0zO2?_mQTw#5Dk zf;LTV7c`_?l~YuDCwM+GQeE7{H0K@vXOj|^bt->M&0ZWm!zcY?J)4|O#fRr{!oR$0 zjB^h(v-1P_=bFR4_P+TmGk^Y@B)i7D+aDj#dBj-u_U<0FEi=!nf4HjMs9h|m^;j}^ z|AwXEt>3Iy@0k3(`jOwoj~nyL#L8bCo@d4jH1vV{gM-Ttd@UC$zjk2jtRIq$K%;;B b{7_zCVBz`o{|`H$s~J39{an^LB{Ts5f97I) diff --git a/htdocs/theme/eldy/img/menus/shop.png b/htdocs/theme/eldy/img/menus/shop.png deleted file mode 100644 index 83cabd582668ba14d873048b87e013a35ba0cc10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 484 zcmV17xCf>xGcoT2p_u&iN-#2|5_H8`H z)#0auI?ebp{ux?r8l>f-nIXT$??970K^hdX;2N5wKx|O)Z&1@Xd`mmZBSGKYd*`12 zQR(>q@B&4R!&|g7>-oM4_pk(tj6s#=t5WeR@F=9xcGCvs1*bF{mx$kkJ0b3i{sYy) zD9vt5#FyYokm^GTDpD_hA;^9CsV>%Omj3hOci~Ksf*50m6@MaZ1T4KBe*BTJ2;**q z8-FM)%(xro#vcd^G46&q@j)mGo1xnUjh!GT-hzU#G~LeY>~P}8VMADwZZGKUaN;Lm zO<00%XLWWs@o`udmZ96W#?Cw^ej4(^GK||9PJ9e}tgsa0c8U}4LnhwD aoA_V-G|&X10~;*>0000ILZ-h%Y2!4tmwTNvz(c#x&`O>*8re)i5)X^JW{|K~gxFYWQ0Xglxvk%Nz|BRyx& zy!Ewp-oGg}*OuQ1RdW0FqV8Hj!oJwo&KHij|9)^lYyXwmT)lr+*T=l+WiAh$^>mNE i(X3Aw|CKAVGccUm>RY7F-PU0fVQjpUXO@geCyCR;&O3 diff --git a/htdocs/theme/eldy/img/menus/ticket.png b/htdocs/theme/eldy/img/menus/ticket.png deleted file mode 100644 index 57fc2aedb5b0c1d1a9ac6fcafc3ebdc1d67ec978..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=xu=U`NCjiEMAQTO$^~-k8&#|p z%;RJ0lj2zV){*ODLUoq(4Z9b6|IEL|_HWtR>F&Hs_WY0nnzZXqtB&QdgGoRm7(8A5 KT-G@yGywoowF&Hs_WY0nnzZXqtB&QdgGoRm7(8A5 KT-G@yGywoowwspTi%;M5&qBpqYP%V%`eh z0bk`&cdlwAbyE*DJD#J6H^OhlJJCnZ`p9e5Q%Av-{fbN82)_@{4J~#UJQ>c|>>G~q z$nwA82jhvME0~AchT)Gp*u4hjoQ6+|LwM|j!Ec?}O1~-d@FFSp;Eu*sdDLlQv2U8D z_au^{iOs&n#^Du7FbUgmUY_Sg2HdjIP}$Q{({o;SNsr~OyyoG}?Zp)vm8Gw~rgjp! z4ffUd)xX5Ka0q8L)*vzJSkx&x)9G1!25S(pZW4d(hvuh+w8L>~jK5Kl9o8r_uM#>gka zYIS`PzBsx@qlp?^kqRBc`jy_?kaO>cFN}6JS|YB4JvEi{baD>whfjkR78)bD;ht<^ zbIMG4IjiUO@S+5oDjFb}gB@{Yrm3ieI%q2L`y{-`ib|raVQ>XA@&PDHgvy%>agi1I fMQZn*kx=muc1Fk4lvPve00000NkvXXu0mjf!5vq+ diff --git a/htdocs/theme/eldy/img/menus/tools_over.png b/htdocs/theme/eldy/img/menus/tools_over.png deleted file mode 100644 index b04305187df6b81d61ab2c4a73f1f6f682b7f792..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC{tgQo&7+=1E!OM?7@ z859x>Cj7r3;1E!7;KPE34G$jP8m>`=eu zvt)z(b;jJ5q^7HeEvB!xaG6e%lG}0NO`ZwYmSl&@&aHWpm!~bT?s}B(IN$bBV8qNsP6{hfm{{y`b#C8}29g1CH zpk>P%P_^UQ?)iWAxHSp3`kXkE`bzp%RJdb@#EJfBJ5wuKD>5mzTpKy28O@u`O*_6Jl6(>CWEJ|pUXO@geCxI%-gyE diff --git a/htdocs/theme/eldy/img/menus_black/agenda.png b/htdocs/theme/eldy/img/menus_black/agenda.png deleted file mode 100644 index ca69e7a53abded8617b87fb70b97f19f8c9c8913..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 550 zcmV+>0@?kEP)1iP4R&(jCUQ+EW~qsjdH=9NjjmC&-gD2 zKBAJ3_|HmK`H26d4bHHF{<%Q8Z5wy1csZv;lfTevy&Gq1jDuC%V3dUu-O|d z?DV$on=Rj^8{Yu41^vukKVfHzb)U4?PdmONrU-hNy>h4%$CRk}9>QH6wd31hte~^_ zc(Z5yzn5@VGwt|l7%muy_6eCC>%QTF_S*3UO`uHH#N3rl+Cx3Pc!TMRUNTV;b5B)i z5BXih7f0t`)FkS|Zal@2&e>1Qn0n~=liDDY_n%cVDbd(}xEwEHN}I5bf_lQ6fxmd` owNMaMP|s2tnZn;mh4Fu=Z}H1_9s(tWm;e9(07*qoM6N<$g8e`ed;kCd diff --git a/htdocs/theme/eldy/img/menus_black/agenda_over.png b/htdocs/theme/eldy/img/menus_black/agenda_over.png deleted file mode 100644 index 4e4f1d585432ea5dca2a2a948943efea9737dce4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC|z{{xvMfsYM7JU|VC zB|(0{3=RedE<9-XAMjzqh6M=<0tKzPJo|u>Cp=voLn;{GUI}eFY{27sQT*h@Gw=R| zTbD}m9xkabc2aw=pY=A!;f)JZr*f{pZFlZ;l-jr%{_Mi zQQ++CJcgAg)gBkx6t1}1HS?jV<=PEB3%$C|=(Nng#LZSMD7!Ir;|x#;dAjZpzy6las0W-=M=-uGwul5aKV-aXHX_xJDL zuoWvGD<3N#0%GOyk`LwuQ9VxidhjQR=5or{fnPy1i&MTf{1jY)5wILS&|_Yj&M99L zzK{#jS!sIQOH(=JYrrScOmTji&b%^_Q@$F!B~2CQ$LY)~<2mK4!fSF7(#U5X8^bAI z1)d3R!E{(c_q{ffQ@#>B38G<~@)hB+pU%Sss0)WlcUT#~uECu0<>8T|YtTZP-{d3Q z&rXlI?i|1=Uk>g%+6Aek`E@?hW2xYhLx3@wnVSbp8RD3JV%yZb? zn^V3tT(oFN*@kp~mhe5I2egGO^w=NdFu89&CzCCNFq!1~W)4$$M(+T9O|!?cU`7 zK|TOSZB0$s2xhR@QdyBa|D6E@;SAQA0v0 z#Dnx%Ymgr$JIehk_ZJYs8#u|cyLbm2h???|@&kB%kiANKx66;3@)PBs3i%6#qJ~Y{s__O%rQ`+O1tauB_ zF7!uX53-_??)XA@ZQ%$qBO2;s6t=lI;l>ZCh95w7}DRTKWh&c_8GI)bPs#OK6m zA8KXN4YLY3=1u*LyGhK{!~uzLyGDC_5A0TKaPod+qvDx(*rq6jlvtyDyp?J3ov_h^ z5+2S{V51_g5%El1tWmW0aNb@x*B)OT%baM4vRGyzlGb=85@ukb6IGD|3oTUD9bW)* zER;lS;e3?t_`aBKA&tw2fJ16jxUA2g51i!wA;<@_{QiVNTTewg0vskmUt#SIztjwxuz1N z{Zw|vCq!F`lWTHI`^arqd;+u(RB&=lGPDrnuq!@38Vf4<;+kxB#fL><)Dz@W_RB%q zPi*%;sW>Q#nig^+EJ|6NS3zz>(s_G68Zx6eswyftc|R|bBCKgosD(vrBtUu>sSq2H ff}hF^?D78rGC3p7di*t500000NkvXXu0mjfRjd)J diff --git a/htdocs/theme/eldy/img/menus_black/commercial_over.png b/htdocs/theme/eldy/img/menus_black/commercial_over.png deleted file mode 100644 index 73345ebd2d23360d7d3f6d7b1070d9e13f203e56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC|z{{xvMfsYM7JU|VC zB|(0{3<(PkY-k8Dc<_J11qT6z4+VQ}L>U1k|9QGNhEy_cHC`>ej#O(j1N)ng6d<;PT;_b53M$ee*@$q)Fe%e#d9rY@W`Y;5Vw#sN|8DDPj(0ECY6}BNv>-O-!L2b$aKa$ zn)PSiy?X%~%no0-@jw5xYjdqlu&dEWzf(sRrCiu3K7Zqe;@_K-E9X{<9GX^J8RE6B zd0oV@pGNUEcGC@P#dUAI`ffby@thgS(tU3oI$j(NdlBB1djD*4en`QZ!yAm%$^$m- z-#1r&b=>^-LR%~KoP?%ToO0iy6rA<@$#+gKKCPLRUd!#jGyixYJTI3y#sd_tp00i_ I>zopr04`>o9RL6T diff --git a/htdocs/theme/eldy/img/menus_black/company.png b/htdocs/theme/eldy/img/menus_black/company.png deleted file mode 100644 index 3db34e9a4d71f4116a5d710baf02896dd57ba779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 483 zcmV<90UZ8`P)_+W3Y(=pr3sI984Mb&OC@JZoQ_!K^c|0m%^qyxtWofw)Q!O&nLBI`|u z-vVc_3f-o|=P-s73UkN(&X zf6@Fmuv1htZ@9zO*nCBJt!UoxY*SzJIUI?|RS0J1kP}5|&nDaB`8nTX55ERG#0KPq zmi8?1J%BmiV-Igt)V8OA@M_d-U<3NU8?W&a115*$JW0&=fME31dw*=;!GoV4 zc<>sVN`bZ&@KyCdO}%I1`#@<0d{N1%tcOM4dB^rSo7dDKFR`pryo+| z58CK`#_^`|LB9+5sxZzmZQHhO+qP}nwr$(?rnS@R?zft1_EgvBdFs=hGykc6&+ndS4u>P$ ziV7bUJ}P`vc=u5$u@W!CO?av#PQsz2471^>V6?m!a2iS zd3MgSHr|I9)LxuWX3G48Wi9;?ek2YlQ)GU~vSwa|rwXE{^fj%Y2}k4V2kR%WAqGUQlJR zL=2Z%bv5fJvn7^Q_x1;N4CaYgNT<#{WoMpc1-%WQA2UQ+navPg)!BxwNaE9*5vl_w zp`4t1%DID_C;3?ir1r}@DJm7lppBd>8|N{8(g(Tx{x* uGr0f+zR={MKD1^=5S13|NSW3dbvyviGODcjGcp+f0000|4a1% diff --git a/htdocs/theme/eldy/img/menus_black/ecm_over.png b/htdocs/theme/eldy/img/menus_black/ecm_over.png deleted file mode 100644 index a71608da773a3b409bb636066ff97500c46e4106..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC|z{{xvMfsYM7JU|VC zB|(0{3cK3(E&_j0*$U2(**+AmAaJhq#7$Kai_TKSC) z$DP)BJeHfsQ+4vV_~pE03Z zf3DN(Y_5JZ_dyc(Bjx<2)tw9fx2}!(T6Z{t`&E1Y@i_&{L_W0MWl&fwcq7uN^$;j% NJzf1=);T3K0RZ?9p4I>W diff --git a/htdocs/theme/eldy/img/menus_black/externalsite.png b/htdocs/theme/eldy/img/menus_black/externalsite.png deleted file mode 100644 index b04fe8d6f6242bf0515e72421d46180cf76e5b8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 460 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3HE>Y`eINfq`+dr;B4q1>@Tpjqc5XB1fx* zxiW>gPX)O-WE}AFaCKnR&s4r=|CjYtq1n6wgw7l6IVcTA{GSe6ZudDa9yoCio5^{}_qEKmw)*lX z?>beUTd=-u-y%Eva}9A7Ec&Hh-;G!B$xhn7EG2AVa)#j~>!xWrjn_ksirk8GPX#PJ6K=Gkp8dbucmB+j^{Z2!^gO#YWuey${h4oSDl^|4+0S#> zy;$~Cfa;m)KF`YPOg_I-;`_g&-Uw=5? z-=UG2yKaG`#@2ODbDTB@WZ9mmbl093b^h;z^9wo6p1i*2P}~(i`M2s82Hrx4U&}-r zgnx=Zyk~hmzopr00z3% AF#rGn diff --git a/htdocs/theme/eldy/img/menus_black/externalsite_over.png b/htdocs/theme/eldy/img/menus_black/externalsite_over.png deleted file mode 100644 index 968cff8042a1e49656a5f76484b161786134f386..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC|z{{xvMfsYM7JU|VC zB|(0{3=Reg0{;&*EJ!GLaACuQ4*?&I4uk_GJ3U<-Ln;{GbeoI0DDoU>n{)WD|Lz<1 zJMYMa{OGJ?YCmhKv2;u1@ktK%(>y-B(@B_9Y`12y$Af%sm5TCdm;c{BUV7ZQHhO+qP}nwu8Ej+NfcpHfq?QJe%xICMTQ!pU11+}ZZw9{=p6ZM9PP~qJnWb0x zrtnkYfwFj2_(ro$&AiOgt9)blp>SJS{)}U`G2E6}ze zx0!eBoFnEc!&Aqd)j{POz*mKfn({PrU*s1ZJ7fxv};f(059b*4bci=HlyAr*{oF0)Q+F%V$5*jL82|9|H9 zuMbl0u65hc-~8wMJInoIDf-LaOj>nq--c)Bjl0?BJ&*ltG~e=fgjda(?GCTbELK{_ z&e317Ks>T0bHj;G2@$Cub-fR7u3?$AkzFk^sP=-pro)E%Kgs((o~w!X@zZ4f`DFK| zXJ@J>3ObyvUQ_a^)pY-lb@o5wu5J0c@Y}XS?_Tb{+iYKHt+DZrh5Y_k3e~UVtKLof zsdepk&6TYod*xStJAc0B@4TzFRe$=cA2{#r?Ee}X|8nte>B9jGiy0Us!}v2=ca^b& Og38m?&t;ucLK6VVTaUT` diff --git a/htdocs/theme/eldy/img/menus_black/generic1.png b/htdocs/theme/eldy/img/menus_black/generic1.png deleted file mode 100644 index 3aa0f69fd235b4251e7ed142b88bf39470903f4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmV;%0XhDOP)Igazs^5SK@cmbB} zjc9*e{F|^&n1oHZ2M6DC2%FFe)ey}jo@K!}+`x08y=aVJ`gpL>c;vDxNFt4A^>Nq8 z5p{ey+%R%L7!R<{xa6{3NGOeGk=`Do1GeF;&={2Z;JKvnjgj_~%i^O18e`fUC%$7N zrlI#&9y17*sN);p7`h{(OK)n$um;D}@%3=<1G7;NsSx-VW8W#jr{fQPIT)+5xkEM>UiS1U@@zt==iaNeB)>u);SHyBF>iBY4Xhj`g8gs0u<4a1|%e^Niki}&JR0OihMzVsBQEdT%j07*qoM6N<$f{Fau-2eap diff --git a/htdocs/theme/eldy/img/menus_black/generic1_over.png b/htdocs/theme/eldy/img/menus_black/generic1_over.png deleted file mode 100644 index e78c61ecb6e928a22287639a9ad9fcfdf1de7274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC|z{{xvMfsYM7JU|VC zB|(0{3<3@c4GRu@_@sj_i zr|tAQb;o?q<{wk%d}loWFnQCN?4wD%?8T>Q*5vR7Ejo5bA?MCj#Vg|fBz9Lf3kbN0 ze_z8Pu!#LamdWF(c`ucADb+7ySX%aKzRpGKJ6E$#seG+Jnsdzf@S4wE|F!~s^8dg6 z|M)wp0b$Fh$!xJQme*2#;1FGSW2&TifBZ8Me?h7L<};q&0D0Ea)z4*}Q$iB}R_JQy diff --git a/htdocs/theme/eldy/img/menus_black/generic2.png b/htdocs/theme/eldy/img/menus_black/generic2.png deleted file mode 100644 index 3aa0f69fd235b4251e7ed142b88bf39470903f4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmV;%0XhDOP)Igazs^5SK@cmbB} zjc9*e{F|^&n1oHZ2M6DC2%FFe)ey}jo@K!}+`x08y=aVJ`gpL>c;vDxNFt4A^>Nq8 z5p{ey+%R%L7!R<{xa6{3NGOeGk=`Do1GeF;&={2Z;JKvnjgj_~%i^O18e`fUC%$7N zrlI#&9y17*sN);p7`h{(OK)n$um;D}@%3=<1G7;NsSx-VW8W#jr{fQPIT)+5xkEM>UiS1U@@zt==iaNeB)>u);SHyBF>iBY4Xhj`g8gs0u<4a1|%e^Niki}&JR0OihMzVsBQEdT%j07*qoM6N<$f{Fau-2eap diff --git a/htdocs/theme/eldy/img/menus_black/generic2_over.png b/htdocs/theme/eldy/img/menus_black/generic2_over.png deleted file mode 100644 index e78c61ecb6e928a22287639a9ad9fcfdf1de7274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC|z{{xvMfsYM7JU|VC zB|(0{3<3@c4GRu@_@sj_i zr|tAQb;o?q<{wk%d}loWFnQCN?4wD%?8T>Q*5vR7Ejo5bA?MCj#Vg|fBz9Lf3kbN0 ze_z8Pu!#LamdWF(c`ucADb+7ySX%aKzRpGKJ6E$#seG+Jnsdzf@S4wE|F!~s^8dg6 z|M)wp0b$Fh$!xJQme*2#;1FGSW2&TifBZ8Me?h7L<};q&0D0Ea)z4*}Q$iB}R_JQy diff --git a/htdocs/theme/eldy/img/menus_black/generic3.png b/htdocs/theme/eldy/img/menus_black/generic3.png deleted file mode 100644 index 3aa0f69fd235b4251e7ed142b88bf39470903f4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmV;%0XhDOP)Igazs^5SK@cmbB} zjc9*e{F|^&n1oHZ2M6DC2%FFe)ey}jo@K!}+`x08y=aVJ`gpL>c;vDxNFt4A^>Nq8 z5p{ey+%R%L7!R<{xa6{3NGOeGk=`Do1GeF;&={2Z;JKvnjgj_~%i^O18e`fUC%$7N zrlI#&9y17*sN);p7`h{(OK)n$um;D}@%3=<1G7;NsSx-VW8W#jr{fQPIT)+5xkEM>UiS1U@@zt==iaNeB)>u);SHyBF>iBY4Xhj`g8gs0u<4a1|%e^Niki}&JR0OihMzVsBQEdT%j07*qoM6N<$f{Fau-2eap diff --git a/htdocs/theme/eldy/img/menus_black/generic3_over.png b/htdocs/theme/eldy/img/menus_black/generic3_over.png deleted file mode 100644 index e78c61ecb6e928a22287639a9ad9fcfdf1de7274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC|z{{xvMfsYM7JU|VC zB|(0{3<3@c4GRu@_@sj_i zr|tAQb;o?q<{wk%d}loWFnQCN?4wD%?8T>Q*5vR7Ejo5bA?MCj#Vg|fBz9Lf3kbN0 ze_z8Pu!#LamdWF(c`ucADb+7ySX%aKzRpGKJ6E$#seG+Jnsdzf@S4wE|F!~s^8dg6 z|M)wp0b$Fh$!xJQme*2#;1FGSW2&TifBZ8Me?h7L<};q&0D0Ea)z4*}Q$iB}R_JQy diff --git a/htdocs/theme/eldy/img/menus_black/generic4.png b/htdocs/theme/eldy/img/menus_black/generic4.png deleted file mode 100644 index 3aa0f69fd235b4251e7ed142b88bf39470903f4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmV;%0XhDOP)Igazs^5SK@cmbB} zjc9*e{F|^&n1oHZ2M6DC2%FFe)ey}jo@K!}+`x08y=aVJ`gpL>c;vDxNFt4A^>Nq8 z5p{ey+%R%L7!R<{xa6{3NGOeGk=`Do1GeF;&={2Z;JKvnjgj_~%i^O18e`fUC%$7N zrlI#&9y17*sN);p7`h{(OK)n$um;D}@%3=<1G7;NsSx-VW8W#jr{fQPIT)+5xkEM>UiS1U@@zt==iaNeB)>u);SHyBF>iBY4Xhj`g8gs0u<4a1|%e^Niki}&JR0OihMzVsBQEdT%j07*qoM6N<$f{Fau-2eap diff --git a/htdocs/theme/eldy/img/menus_black/generic4_over.png b/htdocs/theme/eldy/img/menus_black/generic4_over.png deleted file mode 100644 index e78c61ecb6e928a22287639a9ad9fcfdf1de7274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC|z{{xvMfsYM7JU|VC zB|(0{3<3@c4GRu@_@sj_i zr|tAQb;o?q<{wk%d}loWFnQCN?4wD%?8T>Q*5vR7Ejo5bA?MCj#Vg|fBz9Lf3kbN0 ze_z8Pu!#LamdWF(c`ucADb+7ySX%aKzRpGKJ6E$#seG+Jnsdzf@S4wE|F!~s^8dg6 z|M)wp0b$Fh$!xJQme*2#;1FGSW2&TifBZ8Me?h7L<};q&0D0Ea)z4*}Q$iB}R_JQy diff --git a/htdocs/theme/eldy/img/menus_black/globe.png b/htdocs/theme/eldy/img/menus_black/globe.png deleted file mode 100644 index 8ea33cbadc69cebbb8fb7a1f93371e7fcdd1ddf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882 zcmV-&1C9KNP)7w4kA+N3t=bY}O>;`}E0eW>Z`uI0l&9*^g@ zBnk`)H#GZZVm}YLF!JBRpS9AO>&Zz)r;D1ihD>>KHsDpM*(ru5EZ7 z{4RJ4I;g#j)W15x`m>I;oTKKi;~sVU@GC)-V27b5KbQrs$yy2Pj%%GfrN6Gl{5DqM zv3h_nidG;!*bG|vdB9~@H=JyyK22ynSeH=y={?Argy6oI{}!az9^D`vcm_TTCUS4L zPh-t|P&3SLn>=75xS@I{0Hsup-A>_Wf!Bh2Y*a$&n!{i$=nqQxV9&HdYr>kX?Cq~# ze|onny@WA5R($YS(VKgVq;3nn>qGFKqPLjR*ZT|K3fxx22dTAgi}>(`;?F_(6!A}94>O1CCVe|`FMD!q>>{7A4w zkezyMrCUS)fDrwa=&z)7mx*ND0(>8|z?n8On`?<+_~y&V6q19E|wVV(|W0aY1L&P&Vv5=t*&b1{+> zbQLtF9s|TP)TidNS_D)Bb$xKZ2+7OZ7=|9%=_wK@gC@|k(w0<|1F_=rnXk@$zp&m^ zR|ga|T^+H13sKv`tJ#K^w<^-ersCqbA!z0V>nl3c)d9&3vm25`;oP@L3d(@`ppf_g zSEJ^o7Hf)woIb>tKt$Rc_c0&)0%bl>0Mgij!cGhlR*UJkJAm4!X3fuz)Pst1%R z()TKJa%g&L5rIABE13Sbx=YMgFeixa-r{z{yW!pNZup4u4ZAE_^_v_NM*si-07*qo IM6N<$f)Y%zU;qFB diff --git a/htdocs/theme/eldy/img/menus_black/globe_over.png b/htdocs/theme/eldy/img/menus_black/globe_over.png deleted file mode 100644 index 409cf6381962317691504cf82d1098c1fb554909..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DVqSF5ZC|z{{xxi0gdYdVL+WC zB|(0{3<3oS0S*uTe^5BEz-Ph+y$kXU2JwGuS1~X!mUy~2hEy=VnH

LxIPccS_rV z1f4to*UfHqSREDm_x?R`3G>pX1L6N3*Hld7w-NN8_#}Uo+Qc>dWj~#NPCO^|D8%H~ zG?o8vl>UATX4lnZiBwo0`akrnpE@TOcG@QyD?zZ%5p_HWc*-0Mj#gbc&N$4zJDJh}vw|lmi zaMAneb0X{`Ud}z$9nWTA#hUoA?ZYecE4E5$UskOD*Vb&z_|Q&i|F6$k4>s55{4f8o zb6;bnl*e-UZ?C?8_>&dC{$a&e?OXd2tgK_IKAwNva&phEPmlN?l#2O0i%MTA^=N@b z(u&Hd@urP;KRQemlUXOD`ZiNSEZHq&-Qw-jijT#gKe~)DMLmlzVE+1_ziawtUHcr> z!W__3^8R~|jbG*iuQNdgKYkP$8(-O%mnAYcQorY%kDi9v;qArSsva$9L7|!KF zPUSML<1VhmvfgQDRzuNdWS(GtW_qHj*^U)awCS0J(WYZcN-tqnHfPD4ug=WOLX(~- zVKz2p@uFU=yrv1Z>yidKv`L9IU9e3lt;+5kz@F^J&Y4YEgjjXfXANefl#b#R{^BQo z;OlJsI_DB=Dh_8U5=v<`Zs)tqw}kE?*3_KKqNto_{!Kn*CBjk?>X|Mx(WZ}1CZ*K& z+%&wVZS(DLbVL#?B@5)Ob^CoLBS~qx(r(}N`OveCkvKXK7FNKsamKJ4a zHjY0!#?lZ^@)67M3SZGjN{22oKZy>04R(%v7Q2yOG=^!>V1y3C{Lc4$!%zIipLB{k z_$643x~4WSF54a|^O#8ed{mIXK!*Bc&JNQ+ZpALOR9bnF~pBZ9W+6?hGzwrkxqTl&X z83}&3tdnGFm^Uu=WLkX7kHOch9Z2KPyaQuKrlk=aw2ZTPu%6%~8(g8MN>y Q@c;k-07*qoM6N<$f)@>*jQ{`u diff --git a/htdocs/theme/eldy/img/menus_black/holiday_over.png b/htdocs/theme/eldy/img/menus_black/holiday_over.png deleted file mode 100644 index 24d9e49894802d350a8e0f4d6cdbe99c06ab6ba3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmV-M1G)T(P)$9L7|!KF zPUSML<1VhmvfgQDRzuNdWS(GtW_qHj*^U)awCS0J(WYZcN-tqnHfPD4ug=WOLX(~- zVKz2p@uFU=yrv1Z>yidKv`L9IU9e3lt;+5kz@F^J&Y4YEgjjXfXANefl#b#R{^BQo z;OlJsI_DB=Dh_8U5=v<`Zs)tqw}kE?*3_KKqNto_{!Kn*CBjk?>X|Mx(WZ}1CZ*K& z+%&wVZS(DLbVL#?B@5)Ob^CoLBS~qx(r(}N`OveCkvKXK7FNKsamKJ4a zHjY0!#?lZ^@)67M3SZGjN{22oKZy>04R(%v7Q2yOG=^!>V1y3C{Lc4$!%zIipLB{k z_$643x~4WSF54a|^O#8ed{mIXK!*Bc&JNQ+ZpALOR9bnF~pBZ9W+6?hGzwrkxqTl&X z83}&3tdnGFm^Uu=WLkX7kHOch9Z2KPyaQuKrlk=aw2ZTPu%6%~8(g8MN>y Q@c;k-07*qoM6N<$f)@>*jQ{`u diff --git a/htdocs/theme/eldy/img/menus_black/home.png b/htdocs/theme/eldy/img/menus_black/home.png deleted file mode 100644 index 15dafc01b06e89077e0615a895182ffb273420e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 573 zcmV-D0>b@?P)hSE1-dT_%EAc$KO289fT9yypH4CzJWHHl`nu+4%|Y23A_UJ zV7@>(Z2R)OR(KoYz$tVqT;}Ftl!Cy?V#W>72ygJo!SA8#VGB1mp#(m8FrPUsHNuO7 zFQM~eJ~wxuImD;6%&)8dv0>98^heMe5>QUe{!#?(%1=g4NJ!PNTrYg|8dLqr=@s5m z(4QC3F|zP1){Jf}M9CEPtPv_a3*^OUZZ1V7h>{$b^=1D+;hETzZUg#4psfg|`wCC! zl32ja@yHJOkLr?TlBe(t>`J!+bs#aKBe@!Ssr+zcgTxryOZYpG7;+ISjWH)(!!u|E zy8OUHqae!G{FY$^)&>2YHxOlMQT@Z(vGDnhs`6KH%7d2>z;*1^^s2mZ_&iQ^!?K6BVfeHV;UlfQ^&3CoEx`94PT^Bu*e^$T1KcpK zNGyI~3!#(;nPTM&`zaLvd&J1GO$>Z&tdL^m*Ty@A&wNaVkF4^~;x3LE)*yG5;vzXv2E(GCW{dd2O|GY;dVjdO%q&Q3l8$1_V00000 LNkvXXu0mjfyn`1t diff --git a/htdocs/theme/eldy/img/menus_black/home_over.png b/htdocs/theme/eldy/img/menus_black/home_over.png deleted file mode 100644 index f19ae6ec4b6a2e307825282a8e45ecd90b5984cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 313 zcmV-90mlA`P)n5TB8+4Uj<83_fSP2YE(B&mbR!%Hs988chhr&| z9uK{Kxa^d`<%>UFY&Kqv&Bm)67te>M4AJxo%tSjFK?<0`ZHmVPVk=T?1^#yM6hSI6 z5%I*YU5+Q>HN4UIR9SR_Ve8h$7YKfhwfM&46GXxSqT&xJSG;H5Sfd1l{|t+_c#F6A zLh=G`P)8UYumPM+qP}nwr!hfZ5wIgvH z7K{D0eEFC!@5}r0zPvBbr#PDbV%e?AFU8kiteI8$h4}o7HL)r`7oUEyMpor#;$w)* z$f|qE#-{;ZMeJ^1Rembs@d5EJ&DtctxOPg&{(4sBCn65VQ3tPdcFjkYB$G3$|$HI*YOi?CF9>AXj zcNt~eyG~Zas{Byg!`6_j6b>kNtwd(!XQJ}pJ}0kcRem6@VSPlN31fA~bs=KbI_h1{ zy((7a`{FWICU9pmE+l<*dqg!X8Wy%!g<`B;vVT$Ph9wjLmwsejwW; zWvt4#!xl_*X8kprmBL>Q3So^Da^_p4lvVjwddX;=8|pk6=~MB$O#v*C0-CLn5?1A# z=>t*;e$18pSR%!&$~VFsOx4$6NT)p2_~gY@nIlE4%GbjbM^nu#bqc(r zkX89w82gJAv?^Z;ZGW+x|I@!de0g8qm-pp;d0*a__vL>AY%~%X0XMvc00000NkvXX Hu0mjfG*TCx diff --git a/htdocs/theme/eldy/img/menus_black/mail_over.png b/htdocs/theme/eldy/img/menus_black/mail_over.png deleted file mode 100644 index e0c2e0a98b8de33c52de53cff7affd53f091909e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC|z{{xvMfsYM7JU|VC zB|(0{3ru*92}3+4d-f|EI3EgnJl&U%Tt@u6OEXkFrm4{ts#4h*>h@=Yk6T z78bSQKMc$40&ZwBL|s$Ssa09$yd>q8sI>f(oxL@u4qS5&_0Orjrk$Cm!8-MN-DO6R zRMi8GTkn@R2$>>;T?Pyj@!N=E*EWv5Fai<9Eak$ z;Sq!wv0SCl7VU6c{D^D1M;TTDS`FuR*Ho9|9YeObU zpnk%phXV$=l#H|$5<^8L*FR9@C&4a*4NwHiTjbI~BF;5Ay?()Fhbsf4 z3C>;A6n70#vSVG#w}%M^BSdxp*IWz``>R{zle&~2rKrtZ5+!Gn#NmwGR^|EQdx#I}&pq`u`=yhzP}@k)O&!^xyg~Zj9KF52`_J3xy%UANT)xjQEfl@<1`l k&b9c#S4M*6{TD3%73>7*E3vXvI{*Lx07*qoM6N<$f`hkY)c^nh diff --git a/htdocs/theme/eldy/img/menus_black/members_over.png b/htdocs/theme/eldy/img/menus_black/members_over.png deleted file mode 100644 index 3548942d14cad99eca02768c684b4d9990c2aabf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 460 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC|z{{xvMfsYM7JU|VC zB|(0{3VjOLy$jv*C{Necvem>j-;nW$sI!OXbD zb=kp(|EB+qbX_;=>z<{$QWK9nI1ur?#zB9X&n3wV; z&GP?pjo*qlMI(`PMU)bd1%5L$mOXB4vft!qz z`sSR7*J+VGdtP*NyS>(pn2yNP;?wTy*ofxmx^GyqOK_@I_q+W^4`p6l?7H*RPdkZK ztDJ2gRL(lE&3;+ysh4&o_E9TdC*|=3b&Id6Yw9_8^^xw%nC(sJ+h>01c*Aj~?C8p+ zd*0m1eYWRr&ENmenci(X?>l=-QNZo?4VnKhT9j^|KHaQcdaGkch)?FB=LnFmNz${AJE7 yXCby@2~%AbQ%$h9@C^13%#42=80-ZY^s?9ex4rLXcYi8SAA_f>pUXO@geCw|yc$0M diff --git a/htdocs/theme/eldy/img/menus_black/money.png b/htdocs/theme/eldy/img/menus_black/money.png deleted file mode 100644 index c9668b65fb91a3b86bf62bc99aa4d1da2101439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmV;l155mgP)I{&;e2{ND#3WfG&_dK!@0lu-9l10u*2YSb?BKfk0S+h(I8wFBYJ%JLVPd z&yRuO^BUILzoqdSukr3_yv9q>cs9i7?Wf~efCM>icz%#0K_DK_x>({-fk9Iwo()jo zUPFP7MEo9C2NquASsNEuBrboz*@2nw%eOGWsirL=iOa``u)?u|Ir@kt;@9Yv?+__6 z?7qm5A}s%nVI<-WHkjhojyc2=9^QH8*82jwJ8TR9CF8_->!*1!4IFH9|Fmt=vyCXI9E>e428*DDWMlxiZJTRP* zZTM5R;fy&)EnOCpNB!;DT>h4mXGx%{v+$Wb|mJ+gqFlj`a-%U-#3k=G?DvXcJmTFHKc z&E-!>odim|tfl5yGco~3KT>{Vf6V6c74om_!4eskLdlc>V>XleFmrn_Ermv&+51(R zoLS5UP;X+++$pfR{CY{?am!1h9p*FG|B<};5~u)XI1AE4_`fi1T-3#512p#&@<4o5d{rCmoU_{?1wE{Uw#T z*}dN-nSQHL|3Qi+%;Oz9jJY4!TWtHV8RkMgvc$!tVV>FJT*n{pG4f)Vcg~VCcP6!1 z@;op9myAlN_(`60$TY!D)AaM052ZG0(h?4d>*Zn4fs`->3iYD-!u5R$i)DwlL`^lgjy}-*r}WO?Cgq z;Sj@^ly>}ya*U0sQSSDgIh`T)_KyPYz38yWTslwqjj5W#tGmyxu_UUP&RQm@Fm2k| z`JQV(Zw**;+ttbCJn?I9D;kd+NuSN}axtZz32bcbw{A*S_`?SO2 z=a28K{P@f#-XL;S2`k3u|KK7ckVHsfDG5#0$~0904UxgbWMqd~$|`Bt1c87+G32l?>ChmcKtMnsAP^7` z2-h=SoWo}Ke%{ykK7JVU+~3SOH{knz-?H%mHr~eDcpGoyZM==Q@i@ca!Yk9UM*Ic* z8L}W9Uxi;oHl*V#@B=NzMvFGqrQ^@w8$8B_M;ois@h9*FO~yu(Hd4~@NAL*^#zuoS zR;1$(-~(L7hD#es>G&eNL!Gfvr;TOlcn99V11BPnHkPF0_u<8mMd|o?c!X!B8`TFh zoE$v$XfC{?6~7A)J&GHP$JvB?1vL}#6}VFpY`eG%NS*d{aSW+oe0!sjmDy0_*vGyL zo?6N&Q=}ido#2ptX!cTip|Xp*1%qy!y-d@pQ{C0I@2dXplaKXN0Nmm@y9AZkdNPI{MY(lTims&`qnDC`%Gtit9k!4amS5m zZ;N|7@~fpj=-p0pt9)Iwqj;ai!SK(wm+e&fH1A{oHIKcF4UtuX)oY%10KLWF>FVdQ I&MBb@07<`aEdT%j diff --git a/htdocs/theme/eldy/img/menus_black/products.png b/htdocs/theme/eldy/img/menus_black/products.png deleted file mode 100644 index 08ec9b254774951e26cfa83d415791ad8b5253cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 428 zcmV;d0aN~oP)JQ1PgOg)>UA=HO8LKkO8HX0lrQDG-R>dWk+xG$ehfp>D0TTw zFffKA#{-yvDs}lK2uxJquIZR%_fco!q+BRo6J+2y9?|}r^RoON> zuh&)_KotmFcsbAfaT+dP`A3@jK0sRje=PIcoTB`) zVC3a&g>&L3&+y9|Mw;^8wnD*r|DCr{?^IXTmaoEcSKRRvy1b0_B`B1it^W#k)D WbjJ6z=?1s}0000Y`eG%NUig9aSW+oe0#l-^@xLj!$oaH z)g>+3iC#N}wzcR!_442hcJkWE_l>Q+l{;GN|fLe*IAOUwvzpsiGJPYU7Meqr1PJ- e`9pGNbo`eSUme|>L~4O9XYh3Ob6Mw<&;$VT=wX8Z diff --git a/htdocs/theme/eldy/img/menus_black/project.png b/htdocs/theme/eldy/img/menus_black/project.png deleted file mode 100644 index 3313e6464193f7e890edc2cd8480a2f94203a711..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 378 zcmV-=0fqjFP)LKrM0tb&5k%y5jdH)WqJ>>mu_(pDg*zYB{jG>%k#sPEXG0rk& z@(XYgLpevJbD})PS@7|Bzm~tG^P@b*=~Lq!fr=*_6;C>S>B$S}4CN=^@Y=W{@%fW? ze0<*9Tng^|U~ALD+U&q%4CQ>1&YSWWXGh12$R51MP)^S{;7fUov$sE5E#BfS-r}>) YA6@Jr_p|Y`eG%NNw?SaSW+oe0zN(FOwmUTcTS+ zi?pJ0%9Nf%96eJ6XS8T*o~;kMw4{^QisA0&FIGBs0t&@OoA>kndCtTyXH#)D^lIe( zuJxzV8rebI4|CYxFY(mMua#YY@?hSnD9cN771?W7S?yZwzS=5kYVO;{{ad`goGP)~ z_vN|8JMnG%xi`1XJ-XSrZrNOG)rS86Y1y07(`zoCo6EJ29c0{t;4i-}&j~HtvZr9J g+P@wdey}C}PGUX}s*a{D0lJ^T)78&qol`;+0M(CTc>n+a diff --git a/htdocs/theme/eldy/img/menus_black/shop.png b/htdocs/theme/eldy/img/menus_black/shop.png deleted file mode 100644 index 5db29cb0e3a311859bf2a4d9964dd1473fbc8128..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmVD2l>34uEBikmOl2vo+B)HMR!^z?eb_6K~>8yoopQ5==bK9=yRf`JiV$ z*T&=cpblRh)WPT0_!@jFT10(TgJD<2<7~q_d4!bm&VnoDebF`XI9_;x7L*+3O3)&f zTjCes6{_IvGJ8$48(n^k1eqLk{1G%E+r#WE&0chPpM_^=D()dNsQ3m{8UG(Q(D>td z92%qwXKjCnMdNXX;0X$h_)WSq)AoD??qE@QHU<@%uZYCsEW?A4va-|e@Vyh7jY-7s z!mW@B?esW&Z z=pn3 diff --git a/htdocs/theme/eldy/img/menus_black/shop_over.png b/htdocs/theme/eldy/img/menus_black/shop_over.png deleted file mode 100644 index e1429d1b97e796f6dacc5c50049d0fb53a73f2b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3-qtXDD_6DdPa25ZC|z{{xvMfsYM7JU|VC zB|(0{3=I$de-OCfpm1Qqf&_yN1p#N3?%oGVZu4|;45?szbN*mnvw?u?Me{ow*^?(d z`@esi(2{#II2OA_K3(&kxqsijd&krYyrm`^&9<>P(eV4j0flxG@rV*V%h1_eoBh`M zth7C|#Z%CHZ$bLi;0fRTEe!TXJjhb}COPjQKYQn@G)0w}|8t&;m-hHgw4HbT$ic_f zk)E?>-ul`)@81-gYs+thD!Ki7QFpB%VPEWP=L<*Ne?K^&wg1X&uHL_^>to*ZGM9(W ldb&s7Xx68T|H_rw85mA&=k#!H3oZtQho`Hb%Q~loCIBg8d({8{ diff --git a/htdocs/theme/eldy/img/menus_black/ticket.png b/htdocs/theme/eldy/img/menus_black/ticket.png deleted file mode 100644 index 998efdbaf822ba9df672e7c48c4b832cbe93351a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=si%u$NCjiEM9~9#$sKb08<#Xz z{gSlET43v;D3{}(%Y2)C@AUt{w-4Ok^7Ye-#wp_Q&Or0BO+2C*&ppTn8o=P`>gTe~ HDWM4f1qC6k diff --git a/htdocs/theme/eldy/img/menus_black/ticket_over.png b/htdocs/theme/eldy/img/menus_black/ticket_over.png deleted file mode 100644 index 998efdbaf822ba9df672e7c48c4b832cbe93351a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=si%u$NCjiEM9~9#$sKb08<#Xz z{gSlET43v;D3{}(%Y2)C@AUt{w-4Ok^7Ye-#wp_Q&Or0BO+2C*&ppTn8o=P`>gTe~ HDWM4f1qC6k diff --git a/htdocs/theme/eldy/img/menus_black/tools.png b/htdocs/theme/eldy/img/menus_black/tools.png deleted file mode 100644 index 5008c2fb98c9e7b8bf27ca71b05ed4fbdaae2dc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 720 zcmV;>0x$iEP)1)}^uJXf?>vv@L` zahNw8<&ouo%MZpAMOQEnwH3=B*OEW&CV z!%gRAB1=S+Cz&t@OKglnLSZtNi1V4kTAn1pILvcUTbvsztxrS7u#^{t24K328pvU@ zHvt*KQN9-@D99$*?T@WEM0000?(qL0zk`T$>lD3j+`>;z&zO?+OUz7h%e7w{F3z;k zUf+93X4?I06?^X6texR@<84c>eZ@&h_Jz#ywN=MV=O4LytkTxJ;)>$?drCCeMUxOR_^{=hi&Q%hMKEcRk8?oNxOm zuw#*2w%Fq@=bS31{gT!ER}}7a{&CR#ITAAuar}?#S7Lsub)w;t3RC#O|AF2IVml0i z4#lo8(6VI>sM>LD_xwM5+?oVieNLQ7eI

D%`O{;z#!W4)w_Ew(rvK>M}R3NR~OD xUHZSga!$Sd^F48K5%#ZSA6~mO-|&JU1H<3-eCY`jo@;}G-_zC4Wt~$(69D$=tB(Kx diff --git a/htdocs/theme/eldy/img/weather/index.html b/htdocs/theme/eldy/img/weather/index.html deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/htdocs/theme/md/img/menus/agenda.png b/htdocs/theme/md/img/menus/agenda.png deleted file mode 100644 index 35d8b1b3169f715eea352ee2bc07a4e0888b0f02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7~ThPZ!4!i_^&o3t0ZJGbJ54aq)xw zhySPl|2VMv|GyPdAGFyUr%Q+lGchk{T*4qPBo$z5?PL;Q8xb$)|>dDd7MB diff --git a/htdocs/theme/md/img/menus/bank.png b/htdocs/theme/md/img/menus/bank.png deleted file mode 100644 index b83e7cd310aa66c2d1fff8988bbb7dabea41b332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iR8JSj5R22v2@7QYJpUK}_5Z#9 zr~bzr(MbC}|MUN&^&Ay^DVrY#pZQ|{@BiQbD<0hYzvI8pjj8Pa_WzQ%-to&`Aa>*D z|C9fJY@Ymo?nF}oR*j1e@(nqL5zN4myC5pzfdvT9Pn;R$7oy9z5@&ME(Wdb^2b! zpU^P%q#jinDGZ|;eJcwKnO>CBFvp2g%+#Zd5hjsyhhh9q-^#mget1ykKDIem<}9|^H<8&Tb89dDt4}1A4$c;xxeEXQ002ov JPDHLkV1myHXpR5? diff --git a/htdocs/theme/md/img/menus/chart.png b/htdocs/theme/md/img/menus/chart.png deleted file mode 100644 index 18559b692d133323891fb18891dadb79bc027169..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1H%}MG5R22v2@-1_)Iaz?{r|_t z@c(}UO&^5wG3f`I3NWr%%{cuALq@|!_Kj>MI~Oi!Y|DHp>iAVZ!1Rak2|@jTzxi(6 a;b&OLqgP$G=;8^Wi42~uelF{r5}E+cXe}rJ diff --git a/htdocs/theme/md/img/menus/commercial.png b/htdocs/theme/md/img/menus/commercial.png deleted file mode 100644 index ba06d79a766a3bd14329bab3baa73ae130736da7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1A5Ry@5R22v2@9-$$p88OwO*p) ztNnxxY%N6s6`m2y0tv~%%O2KW_&@zWCu7QgfrTW}y5Cl)X|A$u;sF%Uh)z4*}Q$iB} Dt63pP diff --git a/htdocs/theme/md/img/menus/ecm.png b/htdocs/theme/md/img/menus/ecm.png deleted file mode 100644 index 1bb8e0dafd64e92bd077b868cffc51307c37eea8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iN>3NZ5R21yFQ4Xh2oPv}xcPE} zyLgeP(jsN9Ngb;;ENs3nq&Rcu#^P(wqkYocetBj@?pU_@z}`Gzo5;*Z3_2SbxOtYO z^wdr8651)BGRfs3yRs$gWO*0fy%z;NJXXB8nHz9VOxou|9k+a1MC{+6EN4&ewR?4? czVbP9;5C`GOW&qC10BKO>FVdQ&MBb@00VGCaR2}S diff --git a/htdocs/theme/md/img/menus/externalsite.png b/htdocs/theme/md/img/menus/externalsite.png deleted file mode 100644 index 8abd6437ea69f4fd9c43960b6a14d677e94764bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1XHOT$5R22v2@+}#>L2`{{-3ik z{QqA;DGqJ+#_1fqE=*S02LxsQZ(Jq0M2e%b?bm~G8;;1 pUUrx?+08lAWJ;T##zheZ2J30ZJWg3Xi~%ZV@O1TaS?83{1OS+{7vul{ diff --git a/htdocs/theme/md/img/menus/generic1.png b/htdocs/theme/md/img/menus/generic1.png deleted file mode 100644 index ef13122ace583000ba6af4096c8ca1122ca3333f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424 zcmV;Z0ayNsP)Bjdv-A;P9$cGOf z{H;>?2vYf&`T;J6{88omh13gahe~pH91pP<7lkt$<@;bV#-NgTPGA|9<6$PsFTn(v z^%%o&B4+tnm@hl7ppD!qE^i*-jqG>}G0U$(bIg!gS1}{@=4;_YKmtEwqt|v zt(fKK;Q;mv&^)9jx&pe$*)<`d;P<~-5i2kzX8GA6Td@$=#5XQ{qXt^V-28jI!HAI4 z*n>kjg(vc_X-FsZM|r>-h*|y}-Uv`XWV!%H08emQ5L7@DK=qJ-+)Kx~`JA*Cpog60 zUNrK}zm|RRXOn&LXA@tVO`1)*`Ly{on>3p=n{@MO^JzAjkY;lyi#LBW6MwYUMn{yB zIp=X0uVa@F)I&{FK?#NT5O;7I&$9V4QVC_lSt6V{d4os7iM#1dDwR*=^X?;~Gp1Cz SZpXF&0000W=xI%|E8j`ObL$Ve+Ok*+-Lj*^5urtjXaET6FA=Le8D5idV${N$jp}77%a~|GtJp zU=jO;ER)Am^Ij_LQmS9Zu(a&ee4UHdcdllgQu$hcH0PM{;WeMT{%r+&#QuN$oz#G^ u<Bjdv-A;P9$cGOf z{H;>?2vYf&`T;J6{88omh13gahe~pH91pP<7lkt$<@;bV#-NgTPGA|9<6$PsFTn(v z^%%o&B4+tnm@hl7ppD!qE^i*-jqG>}G0U$(bIg!gS1}{@=4;_YKmtEwqt|v zt(fKK;Q;mv&^)9jx&pe$*)<`d;P<~-5i2kzX8GA6Td@$=#5XQ{qXt^V-28jI!HAI4 z*n>kjg(vc_X-FsZM|r>-h*|y}-Uv`XWV!%H08emQ5L7@DK=qJ-+)Kx~`JA*Cpog60 zUNrK}zm|RRXOn&LXA@tVO`1)*`Ly{on>3p=n{@MO^JzAjkY;lyi#LBW6MwYUMn{yB zIp=X0uVa@F)I&{FK?#NT5O;7I&$9V4QVC_lSt6V{d4os7iM#1dDwR*=^X?;~Gp1Cz SZpXF&0000F|mJB0tm$qiCHIkoS7o?l(w zxb;U-)YqwT%KIWEJj|k6O1QxZ!uZ~zypMI{rKna)D2kgT$``SQ zBy$TNfoAyvc3_b*QmC2%)RG(6N2z=fdq!hDuU$Tc0@5-NWoYIQ8%QOwz;5A0#PLK5 zzPy&JVa$dCzkYL0o_na8A=H{%XQ|{tfr` z#r4WR*caC?Z(m%kyg~6!nCHzF*jG2tyLrCx@?Eo$iaBjdv-A;P9$cGOf z{H;>?2vYf&`T;J6{88omh13gahe~pH91pP<7lkt$<@;bV#-NgTPGA|9<6$PsFTn(v z^%%o&B4+tnm@hl7ppD!qE^i*-jqG>}G0U$(bIg!gS1}{@=4;_YKmtEwqt|v zt(fKK;Q;mv&^)9jx&pe$*)<`d;P<~-5i2kzX8GA6Td@$=#5XQ{qXt^V-28jI!HAI4 z*n>kjg(vc_X-FsZM|r>-h*|y}-Uv`XWV!%H08emQ5L7@DK=qJ-+)Kx~`JA*Cpog60 zUNrK}zm|RRXOn&LXA@tVO`1)*`Ly{on>3p=n{@MO^JzAjkY;lyi#LBW6MwYUMn{yB zIp=X0uVa@F)I&{FK?#NT5O;7I&$9V4QVC_lSt6V{d4os7iM#1dDwR*=^X?;~Gp1Cz SZpXF&0000W=xI%|E8j`ObL$Ve+Ok*+-Lj*^5urtjXaET6FA=Le8D5idV${N$jp}77%a~|GtJp zU=jO;ER)Am^Ij_LQmS9Zu(a&ee4UHdcdllgQu$hcH0PM{;WeMT{%r+&#QuN$oz#G^ u<Bjdv-A;P9$cGOf z{H;>?2vYf&`T;J6{88omh13gahe~pH91pP<7lkt$<@;bV#-NgTPGA|9<6$PsFTn(v z^%%o&B4+tnm@hl7ppD!qE^i*-jqG>}G0U$(bIg!gS1}{@=4;_YKmtEwqt|v zt(fKK;Q;mv&^)9jx&pe$*)<`d;P<~-5i2kzX8GA6Td@$=#5XQ{qXt^V-28jI!HAI4 z*n>kjg(vc_X-FsZM|r>-h*|y}-Uv`XWV!%H08emQ5L7@DK=qJ-+)Kx~`JA*Cpog60 zUNrK}zm|RRXOn&LXA@tVO`1)*`Ly{on>3p=n{@MO^JzAjkY;lyi#LBW6MwYUMn{yB zIp=X0uVa@F)I&{FK?#NT5O;7I&$9V4QVC_lSt6V{d4os7iM#1dDwR*=^X?;~Gp1Cz SZpXF&0000W=xI%|E8j`ObL$Ve+Ok*+-Lj*^5urtjXaET6FA=Le8D5idV${N$jp}77%a~|GtJp zU=jO;ER)Am^Ij_LQmS9Zu(a&ee4UHdcdllgQu$hcH0PM{;WeMT{%r+&#QuN$oz#G^ u<%JKo*|uh=kp7(37Xv?ZQ=6X-W;_M& z)p%NgsFoSh{@;ZYGN24v_i6q7|EJizltqevu5bX}`O~49nM=Q`w1Izn> zvJEO6`|FcVVl#s``eZeOE85u;qn$wpr5#+K{BWnEox{h;Ln}oF$tC=Xi}&#&&R$_z za$bXr-Q{~6tc1+yDRo diff --git a/htdocs/theme/md/img/menus/graph.png b/htdocs/theme/md/img/menus/graph.png deleted file mode 100644 index fb04031d47a2df76d49938e674ea79ee0082d470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iDo+>35R22v2@mdKI;Vst06qqcunPTyYr(x@U;b%s5uWY!=cm`M0B(zG zv+Bf|bwmDmTuT3BRW1i=TraHu(W2H*3H6p_GT=cW9gYn7;(mCJ=ms$8ZhkW@QrK4G zW_TO3QCPoiRjnhLO!^SMypjxhF5>uUNH+VT#kSLigfDXGC>F4adiQNX@ljJa!D6^p z71MKY1|n{nkkU1KS}b54bceh5_EI|2MM6^hiG};94xt&(OcxFD2e9E)#@lCRiiCLV z0FVri6@}Ck-i+r(LR>eH(sM&*F_Qn`K}ydL8TawpW#t0TW^DflOg)_d000035R21q&)f1g7zj8dO6)oq z#r$A_lmp8N2X?&!E~X95QVD6v4-6-o_||hsbKbA0oPIj>ruhV8qe=E>S&bQlA9=DbN)Rp00i_>zopr03ho_UH||9 diff --git a/htdocs/theme/md/img/menus/index.html b/htdocs/theme/md/img/menus/index.html deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/htdocs/theme/md/img/menus/mail.png b/htdocs/theme/md/img/menus/mail.png deleted file mode 100644 index 7b65a3d522e233755609ef0e370b2fdeb25704b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iS)MMAAr*{wFC6q_b`)uN$i8!( z>=88|*-aaTl2wm+-Em41es}cd;%eC+M=memziH|9&(d~AKfC@qRsOEEVv7Y7TNW+9 z#2|C_->bVE_Kp&BLiewp$E(zQGR~sn@}oz7J4{m#yh=%bp29j`ZhyLem=S{>-=TX? zO!Ln$tlI3zVICK!fw6eq|(tSna!Se&Odo%^yrUf!}vj?wq9vbR~nQ LtDnm{r-UW|UmsL% diff --git a/htdocs/theme/md/img/menus/members.png b/htdocs/theme/md/img/menus/members.png deleted file mode 100644 index 270e4de2e052c458576a3db1b2d32412f6384dab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+inVv3=Ar_~fPPFDa>j~q#}g)`R*B&UlUb5ow(-`eWCO!^z|o~H+Q7#1aGrlzqZ-~Hk&sfi*YA_DaV$y;fB zd*b!{9Rk?bhMm|nMBz|t46G*Az(X87p;)hhh*)qATsP8!vl0lvp_@YYe~V6IkQs%# zQ`%^Noq|Q7G~N*r#vHhm*8fu*`vDyN8121$l!y95_zmbUt=E5I=Uo3rW@zjm6%p1P zIQt3IOeJym0B~|sNEf`weZZcq-kE*_`ezsG#oA>>L`1|BK)z7^20#4I00000NkvXX Hu0mjfcYkb5 diff --git a/htdocs/theme/md/img/menus/money.png b/htdocs/theme/md/img/menus/money.png deleted file mode 100644 index 707d167616765fe8f34d8e637cb2a2a1ba681389..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmV+b0ssDqP)hFv!E?qg;k3qU>V~gR&n|6PmZe@r<<=_ doXEk!>@3ZY7E!f&hd7bOYOV54(ZH?qSGmLm^Kv%%R#b)_0uu z;SUVo56pQhA%qaZPtZjlGuyYo5Zz54KlT5n$RB~ebPVzbFq4jX{(y|imdPl6Km=Gr z$pa!F0wN#+&_Sn={{y(d*K+4Y40r&*ePIG{g*REe;xgF)RPpR@PpGCCaA$otNd@2( zpVs$*R!RZ4^1Dtc;6;9qNd#aQJ2*fS?d6U$Yp<-1JycT&r~xJzuWXXp7$b~Ueshva zKok2oL<21xA-fiuXrPW-nZAi5U{UnL)=)ZnMLzDn<7|@)^#F6*H%ITc$A=I?2;bAH VInb7oA^ZRU002ovPDHLkV1f?0gV+E7 diff --git a/htdocs/theme/md/img/menus/project.png b/htdocs/theme/md/img/menus/project.png deleted file mode 100644 index 54f4aa382fe65b963ada43e8b5468879ab4c7dea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iWKS2z5R22v2@7QYJpW<;_5bq! z^8fvRop+nlrujc{0sr3`P)hj0QnaL=nAt zb0`XL)4`S9zQ4QuU}5iX{T#1w{4{DfBH0BR zqL~z!Yt)-BNT14zbo{ z8My+p{9vieIg7|0H~|127(>>x153nhAs;{s0Jx^$2j~I-yT}jFAyams=^F?L{Q)u2 zAo2j@yP*Q+Ipd2CO#*~4@7#ZKNPsZy>_DAl4TNcD2ihcy5T>0S2#r9P6*whX4Pn~Z xfifS&y;DY*c6LBiXb=%mi$AmPhV3PffPX10FMX7kh8h3>002ovPDHLkV1g}9qsIUM diff --git a/htdocs/theme/md/img/menus/ticket.png b/htdocs/theme/md/img/menus/ticket.png deleted file mode 100644 index 57fc2aedb5b0c1d1a9ac6fcafc3ebdc1d67ec978..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=xu=U`NCjiEMAQTO$^~-k8&#|p z%;RJ0lj2zV){*ODLUoq(4Z9b6|IEL|_HWtR>F&Hs_WY0nnzZXqtB&QdgGoRm7(8A5 KT-G@yGywoow8tF83EDz#ib*S~TC&<6~ju6{1-oD!M diff --git a/htdocs/theme/md/img/weather/index.html b/htdocs/theme/md/img/weather/index.html deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/htdocs/theme/md/img/weather/weather-clear-night.png b/htdocs/theme/md/img/weather/weather-clear-night.png deleted file mode 100644 index f89b2ad8cada273150187dffce8aeae88aa91083..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2276 zcmVDgE0yw36#QR45dvp8emRp(IPtQNR*?KecbElxdV$G=m z&<5RKhOgXu@N(zBWb-_|)9kJ<(I#Wcv1$3U!S}!Wx$Y-!f7D4Ssmw_QQ1HV2Zu1rA z-F27KTxn<9#mB?PMOR8vQYwxl(+~gP2WeX*8Ond1krrtt53_Vw4E^=y_F4huNI3Y8!nT7X9zpNtHTLKp!x97?`AT)V@Q zKNuuJ*f;>%{r%6f=UwMHO{O4q8n}#zK?n{Zj?CC4Aj42$N%e|{! z{^oN2j`r@0cl_YhyHAtiQ7P>y%SfL$5sqF<^vaY8IRU3@nwLE6qWIQq z6hO}ZLHj*VY@RzHBLPYVtP@jG0wsn1GLRc0ERo=*j46pIsaRx3$GrI6J8kD3z_6ScOX!IHyDaOck`CWWtzVv6mr^FvlbU?Xm52?|Z_qg|iU=rT>+?c;Lij zRMI(+#S~WI^WS?u#KEQH2q^{23>nLYB}Vep*>R(XULN0W1OT&Md;i_StqBo14t>BO zCnZN1lw>T@W(k*=SmvyRl#p-;pMVOZJamkC=vo_RBLL2uw+FXaCBWqX70Z;Y$z*km z+#Zm#pEWXE3?)W>D5!)uV1kR~7&Qu9{{K7=zZ|}u6~K}Q@3~>vOUYI5KjW}mUSi3$ zFJC|F;qY^Y%+V$$qtL5U-6srLC1y=oaWJ=w8h^dyy}u^Fpiy3PiX(Lm1xIk0BcVY9 zkCK!cE-@2|qjt2+VHt76mG%**7RPBIYy*(IVQINWH?MYN{R~<)XsXaiJ8R%=5UanwW6eN1`^M0L4phjIO+l(xm;ZmNR|?4 zkTIZ1NrQPT2~9i|tHu8Q*m#tA)`7#l*#H>3MZ=QPW28{7oL>==Q86T?&jL96FcW}R1#y9;p`QrQu^&f|6M+PhWhW5d>|dJ9n1N>A{rZ>*mXeS;JT;^ap$5=-8WO;$EyeiilB+nV;efiKVIONWs53{0 zJ}&m>TcVi&43t;++_VUB@ilPvStX$W*)Ni}4ZeC}M=mh*@IV%AXm%cJOmo@ER$xQ~ zUzkg0lz{3=2ZL{=)M?SeW1>;Z(7`9BMGaR~&|()Iphl0Ow6?%lcFeFel|@(6QBs`w zBPKV@2(WEhf8R(=#G^rtruH@8qN|;>&DDU*k zr6;V)QZX5oLY#(q&Ok(s4lb66;`fIg7gtUxDFt8ztbIKtD$;m!nXDoG%D6Vp5fBMX7wWi5L*?JNLueBPuoopd6fYc)NQ~zkO6=_Ly}I z9t+ga01klmOGQp1%v^P1_2;q7&smLYcfZ0O3d05ggiu^#|J80Y*fSuYB;_c}twh1(G_mI_KOu_JPq0_M67Edt$rUq zW=ce&^t-sUG32Bq)Al`X^_F@>WlrP_Ngll6jGugtxy)`nEOYqusmq3y0>Mx_FDS8k z%?f3FVEesq@!@)WLT5-20^WD#pZTErUABikJQB5|CM{6vQ5F;&D^I|RZNC4k55Lk+ zgG}L1!dWtRf8(_mT7QUtnZBuE)M|H_#qB8jOIjWQRd~RgV$a9W7~(G_I|R@lsdR8^-t{Da~bc#-nqm7 z?=|L)hoP{ebi611arl+_k6r4Qt%zK~PtmzzgHyUmuu@xV4q892Pus=#qJs-hv)oO+ y%uyROr}}KU1u*Cjy`Vo7dc$jTZLZC=xqb};coKLhwc*160000 diff --git a/htdocs/theme/md/img/weather/weather-clear.png b/htdocs/theme/md/img/weather/weather-clear.png deleted file mode 100644 index ed1d48065f3fb3aee5b7d47cef6f0d869b6ccca7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7439 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 l$L+Wsx8ru)j@xlN{y+LoGz5R`r|zkH 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 UJ;M`Knu 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 M07*qoM6N<$f^50evj6}9 diff --git a/htdocs/theme/md/img/weather/weather-hail.png b/htdocs/theme/md/img/weather/weather-hail.png deleted file mode 100644 index 9df0bdc24d720eefffadef0e5bd4727de341b2db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5090 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 diff --git a/htdocs/theme/md/img/weather/weather-mist.png b/htdocs/theme/md/img/weather/weather-mist.png deleted file mode 100644 index a2b57a5e408e01d4324463b276d147fa6f97cf13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1524 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 diff --git a/htdocs/theme/md/img/weather/weather-showers-night.png b/htdocs/theme/md/img/weather/weather-showers-night.png deleted file mode 100644 index 1fff3febf5c3132287309a8eede8dd0e70c122be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6123 zcmV@ z1DIq-BoKQmGt1a^%RN z0|yR#_l<9Scw z#bVJE3I&tT=M6nc5+l#R8_eP<~4_mF`b_V2>VNL_25T8`cco{ z{oUU^OG@w-_9{@tQQi`G`FRfBT<{rv`O*J?GxIIPbVP_Vf8 zzz`0TlasSR;5X(1#<63^;vfI`$M5^pr#|%stvdw>zcK)L%fIe*uiGF(+p}`z%B5Jl zr>DmN0`5(0H=9kvSUdpb%H^^_ImUW!AWZ0Z2tWa#_abqL*|%@s2R`$e&wNU2PTyG& z0`v24!JquepUmICfB)YM4-YR@%o>zH0q#dfN6o~|=)(iR2n!D! z>n&cqn2>n?JKph*XG0T!`OEeIEQ)0+uYK)ne@|9@_Q=Qx7RUNN-WfA%JnwwN!UF>X zhIigm0E_tdM9Ebt)6mYJKX1;SJzLlK2fp{c@4Zgf_?PVgklsTj=(7>tTND6rbFApy znU3}SvnM+m0KgGSeWulFnNz1u@ys|vz>_3gLAdm3+-EhehdSez1^}Didh4yda?$rf zUy*pFV968tb7H)<$4lo#rh*Ha2E1T)1FxcdQB+9xSdj0PrE9 z#&{1P>p`%u*7y=Y|Dpl#m0m$YJ_jLr_EuM&j|(#lg$M=D`dmqW#5m8afn`w^(0q}E zCvfFGF>h|U)w(5}1gIx7MDbo)S*M0ww_I113o z0Hi|V*jIaANycLR@$qqkb!j~NvKTL6Z8}Ob4w8ikbq_%Xx_`Ve<|g&z=MKQjU;c6{ z;cT%O*l&I7TcsOsyz!n&OT#FHyQ8FMeUygXz1z~TILhEL0Kjipl6lN$9i>s$00=rB zg0lRM!bS%v#!wvsE?jbd{r(y4*=63(1%Ow-`qfs-l;pZYxm-|Ajj4#`*FW^34}Gzo zjZS*z)?4=(8bV@OU*zEKSdZ>&0h9tHz(66!pd>C%gBWpp)&d+F$}v|bMxzrY-UL8! z!72e!Qf6rVOgv!c&Yfo6x^-6Wm+BA`XyJmaIjrl}-Me=`rC2O1j^m^#!8Zlg4x}bE z8#it=mtTIlx#Ef|jW1zQR#hP&cp~&HPe%cSH>69(P~`acjJtU8B5ME?fcgPQI#0G>g04mUczh1#s5jS6}n%L0RPv2{AsJYxB>We*cmuh9D- zierl)+_PnWU%z?slb>RGtG(u`tFJ~dtm#jA z4^Lq{ow$C;XzaQQTH1WEpE;_07g1QVY)A@5&_q}T>#$y{`XsLK784# zRZm#5c=1CnUL3s`h`h?B(%ee5x>&-uP8>gRXw&9RkJf_2A~u`P7phsQ8qyIkvv@-O zM*x)8gGnv#tpsO)bU-OA!|y(qqZsZ=2=Ja-fohJ}_Kc6hSeNw)8$!W<7x38ya6DJ| zx?)sdP9oa>34jPDuLag^+_2$I#bW8QdGqEQ$gA7w+KGBSC=`n6x{;B4N$`R;v>9Q= zu9Stel;=a2=d;*15e1BTdWlT9*SxNTA3_1D!dXQS^IZk!%UTriQE2MPqG* zGFVuypQSKa(Nd%o3#L>orlC9{O%oF(amrYPbDRLEa``G&H21j2Jy6c*`+$UR82_fP!06TLias}9x?kmy%4S>)u&R?)#Lq5zE@K!lA z3*fd`GD}_7vaZ3au|7g|qb@FN+no%6RR0(9nwJl3kV+XV08?Ppg9EN8i*DP#Ll);q zT$#x-%x4U(Pw{-Od*9oPOELIBVMsXskCPvraPnV@XaL4In#(MExxHNv2qY;P1VKR= zK@p~0EQr;6(&=_5MK-C$PZsMXjq95 z0GnK?pirWA_qp2Y8DGhiwmHK-gpRI(bAn7{yw3{s6)RRs*)#BjFL(e!Ay=fHP{vqF z7#do$QD;5CVEiA7-|BY=0C+bW&6-fh6=ql+MbnOv8L9TzGhy`eb} zsz|X4AZ#c=nmRumHK$IVy0Bv9%70bLjUVuU2bkLhpwVc>VLmsVFXRJ%Cin87SVm-| zvZCzXGwyozOvS(Ltm(LyYw#4jB_ED%l3sEc%hD$5L$Q}S1Jt1H!HGImu6E3x*>b1 zu9%pNqE6CNDOG!W`@(zPd*Q;xAIinYtPKXm1p|RJM{%qL(ctm^h#Tv^-SZok z&ay@}Kjt^fJ6|!$7bUKoW?bqzMVRv-jo^2eO)O{#q|^%UP+{3CzM9|D zQyuB+@0+Kz`rS2aR@bh$;)-+z0RH>4Kl?Lk@l>oDojZR%H##~NoIH7|Q=6z4%RS|4 zz1}pFN--#ya~47Y1P~&mA}c>51E?h;FFbt7wEzHt8h2WjzG%@U(^m77$Ey<%L-UIbv*Qn_p^s^57>m4`bQVECzN zTdUVGAp~g|PZQCmkekg}u1HS14fDHtz?IZ==0@5Z5Ae;0MsKx(i%@H%5ytR5#9Y^D z`4AWi^Oh`GeD_9u{Ax1htdF7`D^oQv7qQJ1@;O6ib1`L?pA}G1J ztvugsO_~EE3#C_Ly*s*41t#B&7E_fV!2#-(vzNKXN3SI-MUll_J!joPVJF@P3VuQmjL+YH^0fJs}y3bHCmH| zfRr5cDUikded+|EN(5>0Kgzk^vz+Ye^kOlOw`64KNz5Ilq=ZE=0AWECVjOV|C|!ux zr8=Kc01WU$3~`$KR8s& z7Yb)p+YhNi9E1FXE+-coyOc#8fPx6`5k_#I0q~3hzY7?wMObh}Fj~U+G~oshWli-U zV|J%B`=Uge@rd^pTpKrc1);Add9rv4o?}U|lard??K-SoBn2M-(&x`P7){Y#}-P%IMrewt?;TsBi4 zZ^%34dFC7dPoO**!F|~QBx2QhO-5iSPs(I0r%kNv(=JyUS33K8VAKd7F6_xV7UC3v zLpkV=Q(`1rDwg`2t>(V|zQNHTNMkga)l@>7uYc{!-QBx(w1$U=#)atk@X+v9-EYbX z0Pkv`?c<+<2}Oa~ry*k86Bdfo5rQ-dA#x<<1bN#NXq@=+R^9OiV5jaMH3a*5md{$| zeePt+dP;6DOuQNB{s4V_WH2O$eDPdSUsl=NsInW00;==Jb?I*e7Ym0y5n!)zvan- zt}^5tLPbgC=sn8U3QiF~r+E_Wb^*#WzF{p2u{6>G4jAUJH=)WL3ct?8`1nU|7XaFS z{^x(#6DLj=nysm!o=Ro87OKj%8W-wGw^JG3x_+ShC|TplSKZXKJ2q4<)$DYa(>x%& zP{ER_S;|(eMMao0jzIm7Z;jeV-De;rR`G!BoRhdLVN(G1ATuTrQh3FWZ|d5iYS*k@ zR?e6p+fZKDO&#yRIWE&=->Fm=L<0kTAF}37wx>V+>2}SU&9+oZEgBp>s_alT`Aut< zZ`n82^ZO^716%Jo_fQ*IwOQT~mS-;J;EItvC6Mr`UbXZ-=f(!7Yhiq0V0&>({KGEE zJRjz2lhd72H%fXW_9Pyo@o`@M4^1dM$Dq6* zPP1-^odXrEzMvZ?$dfPQ`5d+O}<*vu)M3tt55QHfi|g zb-6abA06{=oWE|lP{41YGw1~aef|3h{0cPdJDH(ABxyQh_7lcKgL53zg^PRpheXs# z0(XUu?nE1xN@O~2NN`3<2mC{rPdrpmsv8qLV{_R_(G+S>+#vwYLB0C=? zm7GaNN)o>i)$v9mbXu%Wd)tt_;H$?Dx79XpE~+HkgltXOpt+y?^r0pfI#vEivs78! zHB1jJJ6HUrok06e3nx@z@9l|C-#VUcZ>nzS5r%Q}Od;*mF>yFoK(4opj5axOyuSKG zzEW9p_|09l`3Jv>i4CgxYFnoi1igz4h_~pJjK(^~gom8kl~-KWLToQRQ+qhpU4Bq( zmB3?ggxK@-$*i_fzBR$Ook^P7?jU3}M;r7WLv#mUvxB<|s&;<%_~7Z2$J9rT9MMzo z3o+(@?)$HzhdE%~GvrTTHeSk&1CWDl>AnhQFB_k6 z*>HDHZE5GGx4)?x=%}b~uPLh@megr*p2cKW^N92a8`h*T;^b@V+T>C>qoTAOy{#1; zT7^_IEbWvG$@c4WzWTT%XWyoL3d_eXG{`Z7&tvflx4&8jg$e^5Vr^w!seEj>a|FKy zf#*{$9Ji+*ySnZ?m*Sp!voUCC7Rz5fIpCc9@O?1gJ@4(n8+W$oICiTNF@ev_XV$T- z)0{8?!Cjb)%lzlOVwQUA`wnbY04`wi|L4KB44VUh!RLAq5Nt@mM7%}L>p#dH@}2$i znJdM8o_!=mFgck9nBq4vDB9N&!rfCA1UM@*1(*S<|p9ck9HZRUsKM|h;Y zbBadI}7f1wI=l3Vf~WJG%PW02sg5C^4#6kX_o4RN4*BY6b)w<8eKutyQMp z*3X~g5+ZN2a(BNG2CSx~tqe(z znm+L!&1YZ9YdHSmM*wtyH#zH$>F;oy0z!ecBqp%5w!Yn1r_gDX-Tk=CJLC4n-tl3} zz{#+~Wwwzo_ywnU1epsNfNqF|3;0V}9x;LM03d$PvBLV2EqC9eG4fKx%@4cZGr-E# z@P<4VbAeLQ)_Q%<%$>N#l*3>u$+7;%Zg7T^D1zCpxUAynzDGB|`Q99b^`;=Wl${qR>x{d-zlQ z2`KnkB9Xdb+N6Q(;CfEjicS42t2xQ|HmZqpMhaz;vjBz&(wuGT5e|3VaFQ}1YFky|kS^Pj(!{{xK{aIg7{JRtx8002ovPDHLkV1hti?<@cS diff --git a/htdocs/theme/md/img/weather/weather-showers-scattered-day.png b/htdocs/theme/md/img/weather/weather-showers-scattered-day.png deleted file mode 100644 index ae098117351df526fee6029e0a03bad1359ac36e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6317 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 diff --git a/htdocs/theme/md/img/weather/weather-showers-scattered-night.png b/htdocs/theme/md/img/weather/weather-showers-scattered-night.png deleted file mode 100644 index ad0283a08db6c9ea96cae7dc4e6705e128b0e9ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5171 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 Hu0mjfn)^)Q diff --git a/htdocs/theme/md/img/weather/weather-showers.png b/htdocs/theme/md/img/weather/weather-showers.png deleted file mode 100644 index 38cd41f03b512a5199eadd727722dfb41c233914..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5138 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 A)Bpeg diff --git a/htdocs/theme/md/img/weather/weather-snow-rain.png b/htdocs/theme/md/img/weather/weather-snow-rain.png deleted file mode 100644 index dc742aa1c4c7872fa28f7b862f5d710bd44318b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5406 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 IM6N<$g78RZ!~g&Q diff --git a/htdocs/theme/md/img/weather/weather-snow-scattered-day.png b/htdocs/theme/md/img/weather/weather-snow-scattered-day.png deleted file mode 100644 index 0048fec3df022aee9473c8896c1b34e2aef75ba7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6823 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 VXn=*I4|D(k002ovPDHLkV1hQR51{}6 diff --git a/htdocs/theme/md/img/weather/weather-snow-scattered-night.png b/htdocs/theme/md/img/weather/weather-snow-scattered-night.png deleted file mode 100644 index d8b0ccaa7ff12a3b92460a113a497ab758135e84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5583 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 m7ylScFu?>9OfbO&6J7#*#BHSJbzbfO0000; z1CT6D)`p*xnWgTT?wRSiw)y{S+qUfut`%4_xPi581=hCt857^VW6yLCT2+;2t7{!t zd*6t(pZ7%azb@gQBz*|*1RzB=Pr~pvLLExwz!b_D&_KBea))0R&rvma3m${E19W>4-SG`nUiu#fKmoppa1f!3|(cXYlk;K0g5Q9{@n#0^A58#?Z!UU_+5GQXvu5L@7#$6+#e4 zDfM1SO^J(6p3`wgiq%<6!WTOJDlZ0+9XN0nlrKHiiI0N}w7i zAVY%IJd6lss;Mx9CsDznDj=B%JzyKyRHZ3GQ=ugyo3DLO54Zm{4~r_hp0~Qziq)sz zSX!L@z_DY8!yo_nM?ZZ3``!fgCP+eQDFzL3)q?V*xOpx zqwSU+%KD5eae@g9dAny_-i)iv*2c|5rN%VEk}8W|`{`&l?Vt6ah1KLqt7}bD2!JGs zGzuf__4{*`SYH3W_r3GImtA&Q6Y&3Z0A<*p!;oNAY>WwOsO~`63moiha(sEx-zsDO z*<{D{hvTuM64v%2)=|ns)@#vSpQN*VRWIMV+x7&MeH*)N5LrLQ>)`77g@`tCZr%ZVUX}3q~!nd-kC$65n z!o1+%;?lZMKHlcW2*x^+B#|hJM8rszroNx1Ad=UHl3qX6cyn|67a#h-Tkp5Bve?Wr z4V%r?9*~WUjF@J#DL@L~_#1Tg>{)sC(&^yr*IZbOn#1bGPKt?cFjC#xeY|mL#M1Pw z+|c!Jxa$UYv_WLBZW}2dU#3#3Wh$Xyz!{{P{ReB!5uhoXzd#y3sV-i0I%W{i*bF*X-5YMoPS9j+)5 z0R`_>0X5c=Wx0r$L0_?dSNr``)|wlxT1|AcUiZ!gGMGOzJNxEGKjQAscl;T8*ux%X zY;kJ6*dUJMppqoJE7j^Ps+G#U&z?JX$Ab27p64cxk|_5%0Aoks*fM42_y43?p377t~wpY#xN6L{W^h zj^ZqzrkRR(RfWMFym|?&#g@tF=2lyJy-da%k<{xoQ>>LVO?7j#cJoUvxg-|;gdY9q zM+YZQo;(wV;q|jD+ZK`CwOZ|t2M!**>3E~D+k095< z`<4kqrJuqtuG_=qGbfpv-M|x~eG0YTsft|BPapR8FFN~w02#U_lFHNs5U%ZhUg!4^q za+A;)69E3#KW$t*GAKThY<#?NbocIE&pmna)LoaCmo|eSj7LXD8pXi{**?~lw52#u z3kg7)DVf)z%!uMWZ1&Hw)&C)N*X8Qzgda~Fr_&S0#u|tL0m8tMrri=imS^}p2hAw} zZNuH;+TCGR{DId%YoFj>&!I+3JSTCJkPqwzV@IEgiOvL!* zm6eH8Cyw^qz3z3dMv^3V7m?G&4%_P07IX(LH=3>1d=!R&&n3qTOq8arFpWZKzaZtnomRl+yibr4B;rxcZ!K zcY6>G3?>ZM>c8Z}EP|Xzk}sZ;+-{k=-TW~O|6!S#nfbI#m&NPwb(xvrvdp`~%*-D% zHG`oonY8a08R6lnjtaHQQYrK0%a>W!dWS7>EE~#G3M1unm?Tz0fhD0i~Q7og*ZC3xjNO$jg3vb`n1z`UOYN7y1mh8q~2-RP}=T>lT$OP zUP6XR!x0u7l5s>?MnS)0$4qbZFc!NqIusM&9;q2HXONpApOj2VJ?nbHz1$Q1cZEb415?DfMyb_NO> z>@jJTsWfZmVVY4(R#w(}Yu%M@PV{+cb#!#Q)G`vaifp)6tJ~62J%|g1cyfFMCrs>s z(r##GicU&hmO+{2y_&MIC30Ma*gBeEN&K|8SktDh*K;k=IX2}a+bHsp)$4Vut*x2` z6_ZLExb;x+R-)%pE0@aJGc)O*#5AXCP9SA~C7U|J8HSX@YIQV}z=hafZ??oR`h^&v zOzTRw5a6=8*@dOcFTd*h>y7bl^q~)Z_>1G?V`m7sKvEAujA&-Mibz(e6v;pG##ry^ zWq=d{qiDtmgfhZ}Gq5B{5wZ+@AgH8@fXdm#cvX2ns#&#?_7p{_-MZ%Wo)RJku&U(* zp{4&jRumHo`kpZqIRg+#-h)%^G%+u&;!Up`z)U{42#3Z8?24tpT}9x~p(FSI^Iw;J zarZ+vU-QsI*JL@pJhsfE=hFi9*funlSHls>`69}xtm%*no}aqrwU(DLlp~ZH09cp! zYCUhQR!g7BJ2T}b&cX^~4-A%tHY~%yJWcxoYuKizW1?=gdP`3B5kfs1X}<_zV;|j{ ziVbO?lvQ*~`feC)$dm4EEj#TIede|VR1wI;KftUq55|ilJ;_|A#Z-`an!T9)O zP_H-a#OzAe=_uD@=><#_P-#2KMAUHOhM8^E>Y1Ot@80_w^YimRl5HurM6Z9t8(vwd zRGw{S5h8}0(OxhVQT59CbjwcSgn zA-Bf9ycb}@0EV%sy%Oask&j)uHPMH1rHs?w2N;6e7PH#yFZQel?M@OPbO>vr^uP}F zD^a;r$}8CMp1lWV#e#pRlLb|a-ucdVzItY6`bCOt=&dC+IZvb{A}m?JKosOWv<_5e zh@Nq?+f61zf5eIZp?Ji)Q(k{XiO~?C=`(*`quqH}rCSC-ksc)}J=#;ytdz@igckY! z+)t(9O6su}DJQTBnHVF0L#h?;R~oxpl)y&4(fY$5|8(9np7DQs|MHi=7$c`Lb91BF z{D4ZumK+cE6O6EYsRV@;VUG@jBPigI7Lg_qMzAc#`H1N1-kc>M3j+kg^6VT&i_$U9 z8Uw@0Zw+UHrdlcOOOvAj^c*M)V2PieT=XcBo?4_8*S6Bm5N@v4cD2_nfKNd11&}0w z+0kRiZknH;z4=2Q`Vd5S0QAGc4Rf>eKij%>%V#ArV=5EG0;A}-FqZswa`Z9S5yb(F zh=Lv>rk52x;(-U#^WRmRG+C=Pp)DY3o#?m?h+{bxI5_1M)>)znz|K0?5_$`1{U8AR z;V?iA#|6r4&~MA$Rzg}pw9bDnx$MZ;*w`I94Bd9;op=BJ)1Ufi#rRZ1X_%KYS?L-f7Sis-_S5T$r2USrK5d<7>TdDOJ%=Z}A;o9yCfW*>{ zpApD?A3%j*x?b=Mn=zc~0N_oPY$LDH7{8ZjFaSsE>V%0n-@z)`-nCs1?K*nxbvJ!O zy7}XJZT_-ruf2NZnrp7HM~>(l-}r{956G65m&&UvE9W#D&FZPyxlpa_keZQ@+E1x- zs)iT^x|l9Ost`d%&y7WN)|HDmf?AWOt`3yfkW!|4ulg?*M6MBLFpJqI$}YBMt_|(f z&jtFDi5*<&|0${1L@SQdlt+`(nr-X3wggcB)X7s9k5!*_;F3#z)3+xWIkmq52O&BB z|C=^$e7)MtiqOxrNuX1fNjWX@yfaIUNWcUMQwf9Uxaj+BJ)w7RDPoD2K}}rOJu(t~ zh}6*yD<$%TcK{@j<{p^FTE>ae3?K$;7V-$y$PhywAFvG4bRdpy0tlR^OH^vxi4)B| zJ9lnf`PHw!+_NVcIc-8ejdH9>@On7RnOg=7a*;^7a))RD4gn1GrEL}fJzHH%9jvG) zfcjP`6{zWG1vI8=(DZ1+BGZ~XXE-fJz$kLNt@WN*hia4m*r2A`Xl}ZSuD*d)=IwEZ zZc(Y&6)>^vBi;Nwfhcd-xG_zo3-%Nv`tgr{Y!_X0QMP;coYc|$f94KC*`X6(i zrm-=X<$)S=xWE{MkaeyYNbQbQ=gW$Gxg66o;uOz4LPT@E7wQhcL|fP9dWtZ@6hL7P z0syK(DE8!Be31hx6zw(@g19P-1H zD}RURLt8~A)$^izN)#i5=}9~C(ip%57}yo_0t2)hy+`0Wz~^jG0SrN;S3q>ds+Kd6 zKW~VKbYQzEHK`L=j+aOx zD18F}aF8_=99nv>;5nZek)m^pi1t9lpn0c5Z$bZ%+4Eoc8hh5Wo@tvmpJCg!ooSml zov!;zcI5D3&JT)oNGd^fXPmAMXdqU2lSCjKfF|h(BQtE$%#Tzm|JP{NThfDrN{+_S zqemadfWbKLyz@wh^wvA?tjV8+rNyOsrBnnYBON?n+o-c2Wdm~3X^WmQX;hdDjD#Us zme)PxC#4KQlSBG$Vj?!07F7Ge2k+BqaEo#LK7Ra=Kx$eP2f9YQ8^^#{?{zTvp@e}g z08IIn;*k~^ZMYlTCm|*_Z{G672!g&dkhwdMTIN_4&_#{$Jnv*0;J(2*9ge^(y=Q?|+{O zi1z5r>ATeE{JPst?^PT7LW$g2O$C3Y*$qzYKQP@1M$cGomP$|G$zE=31my##`PI8e z&02LU47ZK6pnoXP0|>P0$S|c$01exn`}W(j&a4VpZC*QOmtP;*!TOlJ>uG1({(X1a z{8H0K%3U3ib9QpJre{NAzpL)c+Y8Q0CA?%GfOKs=?J77?Mz!H*FvK}WDb7q)qOeim zY|`%l!ILt8@&5O}pG*In-~486{G4;{KX&J?U2^R&y{uQn)8&Pg;d*WPc`IY*T&NUy z+S1Zqa#ifetlo;OTI^b_Td_0V@HV^akN>ulCyo;ZTWJp2#wjr%uG-S#x;4d)|CVbG z&~fH%8^51n#?i#AW7etDt*y1|x5lDg+uqvzHoI+5w@Es&Ce|RCcqW+1829(jIm_zh z`ghJ_U(bzepy!!^?;QzZcUS0XZzfS>!b*dX@(A>W=%^49`eu;dyomZ<8l~w(xSp+n zv2iRgTPO&bvm8p#ABF&TGg_4{dxd;(}G=uh#PYpaTNacdalsxF+tck3>GFQz8{QLJ~b7dz)E?i2ksvjogQiV>= zfjnK8tt-IYs?V3U2RU&CE(|ud5DVRDGut(ac7rx@fGyo>HOtUOYf4T|cHAbwzmET? z*XVvB{i9UnMY-}`w5kRcTeqR*e^p|91sEo`Y$`cI4J9n`AZ6ZgJ-YEx&M{C!8L z%h_(9_~Ak(%crNMIL*!7#ZC(vGEFU2#WKx|@k{59WGPz>?Uge9w*tWcm&eD3Ss2#r)|g4{cGAA;{0la|zjh=A5K1f3F$-TSDf1z+3X>r751FPcVTH`|$g$ zgyly@yGAahP1^j;E0J?Q-U;6`V`oz2!aWzF0TzMJur1Gwd+M{{MP=5fDyrl3e|*h9*>}-e_rDcS>q~ zJF^W1zVo*%ej|PKk}YQjj+(KJ@yvm|=?Ra2HG;z#LVM_oysC+7PL)K@dpUv|_$+<( z(c%Zz9VuGk95kN~ck=H?fUe<+A-S}oxL2mM0>O#x>@_glmnXf(_D+}@y)OAc+g|t{ zl{8mw(iv?*(R3O|?6b1${O-}hT`Rr%?7qlBDTIN}BTQwAwx$-{TP{M;?)iz4+uJp! zS}u=1L~noslgZKDZM0PLy1AKXF)z_|=;`?~DQsH($hhGN5n;|w@hvRYg8hqDF3aj} zYd85NES)(yF=X)JvYL|G%#$@%h=8_wl~v!<)oC$l%<#X!Ys3e0xdXR93f~hnVkt9x z>KZODc+H4sKe^uHAGcx_+{UD>XP) z8OR|*tS0-EHa1}^Ii|d_2EQsU#W{WZ&sh4+?tsxBr|0I9)c+;Ie>bXW@Gm0t8XOrC z>pw)-)u{rH_5R@YOa%NAQ*gp&kHEo!%iw3^rksB+^~j-x7cZ4@1bo=6P_=V4YMgB} zz$%Rf-qRUC!{@;=J?ht5fKCSlv$F_B3i%M8nJZhh;<=LwCns>X*}$F8hd8~#Fv&A6 zc$I&Mcg(P1UOzpo+cPl$pe2LtR}p}2tFAx&-oCfhWuKgmnlR#Rx4;35;5MSCCvFQ% zh>VAyQFG<(l#;ZsQy2`|Tw*YXrB-#g4V%0~88dZrvl)To<_v4}db2dOR2F2g+JM0T z0hQdeurNJK3pfY{!>H_1MHE>y_=^8kDa)_AA>hrt61j4{c?}UVn9k~;J z3qq!U6ubSh$`Lv5>+`pZxp>ca>fw*Pdl-I>`(uz_h|baqJY6j_>$mRBQEYs1zmJp8 zij9)&jtwNomtD^=uwVY@)(3S8v$>=U->#|0SKt4-Y|cN<)mk2WH3MJRoisz$j2)yq zJiC1RnZ$z^6~?H<-R}bc1%!z^(q3HtX=X9}7DO%naPgiSP3RH5WjEZ3I~iE;J&b^z z6DiL%^9!XoisZ6F(SXGypYyA0aqq;(58g<=r1&m93%#=P&|jv+vf6sQCMm#RBEXgp z50~$Izf6nco;|L4=fmW1a=a?105|0p*<;G9jE8Sz=t4jI5TTFwr#~D&@{xD8z;6Sc zDIT(5G5`tG``|Ko6=VF`lv3Z(@9it8L{3Ew#+FF2zq|oAeto+5)qfnR#-tSanY==b zB++q}SY2~YKE81MI?^+9(7&|Y_|?o+`wqGUFPtjLa|HAWK!iM5C&#tqTytvWI2sY* zH-YkbVLIFkx2NLaE{t4u>fv{bx-eqym+3%AOG8SMgVaYKWz%NAoO1J2xgJj?Rh=a% zaEv@$8F}kBNSL>fhaXiW#Y7Sf2S^v#Ey+bcGR$pPV{c!(%r8gL7Z;E!BvaBU!ZW2P zfPbBTzX*E7z3P(q=;RYL&!quy7o1qOZ2&;OBTm?6v9?1C&2`l`i_4H7)DNa369gwt zyv5>LsYt7;-R>n8_ZJ9YyrvVjwY9-Bc02S4`LLD8gW2kCc$r2ADVGEDJjAf0w-@9t z&M=y?!4oll5NxwTxSJ~+@#MoIMEvyx7!VZ@5jUZ~5bSz)xQ*b14PoIE66esEB3HPL zyaSuR`gHZWshYC)UZD_>#fDI^5M~}ca_+$mv*OO1TUxgI`??CWTDY#&!zBg<%5E)W zI*VW|5#*9i12T;oZcr4=AtLxRwZj^n4sQB-!yZppNb+!n&ln5P-~h%0eGy zBUTZ^Q%H=_tY`Kiq)RZEtZO9uBo~%obafq`B&m`_(q>Yv0%J*<^q0wy@vEi)!O>cJ zJQHridC;0M31h=&xo{{zyO{;|VeVWCl}a!;5T<#!!^`kKq8jWyVB!m!~9cThRjO6p+Gov1&$vI^G`cbz3p#c9n zc87gXkJhwIg3#6h$bv=fb*WxI@09ZgCNJ;X17kS934Qkk7vB1k6YFJcT z13h$rP5?kQtIzF0!SnTinqJ5;nP8H^0;jDMoOV#KQQZMEbb2^UQe{0!i}A!>k0~lc zFZdl`3caHrU<$7b()V!evUFR^NbA(ykyoB?YOw6)j0Nib#vhFRR3BNf(g^ z_aP%6T}f)Bk*=X6Lyb& z5;Eb>PAL(96uK|To2|Kg9bMr!f(CyOy4%3l-3=z`dZ7s@fWMUhnH@-Ta)L+uetV?= zB&1Wso<5C#9|3Gt(BI1gmUVW)VXXm<@^~=C!wW=z3juCsBgf4Ro~I}<>U8iKod$d| zPxJDI;s5s?vj5ToNF+!TaUjvt1LpPWA&<@kaC3nL-QBR4?F827NLW-XMbE#S0DT52 zGYiGeZm`Z>4BLqJm+-hS%x(i$tq$HVmqKMX1Fi!NQbo@2*W=nXImSyqXwr##cX^|ue-#eYo^6uTczkJLw$9(SSqmOQ2YK$>|+W@3= zw?6vOkFJNX-&(tN?c-r>DwfaZd56+e5_gV=vV4!@nD2PzxK*oGiCV2D?z-!)`_bO< zAOG;6pwK;dCo`Q|sj`6O8U$E8wfjaJ%qT~R0$s2HqDO9w$9pp0()e&6@C z%jo|8y;`ku?X6q4c6aR9@xGHzI_bxV9o?rs^{Ic8F~EB3Ti<#DEPFnzT1^4z`**!w zr(*iT7+M_t{D!dv0%HjjE`DEGSs_@3V$D5h;^42%&NZIDefy=~`rPL}FYmnbj@y3p zqaW?n*#ET|K%f82XFfA|@4fe4y?OKI2>_t2N((!VLnXArsdA(^0w5IzQ|Jb0bQ6F@ zHniJqew&-`h~SXkg(C+mut*}CZUJOX9{0K+tN(9{b> zST45k-OgB#WNhoQbIv~HyKj8cTc3H;jn|+1t#5sE=WmnS{8OgXfBeUPe4bVwR->X2 zk`_*>%$CxfcQlSm10-9T2BC0IOixdP0fF$SJX{8fTNaeJEUfDorBYF@s#a__pR<%Q zHu<4?$ID*+`Wsg2-aj8SaoA6$rVblK0ClR>)kTPqK{Elg{8`tRe@s#HU;p)AV*B>( z5;py4^0{_1q93nW@qm zAf`=e0t|s?z9yDsCZ=hS&YlTG>LT0yVaV^~11m5hvxP(mmv1_uXCeQ6&)|Kh8Rl4}+5JUF#^^Klq5vUl&^ zqmMiG*eOJ3Dsji1cap|%11cZK3BDuc2?V|0LKKFXT+S775;Gn@;~7sE4?g&iIB?(qO_jj%#ZrlM@4!X$H9kHmTAc{N z4P|iC2N;sdPE2kT4FCZhI9>(;$3scJ17H9mv6ptI$kae-GDUH0LN~**5KIY_X)Lw7 zhVO?)ZFR*cSIQ;=rvZbgR;hFn%JQu7Ybf3iP_KXe>*W-j36?w_R>2sSkQxp>ZVp5r|J@sH2H=JjtZJ?)v#a)0vUA7!8Zw5J!3I_l^w zikU-(h6X=&=%I(b4FW!{T&_HRY<&DkC|3fNO!}lHjZDU7BE~xbh?9gtF7M_^=T@^x zp$UL2!dGMD^*s7rFfJ#`It@Zu+t$8r5d?6Y5nn5cKqm$VYFNugW^f3Go|kpV2*dMz zh5Za06bFL|lEJv3rz^|zJ;ooz60W>^&%V2-Hm&)wgyJ7NGu5<^(;ORJ6K?%-Rbzqv!-UWAHZ)0 zhJ0AX#N-SD3Imyr%n(5YVN3-i1_NmoVmynSIHC39C{Bx=Sj5T_5rXq-F+(SwOc|C`*83F&re!5=@Dh?Lqa#^^X)XZa+P%$m5GPX=$NHb0#kcuHs z$he_d2Ipn`u<1I&tS>j>ma0eA3t#xcw~mjEJq?0cP~L`uvfgYNb8{;u)|S}Jaxf7f zPIGSE4YOf`S@21HvocH;Gcdkb})Ny(9%qs8|GRVp|{sKV|$% zSlV)NK{_iRic%;FtbxMvqFQkwNdl7#N$WG%=e0iMHkbZqfL57sWj z6$)5460kVIY_&ZD@?nn6u^lj|=Xt8pXnJ7E&UU+X#>B+f89)5~7azr0C1Gks={b`q zsE6`M3+Q2kIMKdi>-eFxrEpOgNZWS-9%H2qbqI*w2*UfMuALSxh)5XExh!$hG{JSi zI?_|G=Yt_|FZ#R0w^GT1YF2#$zjMyu5p`)60MPAmoh z05->XpA{*}XR|gkw5C$t@a`>Jwzg5AeH}9Un!>WtY%Z+!R>u&S1qBZq5I#Wl<{*gT zu3$;p%`};_!4lk6!a@YPVNOJ!k02nrn76?m(vj~_(l#ai)U^8LEZ0z28_NQ4hIWy7 z3BW@Zi32dqWLiXGVg$Fqq5{fn6lDb5M{9Rm*e}p5L@GAO5Lg?k#9SM$4Uh&iNR=5J zsFH=n`r-J^vHz=*gx(&kVbZU3js^&M>2e{hFsx`mNnQ$<#gbHVEM940`Ze^CS%)zJ z7nK5oSQrVWIh&MMc;-C)nTsauH%->}q%LR-dLv?kVGx{52^n-F`aKk68~~yEu?O^4 z71Rv#A>qFbx!eU}0p-v~mQH zLa>i1#7v7Ku9s+~I1V!zZ!iXi^4T8-J|GVi;sIl^nI4&`i=APdKzV=j{QT@KuX@$1 z5|Liki(d4?rFN$$i-p1wwv<_VfWZQX6`alj*o?~P;zBDaNnb^4s2J489hTr&VQA2z zv_B%CP>o{)rcr@=z&==qVB^%tw1z3X^DdS5Dz^#0I?uatXj2l{0Tf&KISuAfMe=SAJ$699s@0n zh-fC)XOV@*BeJ04d`B^ZdH+v;y$1m&BM1)NFs4hufLsUe$)fE39Xs}3cm2)(3p~Ej zYR+GN-L==O{H*c>;6MNKKSi}#QA^89h5E|M6p*XT&d!;L0XBk{8Deu#iNS<^pU?*> zdZAb(OOR@*yso#qD0ZMUpZzeTl2pggmUd7DqJD=@GnU{Ry4a`)3m^iJ7E}QPDrv(y zUh*CRlsE_|58?#f6w#hEk6Dt_06d`09GLmLO690WFTM1KiTD+lL_{>;hc@c_!$wC& zpMlD+V9>&e(dl)mh%WSK869Do0lSamT4Wd-n9;@3$^4E#EsdSbHLBc7ru}6zj-N zMQBZvzr{fqhkj3Blu8k|^l}g~!5pR{RB3n*6xo34Fau2Iki{pV= zCeqIYok5wPz$Nhwh6#Mq+?HUF{4s9|uchCHxB~!ajOHpZ8og*Z&by5fqcD48aXnmMBzmunw#t5(+)DE!Je1^ zp+d#8jlBsBE~Z-63aAWO`?E?F45$hWwZk}m%-GoEmY2QkWizLqdaC+W4B(~H!@xkT zV~EmLWq3D$Iz6m00n65)I4Z_|>gxj#F*Rvn_zpo79%EXP@0NtnP>=--gBVj=7{&ZW z$oG{v@ua7SqmDjWjE!v&6B8T6=;(T(jDpy+dpAp66sfRqhHfCZra_=sIZBGJ8I=Oi z(ZN+&%vO4Mk|`F7hqgPdUZq;yi7KOUO5qb5{F)7>q}6N#!hk(w2gZR-{DlZNv3hluM`r^oZ`-~_ z3=NGVc)DVGdKYSlwy?4$?iTk>80iHmF9AXTx>Nat?gRjIHVWw)0G$j`F$Riw_1M_> z`|&>pb=YBtf9uLCuU!0f0Pq5Oh9zZ$4W|(o?tvy7f&M70ZA6J78eIsHiJ@#@)SH2D zWIzkVRNg|NL?;xB%K;85p;$9oAafE{g@_%wEX!g|=bT#*<+3Y!P-baqCyui#;>6>R z5xe#+3S`XGuTkLiG!qiKln+Ju-3!0~UGqnbGa)iUqzr|kiG7RSpZi=;8=tx#h0YI9W8c?kc1}X|wy6VMS2~d~{ph2E zky+lb+|K8ZSR4Kfc%Xb*>tFjo8IIi&IS0&PDvWr*5lvTAN)A(5rt65iA9_R_v#BZ? zpm5yWC$6}`5<8n!@%)oFi$@;53pDJAb|Dg_q7(;ao0w~I{cE<^;>1n9fOjy?gs3uu zSTGeLfb(ZC7?asYXLL808?iIa*rrXJjQ=awECAZDwl{tvIK*%#^>%@}LKV8YySoeh zukJ3hZv0pG(vIp@#*n(;Zo!E{5;P%#6LQ|o9?zJ&{oKwnq(>#GgrG*5bb3tDn4>^V#;n+Bno z2~Ag3XYE!`(OYY^wFVc*=I$i0uyJzkl%-LVYEjL38bzstNbFqSzi)45X^G%@ZL3*l zWsTO9>fW(~nWgA1gKbF>%Y*|MmXvgJmWP$LrnSb&zPV14UFBtNVZ)}GVi{2fRZCN= zQc_v3_35a8LmXx?>S^*PPo5ayr{dvzf;MF3y`k=dc9}VL8_#j+KGvb@fX&W34;*6* zUwM9c7r$Kx1Gnt-9J&0&icuSHvMU980)JsG$0%&TSFcK^T2i4X2M?7o$< zc;@y;LGw0#k*z34U3_M(Y{QP=eY=iDoPHfGdGO?=A|$V{MW9lnJ|nw1{y|)I^xRWV z`O9zQ;n?XrkDs~naKV97*G65w9@1_5jp*ewc6~nK@X=E?Ll$4#hx*S6Zomxj`>Xe z9k(rc2m#DYN$2<+R2$expcOqSqch zo4V=lb9rcTs(w^rI<>u+bi9e68aHp^><^)IqRL@Rw> zAD)$;St|~10fLzs+o?0p)hhd?ne))Gy#gbyS6qQMWZB80MqPv6tJhqrg}uwVyoe*d zjDzbOsYJn;28x8~$r{*{BdL^^>)vHE*axQv`0T4vHWpi2(Yn>uLmF|f)ar)jLMx4B z3^q5-)m7EfQbpykb;E)Y1O0eBmU&-=>7p6eXRTYEpsuKFa`Rn1F(9CO*WjF@tm4>^ zq89Lm3PEX0y;fb*+*sWNzXXnhKAvjXdEY{4!)wSYI&a)2ODpcCK`YO^(zx|qI|(hLW$-g+H%`b>DdxI{0N$_%2E43(&;7z3aU$A0_9ufLYm&^ci5 zIcS5^!Jp3I4yVH}0&@aoeo#_Acli6e;hQlBBlb&sz<;subTohM+2}@=T~|g*296d= zP%M>UIr-sV7K?BBqYp5|HFSi@FHX{DvI8YdI$V10Epe5k7jCCNxv*J0genl zmtF7n?`6``yg(_Fh~U4mTLeNeFvt>p6#0Kol7>22;Hq&nb4pzx-B7)ZtdJ#YjsB5C zV^grL`BzDom`(?`=W)69{U`U`%t#u4 zxHUPWwRdhoL-6aE+8#kc2uAuX4;ndm{)gM)w}ED2-)%;KQ3Stp$aGy#AF(--@9KN{ zYF0j4gIC|5|6xWA zdQZI=4TSJ;q(nYN%E^W)GLo%{4fGEUu zq5_BFlhKWwrc_m9EtwbYq~sv;as*P+$R$w1ODqEfG>^l-?eWX$a zdn(Fd1^HL2A+!Gu68%lCu7RUeD)24MVVZ+I93a`Jn9TxTsveg3xB{2V9dFsP;kJ`C z%=%Re(5a_~ci#~mnP8~1gLZKJ-s!;`5ipr*!s0+XQm${icy>eJSY^)XqZ9-rZgzKj zCQQ6~^Zwi|llp$yR9?2j-IZgb)xs-nEj%R|s8p?mSR#SLNkN|KlprFPuP9WQVrc=c z@=DmG(?PVW3mkIfK&S%;&eQ*ytUrfe8LE@_0zdc$CLNCon|~%1tz2h}hVLLW6e&dl zGH7^m8d1xBVR=$BQ615q@`FuWH3E76DO^>iVzczTymd`JST#T z|6YXxyh~meN`{Spu>|`R3$T+wfb?Ir2M`S9{7++{9jq>!hWZZkp2W5=I<-xv@EuH@ zNI?|u9PHpIX=N^P)S{I&aL&s5t5h6X$z)Ev3n$Xb_n8dfF6RM-w6L>rBMC8q z?l5hjn=!z)wuZqZlR4K=2ffI92s?G6=zrw`d^5!6>Y`EBLE^KRs>Z4}Dew)vdWBFZ z#2!QehPZpc3}Wa?$v8i#(ZLv5HS8mrf267kW)~NMmPUbUpnPQ?_N}Xf)SUvr+7?J6 zMv;G01Ke$J#`rN;df1d(SilBp|1FR;p z7_6;_+g4UE#@-2-e~SXVNk$9O_4iOH&_KHXIXV@rjj5WmGYtGZ49))11&E13D$@)` zJKDokqxKtjz;M_wL#=@;BtC5E@&{3==a(7-G|u5*|r(mwrzcgakkBepU+rKdSly3t6I-@y z8MIvjzYu?G{Qi+p zY+3z=g^!h#w5;d#dWFm7@?c684~m*{yejZH`1cjIfolI~a|n9XRaeO^Tec{T8Z~0s zY*xiWjl3RrA?FHh-n`lRs#x{@n#vlZOP4M(mj&9eQ4?m!6j7W`YxnNmB$LUQWo2dZ zb0=ExITkKl2)SHN!F+CAHza4ww5M#hMCfM%Py!NndLI`!)rI%WlUw*|2s_^s{g6%d8J-lk=^0%>G>diObG*Q$f z^3^#P=`5Q9p~ z%K9J|w`rJEpf4@cAo8>2aC$f#E{erskL7jaO|Rfl;cyDdC=Z9ixd+xf*s@EP9^)!1 zlifq%YK}xDu4^bLY#pmpCt&Q@x$h&)u?cgtOg006Ns%~FRh4K$5F`SoX-X8$BIGku z;xolz5Qai1c;Hngl5vvD>7;foKk@l}RH(upqD&=IomZ}0p^=|j0vBC$k%Gia(T*K7 zO~ZP6Jqw^qqlS&z)~;QvK0Y%$0vp3gSYR5)XE_M58!$83Y%~%rf1GjksbH-@wx+s9 zEssP_R#eZh!$-=!_GketX_vz(+JrFNLb4p=sVxdYVqn98Yu)8^QGo*3ZbZm@J}*8vN0PiWoAWd`F@fJEr#^XuQ4U+}@Ug~f-?VfBgWhh*JFdE+3j(6_dnY3@;Uc~@W zSW+f#xaBsvXXkcn?%a6_PTQzcr}ojoU~pP-amm1{s!#YZ3n0g_s|(*JOETMy!?4W% zA7*A|P71@!MPVokQ$d)SIm^t<%sZ2TZJKU_WJ~>WzIv`MSkRQmYDo|7x#ygF<;9*R zsJ1(u8BOjKoHh;8&@$HM3)9XFnMfX5xTt8eTLjee&Fso*lH9X!|AD7_tAC)^8`bCM zX2IEkdo@iIOtwxy<6;bu-UI|-V0`sjEt;E~i`hNFSE~vVaI|Kt*>r_aTKAcNpZtGcWeEg_EeexH0PrAg9q=w{n%rV$zyd^v)befRa#EWvq8MBg|}_n*6en= zGmYlTzFIZiefZ&rzhFGh8?9EWL$>?9p0d#}jEM!MO|K20EhGEdiH-6R*KNIA=b24| z!Qg4*QL(eroqfyV!k|Vrm0+rv;`CxrGJJ2ms{qmDe{bKP!t z_gZf)*Ffwx$?{P&KffiH<2q%tO0dEhMDbo5jZ3RUI*08#$U0O71duLtpS2ai`OYN@Y0+#d#lj(@r&?bBqk04J<@qVoUf>Jdxt2pOA|Xi&%_QKK)Ky+SVQyy z5Xwt78o5HdW71UDG_fVnD&@Rt0T69aG)Bjvka*ooj18efj14a157ctbxlRplG@)u$ zffy=8<1)WQT8^#Vtea#Zz(zDlnzQC)BrZu4R$*FO>t!~~#`Fm^O9E$P!(nENi;I~I z{Pz9(_I+>n?yX<^_{ZLN#dp5*oq}<3mJRozG3m%b-E5RgQw7e>{ykNSLx7tzHX9@W zE6@{v6Qp`|HfB&)T^O>!!37AQazA67i8>?;Dgsfe4mQYl=t&My9x~TKzw2W3<^%Ik|>r{T)kFhDh{=`@{D#% zP0cLKBQ4Z^eR9T1dIQI}s^&)~S)Lh(p0Bi8%~Wit-G0Yi`*-cy{*R-NKDsc1e&s7) z_3SO1H$6$4h%BrW^b9(o|8^W$KcG-oD@g^al6ivw1W7PZ)`fsEDXs$?*CeHy=B12> z%Em$9umpx62@c0N%ubSN2r!jP-U`{1Kn(NaJGsDS9M>5ugOywwUY-s8HE+rKw8%t- zgn4H8o8SEIlP8{d+^v8A``?Wt&hyblz5d`0T5tyg{d$I$rMV_1Vnrx@OoG`cE2$w1 zjGt@`GXYuiw5d>9<73M#Cr)&2OZyHGmOP+FPp}cVT4tVs8KOOb5qPO{uxH({FWSzN#w2%$8o~KfoFej3P8)O5TH5<#+{_>Z< z-=&wkQx6fe4$Bl0j$3c+cF-6}$z;P)fKY(| zOZP^!;#^ZHui3r#-1oW7n;&z>KmYl&b$gH_?)7?38BKb<{z>{_lz&t!9-@j`VH-iRtmo zMw>10B=6uq{H+g)3)(lR&T#X&2WWjvECaG2v%uKkIeYi+x#j4i4_p5E&%ex+4|>F! z#OpKG`JqB5w2-`WV>-|)7!5k}Yy$lgknxVr-z%%D%2a79hjMDY0xvC%*R8Fl1^=L% zqbvp&cZ{cU=voL^4=Bh4M!^Uh>3SJjZZaC$Zi`et6a7769IP^xLl{EiBPr5t*0dkw z7D_AYY}>jmSHhe<%n|8T*eml{S(FzqEG%73z(dh^q|CE&xQCZsM%@Ily2zsWn?QWJ-66G$s|S?8b32Z4Yx`+x!BwE_3Uz_50EE)YMZXiJD3ij=B+K z5u9C%QO~Ow;RFF8y}tA5;R9A0hel8;#~){=5HR zq&D^G%gZZAY1X4QZJzJOic;6;_c0h2n3TB!ADGnI3i@LMT$c&B-NtM?d;ewsYsvwtLqxwtc&B zcP+d7uDdW`Wf9q>8@&fUq8LLnM&B{%40%>Yj?7?);s*qub~^17d;PWHwr$(*l$?8a zXOU|A-%+amE=74+Q|PjoQR! z_*%%!_QXkYl`bEx#$ubAqKI;HXy}xY(r4MoEz9|93A#ng1P?{YRB4MVBU@b?+wScx zHi;%_lPyx$M~Q;YlAKLXx1g^rF5O|Py=8my6CY=H-n(G!dVo923rmKXBo=;<8R=P~ z)A|B4Bw$=pQne2sc{OJ4f92W*P@Czx2k`$FC&X}f>QsO_b$55Wr|#{#ySr;;h59OW zcii0}L4qbJ2}B_B-0w2%owHPquK#f7eQf5LH|*EQNhJDd&tQmQ+}U$&)@pf0+qZ8& z{qe^i+wOWb78@H2eT$AG_w6kez!Yq=b_{H5GY#i(nV!aW*l(HajH#i_)6SKLYg#4F z14FIo(m4#lptJuj7s|nybr=^d?A#F9Y2P`mi4ns^F6_*nNbCz`qY%-(-H=m~0y}#M zXK64Ji`%haq$kSDGSFf$LM9PHCgY*5-T;M+)7eIsv-lX%hfRQ>bKydV)xo}i7>>QO z%ACdG|KBql)VW-BG&eTh@8%-gw{6=t>s_zL)~s2BoxARH)K}yf+MI-W#Rd6CH4TlA zHrCazY}2V%->NBI->hkVp}gI<+`y4Lv>Kg5tyZI|T8-?2TBuYiIEH$zobhcj1I?C(>v@7E(@$sA;r7|_7}&Kh+KX>7Ltpn+DaBb`o58jZ%$ zX0#c29Bv)E3ZLflxGCq)pSO2wfjfKj(MNyUTRXa5TEXJ`?v@P+H=K>w8ojwCv!Fw& za6Qd48H4Ke6vB~7e9T6rPA3cQJ$RN^)ifE~+_AD#&H4PmSC9ke7yJRF$53ROEzzGZw z6-z6RDEK0#qN;qTT+C!Txdb~KbhcX|o>pUOW@E6ERO-SLP`%A=)7fl{R@r1U4C-mU z!Oo0Ijzg$Ee*C!O-@YC8AMqMDFd}qhRZeDVUD-uvCmzG|4;sl`GS|y^v&wCeI=?bt z_DIfGSvuJyj@0kL()jpymrZp2uF-GeFoi(iBdp0j@50`twE2WhFU_uw5*T^o-+69M zh^oP;KXCB7&!jRB*O}uZ0?ZwJYk;4}P#-T|u&TzER?%v(ese9|Md}|EQT^@SSLV+j zS=i8Is1NcH)s?_6rlLsO5G5_UajMjNC&)5LD(v_;CP<%^X$*7+=Z4;8x zX-kuaEb%GEgc>zz&R=h+*?A<_`cATjMDDX6Ui?OU%#w$`?J<1HBfL$qnKNS6>>Uoc za#rlgC?3D#Sk9mYuk;rMtmE!Dlr!c2L)lB^K?@|f3m*Ojt;&n0<5^|d#_B99SWY5^ zcdvl~&Pj26pRqFs?T-7rejmD2XC*1k29r(XZREIk2W~Aq^=ypn*{$9TgAO7_r3iH$ zZptcetgSb^;VO4|ZqbwhPc>;QWnyP;?=}-MEEY$L-rP}gt3@2|Xg4oy)0(*{s%$)V z-IlYiqNJo@aq*7Md4H?<=T278bmYv^muD0H;Ei9p& zlni=yf9&P6Z+&n)v8u+ds#a5FdbX~ztb!(?i&xb1Gj_&in0rim=2LWW4V}Pq4H?73 ze@7o?s%B!uT2KHwPib`ouRvyh|zaBAV?YGbQ z4gc^)Mn(e%KPUTFtD1vV1YiJQ!!JP*I#1Gn!Rv1T z5cXeu^r&0p8!w=nIWM1of9B)Ij6R?;h3 zx#s0N_oVAmirb0J^mpvbRyNbi2d_E$R-btX^~vexm+Bixdp(s#e|Ns-qvOgBn!NqE z34k+LA*0^t6S45CAJOF(seqQsxVF3>9(^Qi{9FCzZyU43H`pz*`|pyHV`Wp7vJyWt zAC*eT1OiO3*&RZLT5ESdFpn$n#BLFq*4k}Qu>tzQ&1jDGaH5X(b|`r~_@BL!Wg0$j z@UB5aLuAK~pGtBN9DD}7PG59Xe8UqDpd_-SE?wzw4C;hS^4F)GZ&R7t|gFnVk!l& zLolBmYF84{DTICd@Vj5;?*E{qjmB;`rhWT^(-G{?*CwUYgQ?k$$f6QU?6sS1eV=}Y zz(UmePsYWp{@`K!O8D+QmrMpA#Jza@jW=%Bxjes^_x5MxlT$${MP=tun5vo{`21+b z%i9i?Qrwx!Z__eqKyCqjr@KY%$!YXByRvg{BvU{^k$KPb&HKKR2QQu$pW+DozW}g< z@hCeGcNLb>T=s1Y5#iUNcyz|yzqWZW?qJB;V=Lav)l%=xDKyftxT5chO6U-KxO}!MuBq#({$?_b%*>@p<(2ehNd-N}{)~S@GR@Oysf`WP zk+cGmzx^XI8F?g6&!LE$IV44wUt|VI!k>4Ux^?CeNY)494n)qjCjoHLjYviw25lSE zWyRNX@=4+!h#3wZq(A=fia>0|0BdcN-P_YMOe({;W(}TfY{YuI9eSA*k4Pn$)1%+&FJvcAwq_MX8kw8CJ zX^S3LO&z!(;Gs&_f_PU2#%Q&;pshirMuTf$Fjp*wZ*3!X>J7La;E(6MToLE#hEI4r zpxuT`-5%5UUw^19$D_}xkR~Qad*WfjGH<+r`_)sLohyXtvRoCHh4|h1s z7R+~b!B{qsExH!GE*Im=;1GuJAK>BN#o_cc=qyOQ5Z`QRzL`-tR z1ap8YyB*IOT5(*{3XO{xA~w5BYBJh}j(`pT35AGmGvd9KC7}Jikm7E}L`w%$VBjDw zZfct0&G0eRRgU|r>!4)!1RGz7vZx5A0lzZ7)O*krk<_OL?&7m|iK(oj2xS#bSJu$f zQ|C!|=pZq78d`}-Bv)2bdVUdIIev+paS!onG+BK)CMmlKCw zc4FBeWF=;k1o!aSXT+pslY4F<1+u|#KYNDwzitcs0yJPbVCHh*Y%xH9d)Tstp{^hK zk8$uj(b@<<4|hy7v_fqs{0sgB0l2Cmj@SvScwC4W28o_-h&pzR{yG6bA;NsTu}Pyt ztlo%&5(%by`9S`c2*9;ua&mXWV+;ecUXM?B97q^|S)(QC6|=Z?yFY`e|mfO5Vx+0 rBJ%Ty2iCSNgd0iZT2x9B{L20p98TfA!HL{&00000NkvXXu0mjf{2wFn diff --git a/htdocs/theme/md/main_menu_fa_icons.inc.php b/htdocs/theme/md/main_menu_fa_icons.inc.php index 23121d94991..d5392c5b086 100644 --- a/htdocs/theme/md/main_menu_fa_icons.inc.php +++ b/htdocs/theme/md/main_menu_fa_icons.inc.php @@ -22,13 +22,97 @@ font-size: 1.5em; } -div.mainmenu.ticket::before { - content: "\f3ff"; -} -div.mainmenu.ticket { +div.mainmenu { background-image: none !important; } +div.mainmenu.menu::before { + content: "\f0c9"; +} + + +div.mainmenu.home::before{ + content: "\f015"; +} + +div.mainmenu.billing::before { + content: "\f51e"; +} + +div.mainmenu.accountancy::before { + /* content: "\f53d"; */ + content: "\f688"; + font-size: 1.2em; +} + +div.mainmenu.agenda::before { + content: "\f073"; +} + +div.mainmenu.bank::before { + content: "\f19c"; +} + +div.mainmenu.cashdesk::before { + content: "\f788"; +} + + +div.mainmenu.takepos::before { + content: "\f788"; +} + +div.mainmenu.companies::before { + content: "\f1ad"; +} + +div.mainmenu.commercial::before { + content: "\f0f2"; +} + +div.mainmenu.ecm::before { + content: "\f07c"; +} + +div.mainmenu.externalsite::before { + content: "\f360"; +} + +div.mainmenu.ftp::before { + content: "\f362"; +} + +div.mainmenu.hrm::before { + content: "\f508"; +} + +div.mainmenu.members::before { + content: "\f007"; +} + +div.mainmenu.products::before { + content: "\f1b2"; +} + +div.mainmenu.mrp::before { + content: "\f1b3"; +} + +div.mainmenu.project::before { + content: "\f542"; +} + +div.mainmenu.ticket::before { + content: "\f3ff"; +} + +div.mainmenu.tools::before { + content: "\f0ad"; +} + +div.mainmenu.website::before { + content: "\f57d"; +} div.mainmenu.generic1::before { From e37e0399e5054d797d6d0fd02d444b10b12b4f25 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Mar 2021 12:10:23 +0100 Subject: [PATCH 144/180] Fix bad message --- htdocs/opensurvey/results.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/opensurvey/results.php b/htdocs/opensurvey/results.php index ea07900ba67..a6b192a4dba 100644 --- a/htdocs/opensurvey/results.php +++ b/htdocs/opensurvey/results.php @@ -596,7 +596,10 @@ if (GETPOST('ajoutsujet')) } if ($user->rights->opensurvey->write) { - print ''.$langs->trans("PollAdminDesc", img_picto('', 'delete'), $langs->trans("Add")).'
    '; + print ''; + $s = $langs->trans("PollAdminDesc", '{s1}', $langs->trans("Add")); + print str_replace('{s1}', img_picto('', 'delete'), $s); + print '
    '; } $nbcolonnes = substr_count($object->sujet, ',') + 1; From af340ec1335d5f419e989a482f8aa1488a4292c8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Mar 2021 12:18:38 +0100 Subject: [PATCH 145/180] Fix #yogosha5657 --- htdocs/opensurvey/exportcsv.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/opensurvey/exportcsv.php b/htdocs/opensurvey/exportcsv.php index 6f9a699273b..fe814a44037 100644 --- a/htdocs/opensurvey/exportcsv.php +++ b/htdocs/opensurvey/exportcsv.php @@ -39,6 +39,9 @@ $object = new Opensurveysondage($db); $result = $object->fetch(0, $numsondage); if ($result <= 0) dol_print_error('', 'Failed to get survey id '.$numsondage); +// Security check +if (!$user->rights->opensurvey->read) accessforbidden(); + /* * Actions From 03941a59af74944ef99ca0cf041be8055a9719a8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Mar 2021 12:21:35 +0100 Subject: [PATCH 146/180] Clean code --- htdocs/opensurvey/card.php | 4 +++- htdocs/opensurvey/exportcsv.php | 4 +++- htdocs/opensurvey/fonctions.php | 1 - htdocs/opensurvey/index.php | 4 +++- htdocs/opensurvey/results.php | 6 +++--- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/htdocs/opensurvey/card.php b/htdocs/opensurvey/card.php index ef583d08ff5..1a61773993f 100644 --- a/htdocs/opensurvey/card.php +++ b/htdocs/opensurvey/card.php @@ -32,7 +32,9 @@ require_once DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php"; // Security check -if (!$user->rights->opensurvey->read) accessforbidden(); +if (empty($user->rights->opensurvey->read)) { + accessforbidden(); +} // Initialisation des variables $action = GETPOST('action', 'aZ09'); diff --git a/htdocs/opensurvey/exportcsv.php b/htdocs/opensurvey/exportcsv.php index fe814a44037..5abfd76f88e 100644 --- a/htdocs/opensurvey/exportcsv.php +++ b/htdocs/opensurvey/exportcsv.php @@ -40,7 +40,9 @@ $result = $object->fetch(0, $numsondage); if ($result <= 0) dol_print_error('', 'Failed to get survey id '.$numsondage); // Security check -if (!$user->rights->opensurvey->read) accessforbidden(); +if (empty($user->rights->opensurvey->read)) { + accessforbidden(); +} /* diff --git a/htdocs/opensurvey/fonctions.php b/htdocs/opensurvey/fonctions.php index 0ea701ebf0b..5832e57c46d 100644 --- a/htdocs/opensurvey/fonctions.php +++ b/htdocs/opensurvey/fonctions.php @@ -31,7 +31,6 @@ */ function opensurvey_prepare_head(Opensurveysondage $object) { - global $langs, $conf; $h = 0; diff --git a/htdocs/opensurvey/index.php b/htdocs/opensurvey/index.php index 50198e5202f..c8cc35a0c61 100644 --- a/htdocs/opensurvey/index.php +++ b/htdocs/opensurvey/index.php @@ -31,7 +31,9 @@ require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"; $langs->load("opensurvey"); // Security check -if (!$user->rights->opensurvey->read) accessforbidden(); +if (empty($user->rights->opensurvey->read)) { + accessforbidden(); +} $hookmanager = new HookManager($db); diff --git a/htdocs/opensurvey/results.php b/htdocs/opensurvey/results.php index a6b192a4dba..fe03c433738 100644 --- a/htdocs/opensurvey/results.php +++ b/htdocs/opensurvey/results.php @@ -29,10 +29,10 @@ require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"; require_once DOL_DOCUMENT_ROOT."/opensurvey/class/opensurveysondage.class.php"; require_once DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php"; - // Security check -if (!$user->rights->opensurvey->read) accessforbidden(); - +if (empty($user->rights->opensurvey->read)) { + accessforbidden(); +} // Init vars $action = GETPOST('action', 'aZ09'); From 8d19c5773139653c09053378a8a128774ef7a8b4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Mar 2021 12:54:49 +0100 Subject: [PATCH 147/180] Add fields to know authentication method used --- htdocs/install/mysql/migration/13.0.0-14.0.0.sql | 2 ++ htdocs/install/mysql/tables/llx_events.sql | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/13.0.0-14.0.0.sql b/htdocs/install/mysql/migration/13.0.0-14.0.0.sql index 0a93f7586e3..2e60f214c77 100644 --- a/htdocs/install/mysql/migration/13.0.0-14.0.0.sql +++ b/htdocs/install/mysql/migration/13.0.0-14.0.0.sql @@ -52,6 +52,8 @@ ALTER TABLE llx_oauth_token ADD COLUMN restricted_ips varchar(200); ALTER TABLE llx_oauth_token ADD COLUMN datec datetime DEFAULT NULL; ALTER TABLE llx_oauth_token ADD COLUMN tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; +ALTER TABLE llx_events ADD COLUMN authentication_method varchar(64) NULL; +ALTER TABLE llx_events ADD COLUMN fk_oauth_token integer NULL; ALTER TABLE llx_mailing_cibles MODIFY COLUMN tag varchar(64) NULL; ALTER TABLE llx_mailing_cibles ADD INDEX idx_mailing_cibles_tag (tag); diff --git a/htdocs/install/mysql/tables/llx_events.sql b/htdocs/install/mysql/tables/llx_events.sql index 06fc43f98b3..16d65c442ab 100644 --- a/htdocs/install/mysql/tables/llx_events.sql +++ b/htdocs/install/mysql/tables/llx_events.sql @@ -33,6 +33,8 @@ create table llx_events description varchar(250) NOT NULL, -- full description of action ip varchar(250) NOT NULL, -- ip (must contains ip v4 and v6 or dns names) user_agent varchar(255) NULL, -- user agent - fk_object integer -- id of related object + fk_object integer NULL -- id of related object + authentication_method varchar(64) NULL, -- type of authentication mode used if internal login event + fk_oauth_token integer NULL -- id in oauth_token if internal login event done using an oauth_token ) ENGINE=innodb; From 1b4b48a634e4886e9701ee540b39afa43f2c5629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 13:18:50 +0100 Subject: [PATCH 148/180] fix php8 warning when upgrade reloads modules --- htdocs/core/modules/modBlockedLog.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/modBlockedLog.class.php b/htdocs/core/modules/modBlockedLog.class.php index edd6d8c12a9..3f9a6473a82 100644 --- a/htdocs/core/modules/modBlockedLog.class.php +++ b/htdocs/core/modules/modBlockedLog.class.php @@ -92,7 +92,7 @@ class modBlockedLog extends DolibarrModules $this->always_enabled = (!empty($conf->blockedlog->enabled) && !empty($conf->global->BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY) - && in_array($mysoc->country_code, explode(',', $conf->global->BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY)) + && in_array((empty($mysoc->country_code) ? '' : $mysoc->country_code), explode(',', $conf->global->BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY)) && $this->alreadyUsed()); // Constants From 46972ec669533692f1b6bbc82713d7649534ae50 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Mar 2021 14:34:44 +0100 Subject: [PATCH 149/180] FIx #5660 --- htdocs/accountancy/bookkeeping/balance.php | 12 ++++++ htdocs/accountancy/bookkeeping/card.php | 18 +++++---- htdocs/accountancy/bookkeeping/list.php | 10 +++++ .../accountancy/bookkeeping/listbyaccount.php | 10 +++++ .../bookkeeping/listbysubaccount.php | 11 +++++ .../thirdparty_lettering_customer.php | 10 +++++ .../thirdparty_lettering_supplier.php | 11 +++++ htdocs/accountancy/closure/index.php | 26 ++++++------ htdocs/accountancy/customer/card.php | 7 ++++ htdocs/accountancy/customer/lines.php | 8 +++- htdocs/accountancy/customer/list.php | 7 +++- htdocs/accountancy/expensereport/card.php | 6 +++ htdocs/accountancy/expensereport/index.php | 23 +++++------ htdocs/accountancy/expensereport/lines.php | 8 +++- htdocs/accountancy/expensereport/list.php | 21 +++++----- htdocs/accountancy/index.php | 11 ++++- htdocs/accountancy/journal/bankjournal.php | 8 +++- .../journal/expensereportsjournal.php | 8 ++++ .../accountancy/journal/purchasesjournal.php | 12 +++++- htdocs/accountancy/journal/sellsjournal.php | 11 ++++- htdocs/accountancy/supplier/card.php | 6 +++ htdocs/accountancy/supplier/index.php | 13 +++++- htdocs/accountancy/supplier/lines.php | 9 +++-- htdocs/accountancy/supplier/list.php | 19 +++++---- htdocs/compta/resultat/clientfourn.php | 23 +++++------ htdocs/compta/resultat/index.php | 17 ++++---- htdocs/compta/resultat/result.php | 20 ++++++---- htdocs/compta/stats/byratecountry.php | 10 ++--- htdocs/compta/stats/cabyprodserv.php | 14 +++---- htdocs/compta/stats/cabyuser.php | 30 +++++++------- htdocs/compta/stats/casoc.php | 26 ++++++------ htdocs/compta/stats/index.php | 4 +- htdocs/compta/stats/supplier_turnover.php | 6 +-- .../stats/supplier_turnover_by_prodserv.php | 40 +++++++++---------- .../stats/supplier_turnover_by_thirdparty.php | 36 ++++++++--------- htdocs/langs/en_US/users.lang | 2 +- 36 files changed, 334 insertions(+), 179 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/balance.php b/htdocs/accountancy/bookkeeping/balance.php index 35473c6329e..e03790a8995 100644 --- a/htdocs/accountancy/bookkeeping/balance.php +++ b/htdocs/accountancy/bookkeeping/balance.php @@ -135,6 +135,18 @@ if (!empty($search_accountancy_code_end)) { $param .= '&search_accountancy_code_end='.$search_accountancy_code_end; } +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} +if ($user->socid > 0) { + accessforbidden(); +} +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} + + + /* * Action */ diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index 3ab9ed0a702..60645353976 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -44,13 +44,6 @@ $id = GETPOST('id', 'int'); // id of record $mode = GETPOST('mode', 'aZ09'); // '' or '_tmp' $piece_num = GETPOST("piece_num", 'int'); // id of transaction (several lines share the same transaction id) -// Security check -if ($user->socid > 0) { - accessforbidden(); -} - -$mesg = ''; - $accountingaccount = new AccountingAccount($db); $accountingjournal = new AccountingJournal($db); @@ -83,6 +76,17 @@ if (!empty($update)) { $object = new BookKeeping($db); +// Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} +if ($user->socid > 0) { + accessforbidden(); +} +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} + /* * Actions diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 39906b09bb3..40a8284adc4 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -171,6 +171,16 @@ if (empty($listofformat[$formatexportset])) { $error = 0; +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} +if ($user->socid > 0) { + accessforbidden(); +} +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} + /* * Actions diff --git a/htdocs/accountancy/bookkeeping/listbyaccount.php b/htdocs/accountancy/bookkeeping/listbyaccount.php index 99b644d1e0a..24bcc4706c1 100644 --- a/htdocs/accountancy/bookkeeping/listbyaccount.php +++ b/htdocs/accountancy/bookkeeping/listbyaccount.php @@ -163,6 +163,16 @@ if ($search_date_end && empty($search_date_endyear)) { $search_date_endday = $tmparray['mday']; } +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} +if ($user->socid > 0) { + accessforbidden(); +} +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} + /* * Action diff --git a/htdocs/accountancy/bookkeeping/listbysubaccount.php b/htdocs/accountancy/bookkeeping/listbysubaccount.php index 72b6574bea5..129e695de3c 100644 --- a/htdocs/accountancy/bookkeeping/listbysubaccount.php +++ b/htdocs/accountancy/bookkeeping/listbysubaccount.php @@ -163,10 +163,21 @@ if ($search_date_end && empty($search_date_endyear)) { $search_date_endday = $tmparray['mday']; } +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} +if ($user->socid > 0) { + accessforbidden(); +} +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} + /* * Action */ + if (GETPOST('cancel', 'alpha')) { $action = 'list'; $massaction = ''; } diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php b/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php index fa5302919d5..0064e8c4715 100644 --- a/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php @@ -94,6 +94,16 @@ if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} +if ($user->socid > 0) { + accessforbidden(); +} +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} + /* * Action diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php b/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php index e31479f10cd..a73f711e15a 100644 --- a/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php @@ -94,10 +94,21 @@ if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} +if ($user->socid > 0) { + accessforbidden(); +} +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} + /* * Action */ + if ($action == 'lettering') { $result = $lettering->updateLettering($toselect); diff --git a/htdocs/accountancy/closure/index.php b/htdocs/accountancy/closure/index.php index 94e59de1812..3ba552cdfa4 100644 --- a/htdocs/accountancy/closure/index.php +++ b/htdocs/accountancy/closure/index.php @@ -35,17 +35,6 @@ $socid = GETPOST('socid', 'int'); $action = GETPOST('action', 'aZ09'); -// Security check -if (empty($conf->accounting->enabled)) { - accessforbidden(); -} -if ($user->socid > 0) { - accessforbidden(); -} -if (!$user->rights->accounting->fiscalyear->write) { - accessforbidden(); -} - $object = new BookKeeping($db); $month_start = ($conf->global->SOCIETE_FISCAL_MONTH_START ? ($conf->global->SOCIETE_FISCAL_MONTH_START) : 1); @@ -67,10 +56,23 @@ $search_date_start = dol_mktime(0, 0, 0, $month_start, 1, $year_start); $search_date_end = dol_get_last_day($year_end, $month_end); $year_current = $year_start; +// Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} +if ($user->socid > 0) { + accessforbidden(); +} +if (!$user->rights->accounting->fiscalyear->write) { + accessforbidden(); +} + + /* * Actions */ -if ($action == 'validate_movements_confirm' && $user->rights->accounting->fiscalyear->write) { + +if ($action == 'validate_movements_confirm' && !empty($user->rights->accounting->fiscalyear->write)) { $result = $object->fetchAll(); if ($result < 0) { diff --git a/htdocs/accountancy/customer/card.php b/htdocs/accountancy/customer/card.php index 1209576ddba..98e9151877e 100644 --- a/htdocs/accountancy/customer/card.php +++ b/htdocs/accountancy/customer/card.php @@ -38,9 +38,16 @@ $codeventil = GETPOST('codeventil', 'int'); $id = GETPOST('id', 'int'); // Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} if ($user->socid > 0) { accessforbidden(); } +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} + /* diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php index 983e7957583..3b14450fab1 100644 --- a/htdocs/accountancy/customer/lines.php +++ b/htdocs/accountancy/customer/lines.php @@ -80,13 +80,17 @@ if (!$sortorder) { } // Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} if ($user->socid > 0) { accessforbidden(); } -if (!$user->rights->accounting->bind->write) { +if (empty($user->rights->accounting->mouvements->lire)) { accessforbidden(); } + $formaccounting = new FormAccounting($db); @@ -112,7 +116,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' $search_tvaintra = ''; } -if (is_array($changeaccount) && count($changeaccount) > 0) { +if (is_array($changeaccount) && count($changeaccount) > 0 && $user->rights->accounting->bind->write) { $error = 0; if (!(GETPOST('account_parent', 'int') >= 0)) { diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index 8d5c2788425..7014474ce4f 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -88,10 +88,13 @@ if (!$sortorder) { } // Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} if ($user->socid > 0) { accessforbidden(); } -if (!$user->rights->accounting->bind->write) { +if (empty($user->rights->accounting->mouvements->lire)) { accessforbidden(); } @@ -148,7 +151,7 @@ if (empty($reshook)) { } -if ($massaction == 'ventil') { +if ($massaction == 'ventil' && $user->rights->accounting->bind->write) { $msg = ''; //print '
    ' . $langs->trans("Processing") . '...
    '; diff --git a/htdocs/accountancy/expensereport/card.php b/htdocs/accountancy/expensereport/card.php index f997f666e6e..200a493cfed 100644 --- a/htdocs/accountancy/expensereport/card.php +++ b/htdocs/accountancy/expensereport/card.php @@ -42,9 +42,15 @@ $codeventil = GETPOST('codeventil', 'int'); $id = GETPOST('id', 'int'); // Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} if ($user->socid > 0) { accessforbidden(); } +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} /* diff --git a/htdocs/accountancy/expensereport/index.php b/htdocs/accountancy/expensereport/index.php index ffa0bfcc07d..38f7f596932 100644 --- a/htdocs/accountancy/expensereport/index.php +++ b/htdocs/accountancy/expensereport/index.php @@ -32,17 +32,6 @@ require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; // Load translation files required by the page $langs->loadLangs(array("compta", "bills", "other", "main", "accountancy")); -// Security check -if (empty($conf->accounting->enabled)) { - accessforbidden(); -} -if ($user->socid > 0) { - accessforbidden(); -} -if (!$user->rights->accounting->bind->write) { - accessforbidden(); -} - $month_start = ($conf->global->SOCIETE_FISCAL_MONTH_START ? ($conf->global->SOCIETE_FISCAL_MONTH_START) : 1); if (GETPOST("year", 'int')) { $year_start = GETPOST("year", 'int'); @@ -65,13 +54,23 @@ $year_current = $year_start; // Validate History $action = GETPOST('action', 'aZ09'); +// Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} +if ($user->socid > 0) { + accessforbidden(); +} +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} /* * Actions */ -if ($action == 'clean' || $action == 'validatehistory') { +if (($action == 'clean' || $action == 'validatehistory') && $user->rights->accounting->bind->write) { // Clean database $db->begin(); $sql1 = "UPDATE ".MAIN_DB_PREFIX."expensereport_det as erd"; diff --git a/htdocs/accountancy/expensereport/lines.php b/htdocs/accountancy/expensereport/lines.php index 3c4760b3730..d29e39d7f37 100644 --- a/htdocs/accountancy/expensereport/lines.php +++ b/htdocs/accountancy/expensereport/lines.php @@ -74,13 +74,17 @@ if (!$sortorder) { } // Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} if ($user->socid > 0) { accessforbidden(); } -if (!$user->rights->accounting->bind->write) { +if (empty($user->rights->accounting->mouvements->lire)) { accessforbidden(); } + $formaccounting = new FormAccounting($db); @@ -102,7 +106,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' $search_year = ''; } -if (is_array($changeaccount) && count($changeaccount) > 0) { +if (is_array($changeaccount) && count($changeaccount) > 0 && $user->rights->accounting->bind->write) { $error = 0; if (!(GETPOST('account_parent', 'int') >= 0)) { diff --git a/htdocs/accountancy/expensereport/list.php b/htdocs/accountancy/expensereport/list.php index 05476756531..84cd64bb44f 100644 --- a/htdocs/accountancy/expensereport/list.php +++ b/htdocs/accountancy/expensereport/list.php @@ -83,19 +83,22 @@ if (!$sortorder) { } } -// Security check -if ($user->socid > 0) { - accessforbidden(); -} -if (!$user->rights->accounting->bind->write) { - accessforbidden(); -} - $formaccounting = new FormAccounting($db); $accounting = new AccountingAccount($db); $chartaccountcode = dol_getIdFromCode($db, $conf->global->CHARTOFACCOUNTS, 'accounting_system', 'rowid', 'pcg_version'); +// Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} +if ($user->socid > 0) { + accessforbidden(); +} +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} + /* * Action @@ -130,7 +133,7 @@ $permissiontodelete = $user->rights->expensereport->delete; $uploaddir = $conf->expensereport->dir_output; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; -if ($massaction == 'ventil') { +if ($massaction == 'ventil' && $user->rights->accounting->bind->write) { $msg = ''; //print '
    ' . $langs->trans("Processing") . '...
    '; if (!empty($mesCasesCochees)) { diff --git a/htdocs/accountancy/index.php b/htdocs/accountancy/index.php index 242fc71d80c..94dc6aa05c9 100644 --- a/htdocs/accountancy/index.php +++ b/htdocs/accountancy/index.php @@ -31,13 +31,20 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array("compta", "bills", "other", "accountancy", "loans", "banks", "admin", "dict")); +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array of hooks +$hookmanager->initHooks(array('accountancyindex')); + // Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} if ($user->socid > 0) { accessforbidden(); } +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} -// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array of hooks -$hookmanager->initHooks(array('accountancyindex')); /* diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index b79b8433c03..da36a054b08 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -83,7 +83,13 @@ $now = dol_now(); $action = GETPOST('action', 'aZ09'); // Security check -if ($user->socid > 0 && empty($id_journal)) { +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} +if ($user->socid > 0) { + accessforbidden(); +} +if (empty($user->rights->accounting->mouvements->lire)) { accessforbidden(); } diff --git a/htdocs/accountancy/journal/expensereportsjournal.php b/htdocs/accountancy/journal/expensereportsjournal.php index 9010261dbe0..2f7569ab152 100644 --- a/htdocs/accountancy/journal/expensereportsjournal.php +++ b/htdocs/accountancy/journal/expensereportsjournal.php @@ -58,13 +58,21 @@ if ($in_bookkeeping == '') { $now = dol_now(); // Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} if ($user->socid > 0) { accessforbidden(); } +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} + /* * Actions */ + $accountingaccount = new AccountingAccount($db); // Get informations of journal diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index 46363fb3a09..f6fa5c4b76a 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -57,17 +57,25 @@ if ($in_bookkeeping == '') { $now = dol_now(); +$hookmanager->initHooks(array('purchasesjournal')); +$parameters = array(); + // Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} if ($user->socid > 0) { accessforbidden(); } +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} -$hookmanager->initHooks(array('purchasesjournal')); -$parameters = array(); /* * Actions */ + $reshook = $hookmanager->executeHooks('doActions', $parameters, $user, $action); // Note that $action and $object may have been modified by some hooks $accountingaccount = new AccountingAccount($db); diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index 16209e1a241..9a00adf3473 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -59,13 +59,20 @@ if ($in_bookkeeping == '') { $now = dol_now(); +$hookmanager->initHooks(array('sellsjournal')); +$parameters = array(); + // Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} if ($user->socid > 0) { accessforbidden(); } +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} -$hookmanager->initHooks(array('sellsjournal')); -$parameters = array(); /* * Actions diff --git a/htdocs/accountancy/supplier/card.php b/htdocs/accountancy/supplier/card.php index 0d86b928a26..eee2059c660 100644 --- a/htdocs/accountancy/supplier/card.php +++ b/htdocs/accountancy/supplier/card.php @@ -42,9 +42,15 @@ $codeventil = GETPOST('codeventil', 'int'); $id = GETPOST('id', 'int'); // Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} if ($user->socid > 0) { accessforbidden(); } +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} /* diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php index 937173fc1e6..7ef09acf91a 100644 --- a/htdocs/accountancy/supplier/index.php +++ b/htdocs/accountancy/supplier/index.php @@ -69,12 +69,23 @@ $action = GETPOST('action', 'aZ09'); $chartaccountcode = dol_getIdFromCode($db, $conf->global->CHARTOFACCOUNTS, 'accounting_system', 'rowid', 'pcg_version'); +// Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} +if ($user->socid > 0) { + accessforbidden(); +} +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} + /* * Actions */ -if ($action == 'clean' || $action == 'validatehistory') { +if (($action == 'clean' || $action == 'validatehistory') && $user->rights->accounting->bind->write) { // Clean database $db->begin(); $sql1 = "UPDATE ".MAIN_DB_PREFIX."facture_fourn_det as fd"; diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index 6bdc714ec4c..f661ba42ce9 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -80,16 +80,19 @@ if (!$sortorder) { } } +$formaccounting = new FormAccounting($db); + // Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} if ($user->socid > 0) { accessforbidden(); } -if (!$user->rights->accounting->bind->write) { +if (empty($user->rights->accounting->mouvements->lire)) { accessforbidden(); } -$formaccounting = new FormAccounting($db); - /* * Actions diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index d49effd791d..ea61a686883 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -88,14 +88,6 @@ if (!$sortorder) { } } -// Security check -if ($user->socid > 0) { - accessforbidden(); -} -if (!$user->rights->accounting->bind->write) { - accessforbidden(); -} - // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('accountancysupplierlist')); @@ -107,6 +99,17 @@ $aarowid_p = $accounting->fetch('', $conf->global->ACCOUNTING_PRODUCT_BUY_ACCOUN $chartaccountcode = dol_getIdFromCode($db, $conf->global->CHARTOFACCOUNTS, 'accounting_system', 'rowid', 'pcg_version'); +// Security check +if (empty($conf->accounting->enabled)) { + accessforbidden(); +} +if ($user->socid > 0) { + accessforbidden(); +} +if (empty($user->rights->accounting->mouvements->lire)) { + accessforbidden(); +} + /* * Actions diff --git a/htdocs/compta/resultat/clientfourn.php b/htdocs/compta/resultat/clientfourn.php index 9c700f509f9..a22c0c51b73 100644 --- a/htdocs/compta/resultat/clientfourn.php +++ b/htdocs/compta/resultat/clientfourn.php @@ -49,18 +49,6 @@ $date_endday = GETPOST('date_endday', 'int'); $date_endyear = GETPOST('date_endyear', 'int'); $showaccountdetail = GETPOST('showaccountdetail', 'aZ09') ?GETPOST('showaccountdetail', 'aZ09') : 'no'; -// Security check -$socid = GETPOST('socid', 'int'); -if ($user->socid > 0) { - $socid = $user->socid; -} -if (!empty($conf->comptabilite->enabled)) { - $result = restrictedArea($user, 'compta', '', '', 'resultat'); -} -if (!empty($conf->accounting->enabled)) { - $result = restrictedArea($user, 'accounting', '', '', 'comptarapport'); -} - $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit; $sortfield = GETPOST("sortfield", 'alpha'); $sortorder = GETPOST("sortorder", 'alpha'); @@ -151,6 +139,17 @@ if (GETPOST("modecompta", 'alpha')) { $AccCat = new AccountancyCategory($db); +// Security check +$socid = GETPOST('socid', 'int'); +if ($user->socid > 0) { + $socid = $user->socid; +} +if (!empty($conf->comptabilite->enabled)) { + $result = restrictedArea($user, 'compta', '', '', 'resultat'); +} +if (!empty($conf->accounting->enabled)) { + $result = restrictedArea($user, 'accounting', '', '', 'comptarapport'); +} /* diff --git a/htdocs/compta/resultat/index.php b/htdocs/compta/resultat/index.php index 228269d135e..e5b86ba762e 100644 --- a/htdocs/compta/resultat/index.php +++ b/htdocs/compta/resultat/index.php @@ -108,6 +108,14 @@ $year_end = $tmpe['year']; $nbofyear = ($year_end - $year_start) + 1; //var_dump("year_start=".$year_start." year_end=".$year_end." nbofyear=".$nbofyear." date_start=".dol_print_date($date_start, 'dayhour')." date_end=".dol_print_date($date_end, 'dayhour')); +// Define modecompta ('CREANCES-DETTES' or 'RECETTES-DEPENSES' or 'BOOKKEEPING') +$modecompta = $conf->global->ACCOUNTING_MODE; +if (!empty($conf->accounting->enabled)) { + $modecompta = 'BOOKKEEPING'; +} +if (GETPOST("modecompta", 'alpha')) { + $modecompta = GETPOST("modecompta", 'alpha'); +} // Security check $socid = GETPOST('socid', 'int'); @@ -121,15 +129,6 @@ if (!empty($conf->accounting->enabled)) { $result = restrictedArea($user, 'accounting', '', '', 'comptarapport'); } -// Define modecompta ('CREANCES-DETTES' or 'RECETTES-DEPENSES' or 'BOOKKEEPING') -$modecompta = $conf->global->ACCOUNTING_MODE; -if (!empty($conf->accounting->enabled)) { - $modecompta = 'BOOKKEEPING'; -} -if (GETPOST("modecompta", 'alpha')) { - $modecompta = GETPOST("modecompta", 'alpha'); -} - /* * View diff --git a/htdocs/compta/resultat/result.php b/htdocs/compta/resultat/result.php index df3a82a4b7f..91932100565 100644 --- a/htdocs/compta/resultat/result.php +++ b/htdocs/compta/resultat/result.php @@ -144,16 +144,20 @@ if (GETPOST("modecompta")) { $modecompta = GETPOST("modecompta", 'alpha'); } -// Security check -if ($user->socid > 0) { - accessforbidden(); -} -if (!$user->rights->accounting->comptarapport->lire) { - accessforbidden(); -} - $AccCat = new AccountancyCategory($db); +// Security check +$socid = GETPOST('socid', 'int'); +if ($user->socid > 0) { + $socid = $user->socid; +} +if (!empty($conf->comptabilite->enabled)) { + $result = restrictedArea($user, 'compta', '', '', 'resultat'); +} +if (!empty($conf->accounting->enabled)) { + $result = restrictedArea($user, 'accounting', '', '', 'comptarapport'); +} + /* * View diff --git a/htdocs/compta/stats/byratecountry.php b/htdocs/compta/stats/byratecountry.php index 79379ee0b24..1644a4ee5e3 100644 --- a/htdocs/compta/stats/byratecountry.php +++ b/htdocs/compta/stats/byratecountry.php @@ -44,16 +44,16 @@ $modecompta = (GETPOST('modecompta', 'alpha') ? GETPOST('modecompta', 'alpha') : $year = GETPOST("year", 'int'); $month = GETPOST("month", 'int'); if (empty($year)) { - $year_current = strftime("%Y", dol_now()); - $month_current = strftime("%m", dol_now()); + $year_current = dol_print_date(dol_now(), '%Y'); + $month_current = dol_print_date(dol_now(), '%m'); $year_start = $year_current; } else { $year_current = $year; - $month_current = strftime("%m", dol_now()); + $month_current = dol_print_date(dol_now(), '%m'); $year_start = $year; } -$date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear")); -$date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear")); +$date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear"), 'tzuserrel'); +$date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear"), 'tzuserrel'); // Quarter if (empty($date_start) || empty($date_end)) { // We define date_start and date_end $q = GETPOST("q", "int"); diff --git a/htdocs/compta/stats/cabyprodserv.php b/htdocs/compta/stats/cabyprodserv.php index c6c0e8e0816..25d9d4b9460 100644 --- a/htdocs/compta/stats/cabyprodserv.php +++ b/htdocs/compta/stats/cabyprodserv.php @@ -52,8 +52,8 @@ if (GETPOST("modecompta")) { $modecompta = GETPOST("modecompta"); } -$sortorder = isset($_GET["sortorder"]) ? $_GET["sortorder"] : $_POST["sortorder"]; -$sortfield = isset($_GET["sortfield"]) ? $_GET["sortfield"] : $_POST["sortfield"]; +$sortorder = GETPOST("sortorder", 'aZ09'); +$sortfield = GETPOST("sortfield", 'aZ09'); if (!$sortorder) { $sortorder = "asc"; } @@ -89,16 +89,16 @@ $date_endyear = GETPOST("date_endyear"); $date_endmonth = GETPOST("date_endmonth"); $date_endday = GETPOST("date_endday"); if (empty($year)) { - $year_current = strftime("%Y", dol_now()); - $month_current = strftime("%m", dol_now()); + $year_current = dol_print_date(dol_now(), '%Y'); + $month_current = dol_print_date(dol_now(), '%m'); $year_start = $year_current; } else { $year_current = $year; - $month_current = strftime("%m", dol_now()); + $month_current = dol_print_date(dol_now(), '%m'); $year_start = $year; } -$date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear")); -$date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear")); +$date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear"), 'tzuserrel'); +$date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear"), 'tzuserrel'); // Quarter if (empty($date_start) || empty($date_end)) { // We define date_start and date_end $q = GETPOST("q", "int"); diff --git a/htdocs/compta/stats/cabyuser.php b/htdocs/compta/stats/cabyuser.php index 62e6fb3135d..feae1f83594 100644 --- a/htdocs/compta/stats/cabyuser.php +++ b/htdocs/compta/stats/cabyuser.php @@ -51,8 +51,8 @@ if (GETPOST("modecompta")) { $modecompta = GETPOST("modecompta"); } -$sortorder = isset($_GET["sortorder"]) ? $_GET["sortorder"] : $_POST["sortorder"]; -$sortfield = isset($_GET["sortfield"]) ? $_GET["sortfield"] : $_POST["sortfield"]; +$sortorder = GETPOST("sortorder", 'aZ09'); +$sortfield = GETPOST("sortfield", 'aZ09'); if (!$sortorder) { $sortorder = "asc"; } @@ -61,25 +61,25 @@ if (!$sortfield) { } // Date range -$year = GETPOST("year"); -$month = GETPOST("month"); -$date_startyear = GETPOST("date_startyear"); -$date_startmonth = GETPOST("date_startmonth"); -$date_startday = GETPOST("date_startday"); -$date_endyear = GETPOST("date_endyear"); -$date_endmonth = GETPOST("date_endmonth"); -$date_endday = GETPOST("date_endday"); +$year = GETPOST("year", 'int'); +$month = GETPOST("month", 'int'); +$date_startyear = GETPOST("date_startyear", 'int'); +$date_startmonth = GETPOST("date_startmonth", 'int'); +$date_startday = GETPOST("date_startday", 'int'); +$date_endyear = GETPOST("date_endyear", 'int'); +$date_endmonth = GETPOST("date_endmonth", 'int'); +$date_endday = GETPOST("date_endday", 'int'); if (empty($year)) { - $year_current = strftime("%Y", dol_now()); - $month_current = strftime("%m", dol_now()); + $year_current = dol_print_date(dol_now(), '%Y'); + $month_current = dol_print_date(dol_now(), '%m'); $year_start = $year_current; } else { $year_current = $year; - $month_current = strftime("%m", dol_now()); + $month_current = dol_print_date(dol_now(), '%m'); $year_start = $year; } -$date_start = dol_mktime(0, 0, 0, $_REQUEST["date_startmonth"], $_REQUEST["date_startday"], $_REQUEST["date_startyear"]); -$date_end = dol_mktime(23, 59, 59, $_REQUEST["date_endmonth"], $_REQUEST["date_endday"], $_REQUEST["date_endyear"]); +$date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear"), 'tzuserrel'); +$date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear"), 'tzuserrel'); // Quarter if (empty($date_start) || empty($date_end)) { // We define date_start and date_end $q = GETPOST("q") ?GETPOST("q") : 0; diff --git a/htdocs/compta/stats/casoc.php b/htdocs/compta/stats/casoc.php index c8c13ca8b27..aedae20b8f0 100644 --- a/htdocs/compta/stats/casoc.php +++ b/htdocs/compta/stats/casoc.php @@ -44,8 +44,8 @@ if (GETPOST("modecompta")) { $modecompta = GETPOST("modecompta"); } -$sortorder = isset($_GET["sortorder"]) ? $_GET["sortorder"] : $_POST["sortorder"]; -$sortfield = isset($_GET["sortfield"]) ? $_GET["sortfield"] : $_POST["sortfield"]; +$sortorder = GETPOST("sortorder", 'aZ09'); +$sortfield = GETPOST("sortfield", 'aZ09'); if (!$sortorder) { $sortorder = "asc"; } @@ -83,23 +83,23 @@ $search_societe = GETPOST("search_societe", 'alpha'); $search_zip = GETPOST("search_zip", 'alpha'); $search_town = GETPOST("search_town", 'alpha'); $search_country = GETPOST("search_country", 'alpha'); -$date_startyear = GETPOST("date_startyear", 'alpha'); -$date_startmonth = GETPOST("date_startmonth", 'alpha'); -$date_startday = GETPOST("date_startday", 'alpha'); -$date_endyear = GETPOST("date_endyear", 'alpha'); -$date_endmonth = GETPOST("date_endmonth", 'alpha'); -$date_endday = GETPOST("date_endday", 'alpha'); +$date_startyear = GETPOST("date_startyear", 'int'); +$date_startmonth = GETPOST("date_startmonth", 'int'); +$date_startday = GETPOST("date_startday", 'int'); +$date_endyear = GETPOST("date_endyear", 'int'); +$date_endmonth = GETPOST("date_endmonth", 'int'); +$date_endday = GETPOST("date_endday", 'int'); if (empty($year)) { - $year_current = strftime("%Y", dol_now()); - $month_current = strftime("%m", dol_now()); + $year_current = dol_print_date(dol_now(), '%Y'); + $month_current = dol_print_date(dol_now(), '%m'); $year_start = $year_current; } else { $year_current = $year; - $month_current = strftime("%m", dol_now()); + $month_current = dol_print_date(dol_now(), '%m'); $year_start = $year; } -$date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear")); -$date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear")); +$date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear"), 'tzuserrel'); +$date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear"), 'tzuserrel'); // Quarter if (empty($date_start) || empty($date_end)) { // We define date_start and date_end $q = GETPOST("q", "int") ?GETPOST("q", "int") : 0; diff --git a/htdocs/compta/stats/index.php b/htdocs/compta/stats/index.php index 083230da668..74589d2e391 100644 --- a/htdocs/compta/stats/index.php +++ b/htdocs/compta/stats/index.php @@ -51,8 +51,8 @@ if (empty($year)) { $month_current = dol_print_date(dol_now(), "%m"); $year_start = $year - ($nbofyear - 1); } -$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear); -$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear); +$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear, 'tzuserrel'); +$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear, 'tzuserrel'); // We define date_start and date_end if (empty($date_start) || empty($date_end)) { // We define date_start and date_end diff --git a/htdocs/compta/stats/supplier_turnover.php b/htdocs/compta/stats/supplier_turnover.php index b199dcbeb9c..141db21b73e 100644 --- a/htdocs/compta/stats/supplier_turnover.php +++ b/htdocs/compta/stats/supplier_turnover.php @@ -47,8 +47,8 @@ if (empty($year)) { $month_current = strftime("%m", dol_now()); $year_start = $year - ($nbofyear - 1); } -$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear); -$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear); +$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear, 'tzuserrel'); +$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear, 'tzuserrel'); // We define date_start and date_end if (empty($date_start) || empty($date_end)) { // We define date_start and date_end @@ -120,8 +120,6 @@ if (!empty($conf->accounting->enabled)) { } - - /* * View */ diff --git a/htdocs/compta/stats/supplier_turnover_by_prodserv.php b/htdocs/compta/stats/supplier_turnover_by_prodserv.php index bdf4e5e0f85..26659c851f9 100644 --- a/htdocs/compta/stats/supplier_turnover_by_prodserv.php +++ b/htdocs/compta/stats/supplier_turnover_by_prodserv.php @@ -30,27 +30,14 @@ require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; // Load translation files required by the page $langs->loadLangs(array("products", "categories", "errors", 'accountancy')); -// Security pack (data & check) -$socid = GETPOST('socid', 'int'); - -if ($user->socid > 0) { - $socid = $user->socid; -} -if (!empty($conf->comptabilite->enabled)) { - $result = restrictedArea($user, 'compta', '', '', 'resultat'); -} -if (!empty($conf->accounting->enabled)) { - $result = restrictedArea($user, 'accounting', '', '', 'comptarapport'); -} - // Define modecompta ('CREANCES-DETTES' or 'RECETTES-DEPENSES') $modecompta = $conf->global->ACCOUNTING_MODE; if (GETPOST("modecompta")) { $modecompta = GETPOST("modecompta"); } -$sortorder = isset($_GET["sortorder"]) ? $_GET["sortorder"] : $_POST["sortorder"]; -$sortfield = isset($_GET["sortfield"]) ? $_GET["sortfield"] : $_POST["sortfield"]; +$sortorder = GETPOST("sortorder", 'aZ09'); +$sortfield = GETPOST("sortfield", 'aZ09'); if (!$sortorder) { $sortorder = "asc"; } @@ -84,16 +71,16 @@ $date_endyear = GETPOST("date_endyear"); $date_endmonth = GETPOST("date_endmonth"); $date_endday = GETPOST("date_endday"); if (empty($year)) { - $year_current = strftime("%Y", dol_now()); - $month_current = strftime("%m", dol_now()); + $year_current = dol_print_date(dol_now(), '%Y'); + $month_current = dol_print_date(dol_now(), '%m'); $year_start = $year_current; } else { $year_current = $year; - $month_current = strftime("%m", dol_now()); + $month_current = dol_print_date(dol_now(), '%m'); $year_start = $year; } -$date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear")); -$date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear")); +$date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear"), 'tzuserrel'); +$date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear"), 'tzuserrel'); // Quarter if (empty($date_start) || empty($date_end)) { // We define date_start and date_end $q = GETPOST("q", "int"); @@ -204,6 +191,19 @@ foreach ($allparams as $key => $value) { $paramslink .= '&'.$key.'='.$value; } +// Security pack (data & check) +$socid = GETPOST('socid', 'int'); + +if ($user->socid > 0) { + $socid = $user->socid; +} +if (!empty($conf->comptabilite->enabled)) { + $result = restrictedArea($user, 'compta', '', '', 'resultat'); +} +if (!empty($conf->accounting->enabled)) { + $result = restrictedArea($user, 'accounting', '', '', 'comptarapport'); +} + /* * View diff --git a/htdocs/compta/stats/supplier_turnover_by_thirdparty.php b/htdocs/compta/stats/supplier_turnover_by_thirdparty.php index fbfb0994e4a..0530d58ee87 100644 --- a/htdocs/compta/stats/supplier_turnover_by_thirdparty.php +++ b/htdocs/compta/stats/supplier_turnover_by_thirdparty.php @@ -38,8 +38,8 @@ if (GETPOST("modecompta")) { $modecompta = GETPOST("modecompta"); } -$sortorder = isset($_GET["sortorder"]) ? $_GET["sortorder"] : $_POST["sortorder"]; -$sortfield = isset($_GET["sortfield"]) ? $_GET["sortfield"] : $_POST["sortfield"]; +$sortorder = GETPOST("sortorder", 'aZ09'); +$sortfield = GETPOST("sortfield", 'aZ09'); if (!$sortorder) { $sortorder = "asc"; } @@ -59,17 +59,6 @@ if (GETPOST('subcat', 'alpha') === 'yes') { // Hook $hookmanager->initHooks(array('supplierturnoverbythirdpartylist')); -// Security check -if ($user->socid > 0) { - $socid = $user->socid; -} -if (!empty($conf->comptabilite->enabled)) { - $result = restrictedArea($user, 'compta', '', '', 'resultat'); -} -if (!empty($conf->accounting->enabled)) { - $result = restrictedArea($user, 'accounting', '', '', 'comptarapport'); -} - // Date range $year = GETPOST("year", 'int'); $month = GETPOST("month", 'int'); @@ -84,16 +73,16 @@ $date_endyear = GETPOST("date_endyear", 'alpha'); $date_endmonth = GETPOST("date_endmonth", 'alpha'); $date_endday = GETPOST("date_endday", 'alpha'); if (empty($year)) { - $year_current = strftime("%Y", dol_now()); - $month_current = strftime("%m", dol_now()); + $year_current = dol_print_date(dol_now(), '%Y'); + $month_current = dol_print_date(dol_now(), '%m'); $year_start = $year_current; } else { $year_current = $year; - $month_current = strftime("%m", dol_now()); + $month_current = dol_print_date(dol_now(), '%m'); $year_start = $year; } -$date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear")); -$date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear")); +$date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear"), 'tzuserrel'); +$date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear"), 'tzuserrel'); // Quarter if (empty($date_start) || empty($date_end)) { // We define date_start and date_end $q = GETPOST("q", "int") ?GETPOST("q", "int") : 0; @@ -175,6 +164,17 @@ foreach ($allparams as $key => $value) { $paramslink .= '&'.$key.'='.$value; } +// Security check +if ($user->socid > 0) { + $socid = $user->socid; +} +if (!empty($conf->comptabilite->enabled)) { + $result = restrictedArea($user, 'compta', '', '', 'resultat'); +} +if (!empty($conf->accounting->enabled)) { + $result = restrictedArea($user, 'accounting', '', '', 'comptarapport'); +} + /* * View diff --git a/htdocs/langs/en_US/users.lang b/htdocs/langs/en_US/users.lang index 996ba20ab7d..d4326fc08c9 100644 --- a/htdocs/langs/en_US/users.lang +++ b/htdocs/langs/en_US/users.lang @@ -72,7 +72,7 @@ ExportDataset_user_1=Users and their properties DomainUser=Domain user %s Reactivate=Reactivate CreateInternalUserDesc=This form allows you to create an internal user in your company/organization. To create an external user (customer, vendor etc. ..), use the button 'Create Dolibarr User' from that third-party's contact card. -InternalExternalDesc=An internal user is a user that is part of your company/organization.
    An external user is a customer, vendor or other (Creating an external user for a third-party can be done from the contact record of the third-party).

    In both cases, permissions defines rights on Dolibarr, also external user can have a different menu manager than internal user (See Home - Setup - Display) +InternalExternalDesc=An internal user is a user that is part of your company/organization.
    An external user is a customer, vendor or other that must view only data related to himself (Creating an external user for a third-party can be done from the contact record of the third-party).

    In both cases, permissions defines rights on Dolibarr, also external user can have a different menu manager than internal user (See Home - Setup - Display) PermissionInheritedFromAGroup=Permission granted because inherited from one of a user's group. Inherited=Inherited UserWillBe=Created user will be From 640f5f6051818f98d0c123171e5a5c49630ff41c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Mar 2021 14:41:48 +0100 Subject: [PATCH 150/180] FIx #yogosha5661 --- htdocs/compta/cashcontrol/cashcontrol_card.php | 14 +++++++++----- htdocs/compta/cashcontrol/cashcontrol_list.php | 16 ++++++++-------- htdocs/compta/cashcontrol/report.php | 9 +++++++++ 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index da018dd1f06..ccaa0158af2 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -67,11 +67,6 @@ if ($contextpage == 'takepos') { $_GET['optioncss'] = 'print'; } -// Security check -if (!$user->rights->cashdesk->run && !$user->rights->takepos->run) { - accessforbidden(); -} - $arrayofpaymentmode = array('cash'=>'Cash', 'cheque'=>'Cheque', 'card'=>'CreditCard'); $arrayofposavailable = array(); @@ -95,6 +90,15 @@ $hookmanager->initHooks(array('cashcontrolcard', 'globalcard')); // Load object include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once. +// Security check +if ($user->socid > 0) { // Protection if external user + //$socid = $user->socid; + accessforbidden(); +} +if (!$user->rights->cashdesk->run && !$user->rights->takepos->run) { + accessforbidden(); +} + /* * Actions diff --git a/htdocs/compta/cashcontrol/cashcontrol_list.php b/htdocs/compta/cashcontrol/cashcontrol_list.php index 6c4141e4b6a..3b97b967208 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_list.php +++ b/htdocs/compta/cashcontrol/cashcontrol_list.php @@ -94,14 +94,6 @@ if (!$sortorder) { $sortorder = "ASC"; } -// Security check -$socid = 0; -if ($user->socid > 0) { // Protection if external user - //$socid = $user->socid; - accessforbidden(); -} -//$result = restrictedArea($user, 'monmodule', $id, ''); - // Initialize array of search criterias $search_all = GETPOST("search_all", 'alpha'); $search = array(); @@ -133,6 +125,14 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php'; $object->fields = dol_sort_array($object->fields, 'position'); $arrayfields = dol_sort_array($arrayfields, 'position'); +// Security check +if ($user->socid > 0) { // Protection if external user + //$socid = $user->socid; + accessforbidden(); +} +if (!$user->rights->cashdesk->run && !$user->rights->takepos->run) { + accessforbidden(); +} /* diff --git a/htdocs/compta/cashcontrol/report.php b/htdocs/compta/cashcontrol/report.php index f6c58aa858c..95c18dbf261 100644 --- a/htdocs/compta/cashcontrol/report.php +++ b/htdocs/compta/cashcontrol/report.php @@ -72,6 +72,15 @@ $sday = $cashcontrol->day_close; $posmodule = $cashcontrol->posmodule; $terminalid = $cashcontrol->posnumber; +// Security check +if ($user->socid > 0) { // Protection if external user + //$socid = $user->socid; + accessforbidden(); +} +if (!$user->rights->cashdesk->run && !$user->rights->takepos->run) { + accessforbidden(); +} + /* * View From c3f8e0e3978921bb1e1448b526e19ed92bff266f Mon Sep 17 00:00:00 2001 From: Alexis LAURIER Date: Thu, 18 Mar 2021 16:21:54 +0100 Subject: [PATCH 151/180] invoice list - add new standard hook --- htdocs/compta/facture/list.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 9b3dce589fb..3722cb3a98a 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -493,6 +493,10 @@ if ($search_user > 0) { $sql .= ", ".MAIN_DB_PREFIX."element_contact as ec"; $sql .= ", ".MAIN_DB_PREFIX."c_type_contact as tc"; } +// Add table from hooks +$parameters = array(); +$reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object); // Note that $action and $object may have been modified by hook +$sql .= $hookmanager->resPrint; $sql .= ' WHERE f.fk_soc = s.rowid'; $sql .= ' AND f.entity IN ('.getEntity('invoice').')'; @@ -865,6 +869,10 @@ if ($resql) { // Add $param from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; + // Add $param from hooks + $parameters = array(); + $reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object); // Note that $action and $object may have been modified by hook + $param .= $hookmanager->resPrint; $arrayofmassactions = array( 'validate'=>$langs->trans("Validate"), From 06bc9996148450ef8c4daef0809cfa05be626fff Mon Sep 17 00:00:00 2001 From: Alexis LAURIER Date: Thu, 18 Mar 2021 16:51:02 +0100 Subject: [PATCH 152/180] Add group by and having hooks on invoice list --- htdocs/compta/facture/list.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 3722cb3a98a..81225b289bf 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -697,6 +697,16 @@ if (!$sall) { $sql .= natural_search(array_keys($fieldstosearchall), $sall); } +// Add GroupBy from hooks +$parameters = array('all' => $all, 'fieldstosearchall' => $fieldstosearchall); +$reshook = $hookmanager->executeHooks('printFieldListGroupBy', $parameters, $object); // Note that $action and $object may have been modified by hook +$sql .= $hookmanager->resPrint; + +// Add HAVING from hooks +$parameters = array(); +$reshook = $hookmanager->executeHooks('printFieldListHaving', $parameters, $object); // Note that $action and $object may have been modified by hook +$sql .= $hookmanager->resPrint; + $sql .= ' ORDER BY '; $listfield = explode(',', $sortfield); $listorder = explode(',', $sortorder); From ada5d728b5d3bcdd18f8aa70bf2427003cfe46eb Mon Sep 17 00:00:00 2001 From: Alexis LAURIER Date: Thu, 18 Mar 2021 17:00:57 +0100 Subject: [PATCH 153/180] invoice list - ajust hooks --- htdocs/compta/facture/list.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 81225b289bf..63e3fa1e2c2 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -693,19 +693,18 @@ if (!$sall) { $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key : ''); } } + // Add GroupBy from hooks + $parameters = array('all' => $all, 'fieldstosearchall' => $fieldstosearchall); + $reshook = $hookmanager->executeHooks('printFieldListGroupBy', $parameters, $object); // Note that $action and $object may have been modified by hook + $sql .= $hookmanager->resPrint; } else { $sql .= natural_search(array_keys($fieldstosearchall), $sall); } -// Add GroupBy from hooks -$parameters = array('all' => $all, 'fieldstosearchall' => $fieldstosearchall); -$reshook = $hookmanager->executeHooks('printFieldListGroupBy', $parameters, $object); // Note that $action and $object may have been modified by hook -$sql .= $hookmanager->resPrint; - // Add HAVING from hooks $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListHaving', $parameters, $object); // Note that $action and $object may have been modified by hook -$sql .= $hookmanager->resPrint; +$sql .= !empty($hookmanager->resPrint) ? (' HAVING 1=1 AND ' . $hookmanager->resPrint) : ''; $sql .= ' ORDER BY '; $listfield = explode(',', $sortfield); From 5b72193f0d381aaa33ff8bfcb2661b734de39d36 Mon Sep 17 00:00:00 2001 From: Alexis LAURIER Date: Thu, 18 Mar 2021 17:06:49 +0100 Subject: [PATCH 154/180] invoice list - ajust hooks --- htdocs/compta/facture/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 63e3fa1e2c2..31365b33b58 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -704,7 +704,7 @@ if (!$sall) { // Add HAVING from hooks $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListHaving', $parameters, $object); // Note that $action and $object may have been modified by hook -$sql .= !empty($hookmanager->resPrint) ? (' HAVING 1=1 AND ' . $hookmanager->resPrint) : ''; +$sql .= !empty($hookmanager->resPrint) ? (' HAVING 1=1 ' . $hookmanager->resPrint) : ''; $sql .= ' ORDER BY '; $listfield = explode(',', $sortfield); From f810fffc01a7b5a4581ec3cd84f3a5574a717c89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 18:50:38 +0100 Subject: [PATCH 155/180] fix php8 wzrning --- htdocs/core/ajax/ajaxdirtree.php | 2 ++ htdocs/ecm/class/ecmdirectory.class.php | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/core/ajax/ajaxdirtree.php b/htdocs/core/ajax/ajaxdirtree.php index 432a0e628db..dab5206fc7d 100644 --- a/htdocs/core/ajax/ajaxdirtree.php +++ b/htdocs/core/ajax/ajaxdirtree.php @@ -288,6 +288,7 @@ if (empty($conf->use_javascript_ajax) || !empty($conf->global->MAIN_ECM_DISABLE_ print '
'."\n"; // -------------------------------------------------------------------- $i = 0; $totalarray = array(); +$totalarray['nbfield'] = 0; while ($i < min($num, $limit)) { $obj = $db->fetch_object($resql); if (empty($obj)) { From 8423bd676c48d298fc7dad37c0fae56818247fee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 22:26:14 +0100 Subject: [PATCH 176/180] fix php8 warning --- htdocs/societe/card.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index f6ab780779a..6f9ee362a82 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -12,7 +12,7 @@ * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2018 Nicolas ZABOURI * Copyright (C) 2018 Ferran Marcet - * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018-2021 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -2081,7 +2081,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { if (!empty($value['icon'])) { print ''; } - print ''; + print ''; print ''; print ''; } elseif (!empty($object->socialnetworks[$key])) { @@ -2091,7 +2091,9 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { } // Prof ids - $i = 1; $j = 0; $NBCOLS = ($conf->browser->layout == 'phone' ? 1 : 2); + $i = 1; + $j = 0; + $NBCOLS = ($conf->browser->layout == 'phone' ? 1 : 2); while ($i <= 6) { $idprof = $langs->transcountry('ProfId'.$i, $object->country_code); if ($idprof != '-') { From ba33bc8eacddb1ce91091b4e8946e9373ad3b023 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 22:29:08 +0100 Subject: [PATCH 177/180] fix php8 warning --- htdocs/contact/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index 0ee4cb10637..eac12a23071 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -8,7 +8,7 @@ * Copyright (C) 2013-2016 Alexandre Spangaro * Copyright (C) 2014 Juanjo Menent * Copyright (C) 2015 Jean-François Ferry - * Copyright (C) 2018-2020 Frédéric France + * Copyright (C) 2018-2021 Frédéric France * Copyright (C) 2019 Josep Lluís Amador * Copyright (C) 2020 Open-Dsi * @@ -1075,7 +1075,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { if (!empty($value['icon'])) { print ''; } - print ''; + print ''; print ''; print ''; } elseif (!empty($object->socialnetworks[$key])) { From 181436f279d7bd446d4a0fafa52dcaafef8dce65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 22:31:41 +0100 Subject: [PATCH 178/180] fix php8 warning --- htdocs/contact/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index 0ee4cb10637..109a50fb180 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -1035,7 +1035,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Unsubscribe if (!empty($conf->mailing->enabled)) { - if ($conf->use_javascript_ajax && $conf->global->MAILING_CONTACT_DEFAULT_BULK_STATUS==-1) { + if ($conf->use_javascript_ajax && isset($conf->global->MAILING_CONTACT_DEFAULT_BULK_STATUS) && $conf->global->MAILING_CONTACT_DEFAULT_BULK_STATUS == -1) { print "\n".'
'; if ($mesg) { print $mesg; } else { From a420d0acbd98b9c70da5f2b7c932343a5de5c391 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 17 Mar 2021 18:40:11 +0100 Subject: [PATCH 119/180] fix php8 warnings --- htdocs/projet/tasks/stats/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/projet/tasks/stats/index.php b/htdocs/projet/tasks/stats/index.php index be6ac3c7802..d2c53943506 100644 --- a/htdocs/projet/tasks/stats/index.php +++ b/htdocs/projet/tasks/stats/index.php @@ -134,7 +134,7 @@ if (!count($arrayyears)) { $h = 0; $head = array(); -$head[$h][0] = DOL_URL_ROOT.'/projet/tasks/stats/index.php?'; +$head[$h][0] = DOL_URL_ROOT.'/projet/tasks/stats/index.php'; $head[$h][1] = $langs->trans("ByMonthYear"); $head[$h][2] = 'byyear'; $h++; From 3fab4696ae29437a846581650b5758697d30758c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 17 Mar 2021 19:27:15 +0100 Subject: [PATCH 120/180] Fix test on token is not done for login page. --- htdocs/main.inc.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 54794909003..2832609475d 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -432,10 +432,12 @@ if (!defined('NOTOKENRENEWAL')) { // Check token if ((!defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && !empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN)) || defined('CSRFCHECK_WITH_TOKEN')) { // Check validity of token, only if option MAIN_SECURITY_CSRF_WITH_TOKEN enabled or if constant CSRFCHECK_WITH_TOKEN is set into page - // Check all cases that need a token (all POST actions, all actions and mass actions on pages with CSRFCHECK_WITH_TOKEN set, all sensitive GET actions) - if ($_SERVER['REQUEST_METHOD'] == 'POST' || - ((GETPOSTISSET('action') || GETPOSTISSET('massaction')) && defined('CSRFCHECK_WITH_TOKEN')) || - in_array(GETPOST('action', 'aZ09'), array('add', 'addtimespent', 'update', 'install', 'delete', 'deletefilter', 'deleteoperation', 'deleteprof', 'deletepayment', 'confirm_create_user', 'confirm_create_thirdparty', 'confirm_reject_check'))) { + // Check all cases that need a token (all POST actions + all login, actions and mass actions on pages with CSRFCHECK_WITH_TOKEN set + all sensitive GET actions) + if ( + $_SERVER['REQUEST_METHOD'] == 'POST' || + ((GETPOSTISSET('actionlogin') || GETPOSTISSET('action') || GETPOSTISSET('massaction')) && defined('CSRFCHECK_WITH_TOKEN')) || + in_array(GETPOST('action', 'aZ09'), array('add', 'addtimespent', 'update', 'install', 'delete', 'deletefilter', 'deleteoperation', 'deleteprof', 'deletepayment', 'confirm_create_user', 'confirm_create_thirdparty', 'confirm_reject_check')) + ) { if (!GETPOSTISSET('token')) { if (GETPOST('uploadform', 'int')) { dol_syslog("--- Access to ".$_SERVER["PHP_SELF"]." refused. File size too large."); From 11427cd49c6b401589faec64e25d8514103a9afe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 17 Mar 2021 19:41:59 +0100 Subject: [PATCH 121/180] Add filter onloadend into WAF --- htdocs/main.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 2832609475d..199601f1385 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -122,7 +122,7 @@ function testSqlAndScriptInject($val, $type) $inj += preg_match('/ontouch([a-z]*)\s*=/i', $val); // $inj += preg_match('/on(abort|afterprint|beforeprint|beforeunload|blur|canplay|canplaythrough|change|click|contextmenu|copy|cut)\s*=/i', $val); $inj += preg_match('/on(dblclick|drop|durationchange|ended|error|focus|focusin|focusout|hashchange|input|invalid)\s*=/i', $val); - $inj += preg_match('/on(keydown|keypress|keyup|load|loadeddata|loadedmetadata|loadstart|offline|online|pagehide|pageshow)\s*=/i', $val); + $inj += preg_match('/on(keydown|keypress|keyup|load|loadeddata|loadedmetadata|loadstart|loadend|offline|online|pagehide|pageshow)\s*=/i', $val); $inj += preg_match('/on(paste|pause|play|playing|progress|ratechange|resize|reset|scroll|search|seeking|select|show|stalled|start|submit|suspend)\s*=/i', $val); $inj += preg_match('/on(timeupdate|toggle|unload|volumechange|waiting)\s*=/i', $val); @@ -134,7 +134,7 @@ function testSqlAndScriptInject($val, $type) $inj += preg_match('/ontouch([a-z]*)\s*=/i', $tmpval); // $inj += preg_match('/on(abort|afterprint|beforeprint|beforeunload|blur|canplay|canplaythrough|change|click|contextmenu|copy|cut)\s*=/i', $tmpval); $inj += preg_match('/on(dblclick|drop|durationchange|ended|error|focus|focusin|focusout|hashchange|input|invalid)\s*=/i', $tmpval); - $inj += preg_match('/on(keydown|keypress|keyup|load|loadeddata|loadedmetadata|loadstart|offline|online|pagehide|pageshow)\s*=/i', $tmpval); + $inj += preg_match('/on(keydown|keypress|keyup|load|loadeddata|loadedmetadata|loadstart|loadend|offline|online|pagehide|pageshow)\s*=/i', $tmpval); $inj += preg_match('/on(paste|pause|play|playing|progress|ratechange|resize|reset|scroll|search|seeking|select|show|stalled|start|submit|suspend)\s*=/i', $tmpval); $inj += preg_match('/on(timeupdate|toggle|unload|volumechange|waiting)\s*=/i', $tmpval); From fced63e93b0cc794b043d2f0c9221efe5ab3128a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 17 Mar 2021 20:11:22 +0100 Subject: [PATCH 122/180] fix php8 warning --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 04cbf0eb5a9..4f5ad18768e 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -860,7 +860,7 @@ abstract class CommonObject if (!empty($conf->socialnetworks->enabled)) { $outsocialnetwork = ''; - if (is_array($this->socialnetworks) && count($this->socialnetworks) > 0) { + if (!empty($this->socialnetworks) && is_countable($this->socialnetworks) && count($this->socialnetworks) > 0) { $socialnetworksdict = getArrayOfSocialNetworks(); foreach ($this->socialnetworks as $key => $value) { if ($value) { From 9609c3095a1909f2fa7d1895c6a77a3c216ca71d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 17 Mar 2021 20:13:20 +0100 Subject: [PATCH 123/180] fix php8 warnings --- htdocs/core/lib/functions.lib.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 1ff47bd2de3..a5c4a1db7da 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1868,7 +1868,7 @@ function dol_banner_tab($object, $paramid, $morehtml = '', $shownav = 1, $fieldi } } - if (!$phototoshow) { // Show No photo link (picto of object) + if (empty($phototoshow)) { // Show No photo link (picto of object) $morehtmlleft .= '
'; if ($object->element == 'action') { $width = 80; @@ -2061,33 +2061,33 @@ function dol_format_address($object, $withcountry = 0, $sep = "\n", $outputlangs // See format of addresses on https://en.wikipedia.org/wiki/Address // Address if (empty($mode)) { - $ret .= ($extralangcode ? $object->array_languages['address'][$extralangcode] : $object->address); + $ret .= ($extralangcode ? $object->array_languages['address'][$extralangcode] : (empty($object->address) ? '' : $object->address)); } // Zip/Town/State if (isset($object->country_code) && in_array($object->country_code, array('AU', 'CA', 'US')) || !empty($conf->global->MAIN_FORCE_STATE_INTO_ADDRESS)) { // US: title firstname name \n address lines \n town, state, zip \n country - $town = ($extralangcode ? $object->array_languages['town'][$extralangcode] : $object->town); + $town = ($extralangcode ? $object->array_languages['town'][$extralangcode] : (empty($object->town) ? '' : $object->town)); $ret .= ($ret ? $sep : '').$town; if (!empty($object->state)) { $ret .= ($ret ? ", " : '').$object->state; } - if ($object->zip) { + if (!empty($object->zip)) { $ret .= ($ret ? ", " : '').$object->zip; } } elseif (isset($object->country_code) && in_array($object->country_code, array('GB', 'UK'))) { // UK: title firstname name \n address lines \n town state \n zip \n country - $town = ($extralangcode ? $object->array_languages['town'][$extralangcode] : $object->town); + $town = ($extralangcode ? $object->array_languages['town'][$extralangcode] : (empty($object->town) ? '' : $object->town)); $ret .= ($ret ? $sep : '').$town; if (!empty($object->state)) { $ret .= ($ret ? ", " : '').$object->state; } - if ($object->zip) { + if (!empty($object->zip)) { $ret .= ($ret ? $sep : '').$object->zip; } } elseif (isset($object->country_code) && in_array($object->country_code, array('ES', 'TR'))) { // ES: title firstname name \n address lines \n zip town \n state \n country $ret .= ($ret ? $sep : '').$object->zip; - $town = ($extralangcode ? $object->array_languages['town'][$extralangcode] : $object->town); + $town = ($extralangcode ? $object->array_languages['town'][$extralangcode] : (empty($object->town) ? '' : $object->town)); $ret .= ($town ? (($object->zip ? ' ' : '').$town) : ''); if (!empty($object->state)) { $ret .= "\n".$object->state; @@ -2095,12 +2095,12 @@ function dol_format_address($object, $withcountry = 0, $sep = "\n", $outputlangs } elseif (isset($object->country_code) && in_array($object->country_code, array('IT'))) { // IT: tile firstname name\n address lines \n zip (Code Departement) \n country $ret .= ($ret ? $sep : '').$object->zip; - $town = ($extralangcode ? $object->array_languages['town'][$extralangcode] : $object->town); + $town = ($extralangcode ? $object->array_languages['town'][$extralangcode] : (empty($object->town) ? '' : $object->town)); $ret .= ($town ? (($object->zip ? ' ' : '').$town) : ''); $ret .= (empty($object->state_code) ? '' : (' '.$object->state_code)); } else { // Other: title firstname name \n address lines \n zip town \n country - $town = ($extralangcode ? $object->array_languages['town'][$extralangcode] : $object->town); - $ret .= $object->zip ? (($ret ? $sep : '').$object->zip) : ''; + $town = ($extralangcode ? $object->array_languages['town'][$extralangcode] : (empty($object->town) ? '' : $object->town)); + $ret .= !empty($object->zip) ? (($ret ? $sep : '').$object->zip) : ''; $ret .= ($town ? (($object->zip ? ' ' : ($ret ? $sep : '')).$town) : ''); if (!empty($object->state) && in_array($object->country_code, $countriesusingstate)) { $ret .= ($ret ? ", " : '').$object->state; From afafe81d8a16fc694fa172d3dc083fc01de8230b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 17 Mar 2021 21:36:47 +0100 Subject: [PATCH 124/180] fix php8 warning --- htdocs/product/list.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 5bc973e56b7..b10e3aadcc8 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -1197,6 +1197,7 @@ if ($resql) { $i = 0; $totalarray = array(); + $totalarray['nbfield'] = 0; while ($i < min($num, $limit)) { $obj = $db->fetch_object($resql); From 35869f1449dc13cbbd9949a8b7cfe25233a339b9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 17 Mar 2021 21:36:20 +0100 Subject: [PATCH 125/180] Add function dol_string_onlythesehtmlattributes() and option MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES to enable it. --- htdocs/core/lib/functions.lib.php | 49 +++++++++++++++++++++++++++++-- test/phpunit/SecurityTest.php | 15 ++++++++++ 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 1ff47bd2de3..d37fc0dd60e 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -670,6 +670,8 @@ function GETPOSTINT($paramname, $method = 0, $filter = null, $options = null, $n */ function checkVal($out = '', $check = 'alphanohtml', $filter = null, $options = null) { + global $conf; + // Check is done after replacement switch ($check) { case 'none': @@ -738,6 +740,12 @@ function checkVal($out = '', $check = 'alphanohtml', $filter = null, $options = break; case 'restricthtml': // Recommended for most html textarea $out = dol_string_onlythesehtmltags($out, 0, 1, 1); + + // We should also exclude non expected attributes + if (!empty($conf->global->MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES)) { + $out = dol_string_onlythesehtmlattributes($out); + } + break; case 'custom': if (empty($filter)) { @@ -6232,7 +6240,7 @@ function dol_string_nohtmltag($stringtoclean, $removelinefeed = 1, $pagecodeto = * * @param string $stringtoclean String to clean * @param int $cleanalsosomestyles Remove absolute/fixed positioning from inline styles - * @param int $removeclassattribute Remove the class attribute from tags + * @param int $removeclassattribute 1=Remove the class attribute from tags * @param int $cleanalsojavascript Remove also occurence of 'javascript:'. * @return string String cleaned * @@ -6245,6 +6253,10 @@ function dol_string_onlythesehtmltags($stringtoclean, $cleanalsosomestyles = 1, "ol", "p", "q", "s", "section", "span", "strike", "strong", "title", "table", "tr", "th", "td", "u", "ul", "sup", "sub", "blockquote", "pre", "h1", "h2", "h3", "h4", "h5", "h6" ); + $allowed_attributes = array( + "class", "href", "src", "style", "id", "name", "data-html" + ); + $allowed_tags_string = join("><", $allowed_tags); $allowed_tags_string = '<'.$allowed_tags_string.'>'; @@ -6278,6 +6290,39 @@ function dol_string_onlythesehtmltags($stringtoclean, $cleanalsosomestyles = 1, return $temp; } + +/** + * Clean a string from some undesirable HTML tags. + * Note. Not as secured as dol_string_onlythesehtmltags(). + * + * @param string $stringtoclean String to clean + * @param array $allowed_attributes Array of tags not allowed + * @return string String cleaned + * + * @see dol_escape_htmltag() strip_tags() dol_string_nohtmltag() dol_string_onlythesehtmltags() dol_string_neverthesehtmltags() + */ +function dol_string_onlythesehtmlattributes($stringtoclean, $allowed_attributes = array("class", "href", "src", "style", "id", "name", "data-html")) +{ + if (class_exists('DOMDocument')) { + $dom = new DOMDocument(); + $dom->loadHTML($stringtoclean, LIBXML_ERR_NONE|LIBXML_HTML_NOIMPLIED|LIBXML_HTML_NODEFDTD|LIBXML_NONET|LIBXML_NOWARNING|LIBXML_NOXMLDECL); + if (is_object($dom)) { + for ($els = $dom->getElementsByTagname('*'), $i = $els->length - 1; $i >= 0; $i--) { + for ($attrs = $els->item($i)->attributes, $ii = $attrs->length - 1; $ii >= 0; $ii--) { + // Delete attribute if not into allowed_attributes + if (! empty($attrs->item($ii)->name) && ! in_array($attrs->item($ii)->name, $allowed_attributes)) { + $els->item($i)->removeAttribute($attrs->item($ii)->name); + } + } + } + } + + return $dom->saveHTML(); + } else { + return $stringtoclean; + } +} + /** * Clean a string from some undesirable HTML tags. * Note. Not as secured as dol_string_onlythesehtmltags(). @@ -6287,7 +6332,7 @@ function dol_string_onlythesehtmltags($stringtoclean, $cleanalsosomestyles = 1, * @param string $cleanalsosomestyles Clean also some tags * @return string String cleaned * - * @see dol_escape_htmltag() strip_tags() dol_string_nohtmltag() dol_string_onlythesehtmltags() + * @see dol_escape_htmltag() strip_tags() dol_string_nohtmltag() dol_string_onlythesehtmltags() dol_string_onlythesehtmlattributes() */ function dol_string_neverthesehtmltags($stringtoclean, $disallowed_tags = array('textarea'), $cleanalsosomestyles = 0) { diff --git a/test/phpunit/SecurityTest.php b/test/phpunit/SecurityTest.php index b3a95d5f816..1d3b76cd4f2 100644 --- a/test/phpunit/SecurityTest.php +++ b/test/phpunit/SecurityTest.php @@ -571,6 +571,21 @@ class SecurityTest extends PHPUnit\Framework\TestCase return 0; } + /** + * testDolStringOnlyTheseHtmlAttributes + * + * @return number + */ + public function testDolStringOnlyTheseHtmlAttributes() + { + $stringtotest = ''; + $decodedstring = dol_string_onlythesehtmlattributes($stringtotest); + $decodedstring = preg_replace("/\n$/", "", $decodedstring); + $this->assertEquals('', $decodedstring, 'Function did not sanitize correclty with test 1'); + + return 0; + } + /** * testGetRandomPassword * From 31478d5ac09b32c6f2558497fe5c1c74f612d757 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 17 Mar 2021 22:01:25 +0100 Subject: [PATCH 126/180] Look and feel v14 --- htdocs/core/class/html.formcompany.class.php | 2 +- htdocs/core/lib/functions.lib.php | 6 +++--- htdocs/societe/card.php | 2 +- htdocs/user/card.php | 5 +++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/htdocs/core/class/html.formcompany.class.php b/htdocs/core/class/html.formcompany.class.php index 34c522745d9..45a5995df28 100644 --- a/htdocs/core/class/html.formcompany.class.php +++ b/htdocs/core/class/html.formcompany.class.php @@ -435,7 +435,7 @@ class FormCompany extends Form * @param int $addjscombo Add js combo * @return string String with HTML select */ - public function select_civility($selected = '', $htmlname = 'civility_id', $morecss = 'maxwidth150', $addjscombo = 0) + public function select_civility($selected = '', $htmlname = 'civility_id', $morecss = 'maxwidth150', $addjscombo = 1) { // phpcs:enable global $conf, $langs, $user; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index d37fc0dd60e..5edc3e3bde7 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3494,7 +3494,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ '1downarrow', '1uparrow', '1leftarrow', '1rightarrow', '1uparrow_selected', '1downarrow_selected', '1leftarrow_selected', '1rightarrow_selected', 'accountancy', 'account', 'accountline', 'action', 'add', 'address', 'angle-double-down', 'angle-double-up', 'asset', 'bank_account', 'barcode', 'bank', 'bill', 'billa', 'billr', 'billd', 'bookmark', 'bom', 'building', - 'cash-register', 'category', 'chart', 'check', 'clock', 'close_title', 'cog', 'collab', 'company', 'contact', 'contract', 'cron', 'cubes', + 'cash-register', 'category', 'chart', 'check', 'clock', 'close_title', 'cog', 'collab', 'company', 'contact', 'country', 'contract', 'cron', 'cubes', 'delete', 'dolly', 'dollyrevert', 'donation', 'download', 'edit', 'ellipsis-h', 'email', 'eraser', 'external-link-alt', 'external-link-square-alt', 'filter', 'file-code', 'file-export', 'file-import', 'file-upload', 'folder', 'folder-open', 'globe', 'globe-americas', 'grip', 'grip_title', 'group', 'help', 'holiday', @@ -3545,7 +3545,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ 'account'=>'university', 'accountline'=>'receipt', 'accountancy'=>'search-dollar', 'action'=>'calendar-alt', 'add'=>'plus-circle', 'address'=> 'address-book', 'asset'=>'money-check-alt', 'bank_account'=>'university', 'bill'=>'file-invoice-dollar', 'billa'=>'file-excel', 'billr'=>'file-invoice-dollar', 'supplier_invoicea'=>'file-excel', 'billd'=>'file-medical', 'supplier_invoiced'=>'file-medical', 'bom'=>'shapes', - 'chart'=>'chart-line', 'company'=>'building', 'contact'=>'address-book', 'contract'=>'suitcase', 'collab'=>'people-arrows', 'conversation'=>'comments', 'cron'=>'business-time', + 'chart'=>'chart-line', 'company'=>'building', 'contact'=>'address-book', 'contract'=>'suitcase', 'collab'=>'people-arrows', 'conversation'=>'comments', 'country'=>'globe-americas', 'cron'=>'business-time', 'donation'=>'file-alt', 'dynamicprice'=>'hand-holding-usd', 'setup'=>'cog', 'companies'=>'building', 'products'=>'cube', 'commercial'=>'suitcase', 'invoicing'=>'coins', 'accounting'=>'chart-line', 'category'=>'tag', 'dollyrevert'=>'dolly', @@ -3661,7 +3661,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ 'map-marker-alt'=>'#aaa', 'mrp'=>'#a69944', 'product'=>'#a69944', 'service'=>'#a69944', 'inventory'=>'#a69944', 'stock'=>'#a69944', 'movement'=>'#a69944', 'other'=>'#ddd', 'playdisabled'=>'#ccc', 'printer'=>'#444', 'projectpub'=>'#986c6a', 'resize'=>'#444', 'rss'=>'#cba', - 'shipment'=>'#a69944', 'stats'=>'#444', 'switch_off'=>'#999', 'technic'=>'#999', 'timespent'=>'#555', 'uparrow'=>'#555', 'user-cog'=>'#999', 'globe-americas'=>'#aaa', + 'shipment'=>'#a69944', 'stats'=>'#444', 'switch_off'=>'#999', 'technic'=>'#999', 'timespent'=>'#555', 'uparrow'=>'#555', 'user-cog'=>'#999', 'country'=>'#aaa', 'globe-americas'=>'#aaa', 'website'=>'#304' ); if (isset($arrayconvpictotocolor[$pictowithouttext])) { diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index eb7aeb0dc69..f6ab780779a 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -1357,7 +1357,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Country print '
'.$form->editfieldkey('Country', 'selectcountry_id', '', $object, 0).''; - print img_picto('', 'globe-americas', 'class="paddingrightonly"'); + print img_picto('', 'country', 'class="paddingrightonly"'); print $form->select_country((GETPOSTISSET('country_id') ? GETPOST('country_id') : $object->country_id), 'country_id', '', 0, 'minwidth300 maxwidth500 widthcentpercentminusx'); if ($user->admin) { print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); diff --git a/htdocs/user/card.php b/htdocs/user/card.php index 538d6c6f101..a72dde04fb1 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -916,7 +916,7 @@ if ($action == 'create' || $action == 'adduserldap') { } $checked = (GETPOST('superadmin', 'int') ? ' checked' : ''); $disabled = (GETPOST('superadmin', 'int') ? '' : ' disabled'); - print ' '.$langs->trans("SuperAdministrator"); + print '
'.$form->editfieldkey('Country', 'selectcountry_id', '', $object, 0).''; + print img_picto('', 'country', 'class="paddingrightonly"'); print $form->select_country((GETPOST('country_id') != '' ?GETPOST('country_id') : $object->country_id)); if ($user->admin) { print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); @@ -2107,7 +2108,7 @@ if ($action == 'create' || $action == 'adduserldap') { } $checked = (($object->admin && !$object->entity) ? ' checked' : ''); - print ' '.$langs->trans("SuperAdministrator"); + print '
'.$langs->trans("ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS").''; - $form->select_produits($conf->global->ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS, 'ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', '', 0); + $selected = (empty($conf->global->ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS) ? '' : $conf->global->ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS); + $form->select_produits($selected, 'ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', '', 0); print '
'.$langs->trans("ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS").''; - $form->select_produits($conf->global->ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS, 'ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', '', 0); + $selected = (empty($conf->global->ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS) ? '' : $conf->global->ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS); + $form->select_produits($selected, 'ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', '', 0); print '
trans("Totalizable"); ?>>
textwithpicto($langs->trans("HelpOnTooltip"), $langs->trans("HelpOnTooltipDesc")); ?>
textwithpicto($langs->trans("HelpOnTooltip"), $langs->trans("HelpOnTooltipDesc")); ?>
trans("AllEntities"); ?>>
textwithpicto($langs->trans("HelpOnTooltip"), $langs->trans("HelpOnTooltipDesc")); ?>
trans("AllEntities"); ?>>
'.$langs->trans("AlwaysEditable").''.$form->textwithpicto($langs->trans("Visible"), $langs->trans("VisibleDesc")).''.$form->textwithpicto($langs->trans("DisplayOnPdf"), $langs->trans("DisplayOnPdfDesc")).''.$form->textwithpicto($langs->trans("Totalizable"), $langs->trans("TotalizableDesc")).''.$langs->trans("Entities").' '; $userstatic->id = $val['fk_user_c']; $userstatic->lastname = $val['login_c']; + $userstatic->lastname = $val['statut_c']; $htmltooltip = ''.$langs->trans("ECMSection").': '.$val['label'].'
'; $htmltooltip = ''.$langs->trans("Type").': '.$langs->trans("ECMSectionManual").'
'; $htmltooltip .= ''.$langs->trans("ECMCreationUser").': '.$userstatic->getNomUrl(1, '', false, 1).'
'; @@ -454,6 +455,7 @@ function treeOutputForAbsoluteDir($sqltree, $selecteddir, $fullpathselecteddir, print '
'; $userstatic->id = isset($val['fk_user_c']) ? $val['fk_user_c'] : 0; $userstatic->lastname = isset($val['login_c']) ? $val['login_c'] : 0; + $userstatic->statut = isset($val['statut_c']) ? $val['statut_c'] : 0; $htmltooltip = ''.$langs->trans("ECMSection").': '.$val['label'].'
'; $htmltooltip = ''.$langs->trans("Type").': '.$langs->trans("ECMSectionManual").'
'; $htmltooltip .= ''.$langs->trans("ECMCreationUser").': '.$userstatic->getNomUrl(1, '', false, 1).'
'; diff --git a/htdocs/ecm/class/ecmdirectory.class.php b/htdocs/ecm/class/ecmdirectory.class.php index 5222fc0d21a..52897e84b1a 100644 --- a/htdocs/ecm/class/ecmdirectory.class.php +++ b/htdocs/ecm/class/ecmdirectory.class.php @@ -646,6 +646,7 @@ class EcmDirectory extends CommonObject $sql .= " c.fk_user_c,"; $sql .= " c.date_c,"; $sql .= " u.login as login_c,"; + $sql .= " u.statut as statut_c,"; $sql .= " ca.rowid as rowid_fille"; $sql .= " FROM ".MAIN_DB_PREFIX."user as u, ".MAIN_DB_PREFIX."ecm_directories as c"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."ecm_directories as ca"; @@ -667,7 +668,8 @@ class EcmDirectory extends CommonObject $this->cats[$obj->rowid]['description'] = $obj->description; $this->cats[$obj->rowid]['cachenbofdoc'] = $obj->cachenbofdoc; $this->cats[$obj->rowid]['date_c'] = $this->db->jdate($obj->date_c); - $this->cats[$obj->rowid]['fk_user_c'] = $obj->fk_user_c; + $this->cats[$obj->rowid]['fk_user_c'] = (int) $obj->fk_user_c; + $this->cats[$obj->rowid]['statut_c'] = (int) $obj->statut_c; $this->cats[$obj->rowid]['login_c'] = $obj->login_c; if (!empty($obj->rowid_fille)) { From 3380f740e541da9dbaa618401753d4569bce924c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 18:56:28 +0100 Subject: [PATCH 156/180] need to clean glasses --- htdocs/core/ajax/ajaxdirtree.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/ajax/ajaxdirtree.php b/htdocs/core/ajax/ajaxdirtree.php index dab5206fc7d..1977cfac6e4 100644 --- a/htdocs/core/ajax/ajaxdirtree.php +++ b/htdocs/core/ajax/ajaxdirtree.php @@ -288,7 +288,7 @@ if (empty($conf->use_javascript_ajax) || !empty($conf->global->MAIN_ECM_DISABLE_ print '
'; $userstatic->id = $val['fk_user_c']; $userstatic->lastname = $val['login_c']; - $userstatic->lastname = $val['statut_c']; + $userstatic->statut = $val['statut_c']; $htmltooltip = ''.$langs->trans("ECMSection").': '.$val['label'].'
'; $htmltooltip = ''.$langs->trans("Type").': '.$langs->trans("ECMSectionManual").'
'; $htmltooltip .= ''.$langs->trans("ECMCreationUser").': '.$userstatic->getNomUrl(1, '', false, 1).'
'; From 461d748f97517945ec3638d06695c97d7d4d6775 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Mar 2021 20:27:36 +0100 Subject: [PATCH 157/180] Fix #yogosha235 --- htdocs/compta/facture/card-rec.php | 3 ++- htdocs/compta/facture/card.php | 14 +++++----- htdocs/compta/facture/class/facture.class.php | 2 +- htdocs/compta/facture/contact.php | 16 +++++------- htdocs/compta/facture/document.php | 14 +++++----- htdocs/compta/facture/info.php | 26 ++++++++++++++++--- .../compta/facture/invoicetemplate_list.php | 5 ++++ htdocs/compta/facture/note.php | 13 ++++++---- 8 files changed, 59 insertions(+), 34 deletions(-) diff --git a/htdocs/compta/facture/card-rec.php b/htdocs/compta/facture/card-rec.php index c1c0f83cecb..167e9e4a577 100644 --- a/htdocs/compta/facture/card-rec.php +++ b/htdocs/compta/facture/card-rec.php @@ -65,7 +65,6 @@ $objecttype = 'facture_rec'; if ($action == "create" || $action == "add") { $objecttype = ''; } -$result = restrictedArea($user, 'facture', $id, $objecttype); $projectid = GETPOST('projectid', 'int'); $year_date_when = GETPOST('year_date_when'); @@ -127,6 +126,8 @@ $now = dol_now(); $error = 0; +$result = restrictedArea($user, 'facture', $object->id, $objecttype); + /* * Actions diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 0433d9eb746..cd1905f528f 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -138,19 +138,19 @@ $permissiondellink = $usercancreate; // Used by the include of actions_dellink.i $permissiontoedit = $usercancreate; // Used by the include of actions_lineupdonw.inc.php $permissiontoadd = $usercancreate; // Used by the include of actions_addupdatedelete.inc.php +// retained warranty invoice available type +$retainedWarrantyInvoiceAvailableType = array(); +if (!empty($conf->global->INVOICE_USE_RETAINED_WARRANTY)) { + $retainedWarrantyInvoiceAvailableType = explode('+', $conf->global->INVOICE_USE_RETAINED_WARRANTY); +} + // Security check $fieldid = (!empty($ref) ? 'ref' : 'rowid'); if ($user->socid) { $socid = $user->socid; } $isdraft = (($object->statut == Facture::STATUS_DRAFT) ? 1 : 0); -$result = restrictedArea($user, 'facture', $id, '', '', 'fk_soc', $fieldid, $isdraft); - -// retained warranty invoice available type -$retainedWarrantyInvoiceAvailableType = array(); -if (!empty($conf->global->INVOICE_USE_RETAINED_WARRANTY)) { - $retainedWarrantyInvoiceAvailableType = explode('+', $conf->global->INVOICE_USE_RETAINED_WARRANTY); -} +$result = restrictedArea($user, 'facture', $object->id, '', '', 'fk_soc', $fieldid, $isdraft); /* diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 69356287288..a51ad8f65fa 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -1553,7 +1553,7 @@ class Facture extends CommonInvoice * @param string $ref Reference of invoice * @param string $ref_ext External reference of invoice * @param int $notused Not used - * @param bool $fetch_situation Fetch the previous and next situation in $tab_previous_situation_invoice and $tab_next_situation_invoice + * @param bool $fetch_situation Load also the previous and next situation invoice into $tab_previous_situation_invoice and $tab_next_situation_invoice * @return int >0 if OK, <0 if KO, 0 if not found */ public function fetch($rowid, $ref = '', $ref_ext = '', $notused = '', $fetch_situation = false) diff --git a/htdocs/compta/facture/contact.php b/htdocs/compta/facture/contact.php index dc1fe1e7c45..19e76b15c5c 100644 --- a/htdocs/compta/facture/contact.php +++ b/htdocs/compta/facture/contact.php @@ -48,9 +48,14 @@ $action = GETPOST('action', 'aZ09'); if ($user->socid) { $socid = $user->socid; } -$result = restrictedArea($user, 'facture', $id); $object = new Facture($db); +// Load object +if ($id > 0 || !empty($ref)) { + $ret = $object->fetch($id, $ref, '', '', $conf->global->INVOICE_USE_SITUATION); +} + +$result = restrictedArea($user, 'facture', $object->id); /* @@ -58,8 +63,6 @@ $object = new Facture($db); */ if ($action == 'addcontact' && $user->rights->facture->creer) { - $result = $object->fetch($id); - if ($result > 0 && $id > 0) { $contactid = (GETPOST('userid') ? GETPOST('userid', 'int') : GETPOST('contactid', 'int')); $typeid = (GETPOST('typecontact') ? GETPOST('typecontact') : GETPOST('type')); @@ -79,14 +82,9 @@ if ($action == 'addcontact' && $user->rights->facture->creer) { } } elseif ($action == 'swapstatut' && $user->rights->facture->creer) { // Toggle the status of a contact - if ($object->fetch($id)) { - $result = $object->swapContactStatus(GETPOST('ligne')); - } else { - dol_print_error($db); - } + $result = $object->swapContactStatus(GETPOST('ligne')); } elseif ($action == 'deletecontact' && $user->rights->facture->creer) { // Deletes a contact - $object->fetch($id); $result = $object->delete_contact($lineid); if ($result >= 0) { diff --git a/htdocs/compta/facture/document.php b/htdocs/compta/facture/document.php index c44aeae67ca..4c0544e3810 100644 --- a/htdocs/compta/facture/document.php +++ b/htdocs/compta/facture/document.php @@ -48,12 +48,6 @@ $socid = GETPOST('socid', 'int'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); -// Security check -if ($user->socid) { - $socid = $user->socid; -} -$result = restrictedArea($user, 'facture', $id, ''); - // Get parameters $limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; $sortfield = GETPOST("sortfield", 'alpha'); @@ -73,11 +67,17 @@ if (!$sortfield) { } $object = new Facture($db); -if ($object->fetch($id)) { +if ($object->fetch($id, $ref)) { $object->fetch_thirdparty(); $upload_dir = $conf->facture->dir_output."/".dol_sanitizeFileName($object->ref); } +// Security check +if ($user->socid) { + $socid = $user->socid; +} +$result = restrictedArea($user, 'facture', $object->id, ''); + /* * Actions diff --git a/htdocs/compta/facture/info.php b/htdocs/compta/facture/info.php index 97646d56103..5b9b7fc4316 100644 --- a/htdocs/compta/facture/info.php +++ b/htdocs/compta/facture/info.php @@ -38,6 +38,25 @@ $langs->loadLangs(array('companies', 'bills')); $id = GETPOST("facid", "int"); $ref = GETPOST("ref", 'alpha'); +$object = new Facture($db); +$extrafields = new ExtraFields($db); + +// Fetch optionals attributes and labels +$extrafields->fetch_name_optionals_label($object->table_element); + +// Load object +if ($id > 0 || !empty($ref)) { + $ret = $object->fetch($id, $ref, '', '', $conf->global->INVOICE_USE_SITUATION); +} + +// Security check +$fieldid = (!empty($ref) ? 'ref' : 'rowid'); +if ($user->socid) { + $socid = $user->socid; +} +$isdraft = (($object->statut == Facture::STATUS_DRAFT) ? 1 : 0); +$result = restrictedArea($user, 'facture', $object->id, '', '', 'fk_soc', $fieldid, $isdraft); + /* * View @@ -46,11 +65,10 @@ $ref = GETPOST("ref", 'alpha'); $form = new Form($db); $title = $langs->trans('InvoiceCustomer')." - ".$langs->trans('Info'); -$helpurl = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; -llxHeader('', $title, $helpurl); +$help_url = "EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes"; + +llxHeader('', $title, $help_url); -$object = new Facture($db); -$object->fetch($id, $ref); $object->fetch_thirdparty(); $object->info($object->id); diff --git a/htdocs/compta/facture/invoicetemplate_list.php b/htdocs/compta/facture/invoicetemplate_list.php index e419ed9260b..5d511aa6cd6 100644 --- a/htdocs/compta/facture/invoicetemplate_list.php +++ b/htdocs/compta/facture/invoicetemplate_list.php @@ -165,6 +165,11 @@ if ($socid > 0) { } } +$objecttype = 'facture_rec'; + +$result = restrictedArea($user, 'facture', $object->id, $objecttype); + + /* * Actions */ diff --git a/htdocs/compta/facture/note.php b/htdocs/compta/facture/note.php index 23d4afb0417..f019d822529 100644 --- a/htdocs/compta/facture/note.php +++ b/htdocs/compta/facture/note.php @@ -41,6 +41,14 @@ $ref = GETPOST('ref', 'alpha'); $socid = GETPOST('socid', 'int'); $action = GETPOST('action', 'aZ09'); +$object = new Facture($db); +// Load object +if ($id > 0 || !empty($ref)) { + $object->fetch($id, $ref, '', '', $conf->global->INVOICE_USE_SITUATION); +} + +$permissionnote = $user->rights->facture->creer; // Used by the include of actions_setnotes.inc.php + // Security check $socid = 0; if ($user->socid) { @@ -48,11 +56,6 @@ if ($user->socid) { } $result = restrictedArea($user, 'facture', $id, ''); -$object = new Facture($db); -$object->fetch($id); - -$permissionnote = $user->rights->facture->creer; // Used by the include of actions_setnotes.inc.php - /* * Actions From 3aed47c1db9788a81d3bd7408de4839d11c86680 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Thu, 18 Mar 2021 20:32:11 +0100 Subject: [PATCH 158/180] Update productlot_list.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit $help_url = 'EN:Module_Lot_/_Serial|FR:Module_Lot_/_Série'; --- htdocs/product/stock/productlot_list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/product/stock/productlot_list.php b/htdocs/product/stock/productlot_list.php index 45dae12ce10..e04b3f2e59b 100644 --- a/htdocs/product/stock/productlot_list.php +++ b/htdocs/product/stock/productlot_list.php @@ -186,8 +186,8 @@ $form = new Form($db); $now = dol_now(); -//$help_url="EN:Module_MyObject|FR:Module_MyObject_FR|ES:Módulo_MyObject"; -$help_url = ''; +$help_url = 'EN:Module_Lot_/_Serial|FR:Module_Lot_/_Série'; + $title = $langs->trans('LotSerialList'); From 82f16086be640e5570cec54c29f614cd8db65988 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Thu, 18 Mar 2021 20:34:38 +0100 Subject: [PATCH 159/180] Update card.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit $help_url = 'EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks|DE:Modul_Bestände'; --- htdocs/product/inventory/card.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/product/inventory/card.php b/htdocs/product/inventory/card.php index e0a03cb322d..92ad4c2176b 100644 --- a/htdocs/product/inventory/card.php +++ b/htdocs/product/inventory/card.php @@ -163,7 +163,9 @@ $formfile = new FormFile($db); $formproject = new FormProjets($db); $title = $langs->trans("Inventory"); -$help_url = ''; + +$help_url = 'EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks|DE:Modul_Bestände'; + llxHeader('', $title, $help_url); // Example : Adding jquery code From daa8c1e00f0acf991b5c44b3fcfe81781ffee995 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Thu, 18 Mar 2021 20:38:08 +0100 Subject: [PATCH 160/180] Update massstockmove.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit $help_url = 'EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks|DE:Modul_Bestände'; llxHeader('', $title, $help_url); --- htdocs/product/stock/massstockmove.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/product/stock/massstockmove.php b/htdocs/product/stock/massstockmove.php index a9a69dd4522..830e8aa56e9 100644 --- a/htdocs/product/stock/massstockmove.php +++ b/htdocs/product/stock/massstockmove.php @@ -302,9 +302,11 @@ $productstatic = new Product($db); $warehousestatics = new Entrepot($db); $warehousestatict = new Entrepot($db); +$help_url = 'EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks|DE:Modul_Bestände'; + $title = $langs->trans('MassMovement'); -llxHeader('', $title); +llxHeader('', $title, $help_url); print load_fiche_titre($langs->trans("MassStockTransferShort"), '', 'stock'); From e318a84940f04246d78d3fe8c95c0882a9ec3aba Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Mar 2021 20:38:19 +0100 Subject: [PATCH 161/180] Fix #yogosha5664 --- htdocs/bom/bom_card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 5547c21faab..6d2047d3f49 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -75,8 +75,8 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be includ // Security check - Protection if external user //if ($user->socid > 0) accessforbidden(); //if ($user->socid > 0) $socid = $user->socid; -//$isdraft = (($object->statut == $object::STATUS_DRAFT) ? 1 : 0); -//$result = restrictedArea($user, 'bom', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); +$isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0); +$result = restrictedArea($user, 'bom', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); $permissionnote = $user->rights->bom->write; // Used by the include of actions_setnotes.inc.php $permissiondellink = $user->rights->bom->write; // Used by the include of actions_dellink.inc.php From d881c73e58e5bb94862225c15a8320546156a7b6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Mar 2021 20:44:53 +0100 Subject: [PATCH 162/180] Fix #yogosha5664 --- htdocs/bom/bom_agenda.php | 10 +++++----- htdocs/bom/bom_document.php | 6 ++++++ htdocs/bom/bom_note.php | 8 ++++++-- htdocs/mrp/mo_note.php | 3 +-- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/htdocs/bom/bom_agenda.php b/htdocs/bom/bom_agenda.php index 2cf66d9c3f5..6a86f1c2258 100644 --- a/htdocs/bom/bom_agenda.php +++ b/htdocs/bom/bom_agenda.php @@ -51,11 +51,6 @@ if (GETPOST('actioncode', 'array')) { } $search_agenda_label = GETPOST('search_agenda_label'); -// Security check - Protection if external user -//if ($user->socid > 0) accessforbidden(); -//if ($user->socid > 0) $socid = $user->socid; -//$result = restrictedArea($user, 'bom', $id); - $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit; $sortfield = GETPOST("sortfield", 'alpha'); $sortorder = GETPOST("sortorder", 'alpha'); @@ -87,6 +82,11 @@ if ($id > 0 || !empty($ref)) { $upload_dir = $conf->bom->multidir_output[$object->entity]."/".$object->id; } +// Security check - Protection if external user +//if ($user->socid > 0) accessforbidden(); +//if ($user->socid > 0) $socid = $user->socid; +$isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0); +restrictedArea($user, 'bom', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); /* diff --git a/htdocs/bom/bom_document.php b/htdocs/bom/bom_document.php index 92babe87003..520dd8bb9d7 100644 --- a/htdocs/bom/bom_document.php +++ b/htdocs/bom/bom_document.php @@ -79,6 +79,12 @@ if ($id > 0 || !empty($ref)) { $upload_dir = $conf->bom->multidir_output[$object->entity ? $object->entity : 1]."/bom/".get_exdir(0, 0, 0, 1, $object); } +// Security check - Protection if external user +//if ($user->socid > 0) accessforbidden(); +//if ($user->socid > 0) $socid = $user->socid; +$isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0); +restrictedArea($user, 'bom', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); + /* * Actions diff --git a/htdocs/bom/bom_note.php b/htdocs/bom/bom_note.php index cd288a3be3c..244bcfd7a49 100644 --- a/htdocs/bom/bom_note.php +++ b/htdocs/bom/bom_note.php @@ -57,9 +57,13 @@ if ($id > 0 || !empty($ref)) { $upload_dir = $conf->bom->multidir_output[$object->entity]."/".$object->id; } -$permissionnote = 1; -//$permissionnote=$user->rights->bom->creer; // Used by the include of actions_setnotes.inc.php +$permissionnote = $user->rights->bom->write; // Used by the include of actions_setnotes.inc.php +// Security check - Protection if external user +//if ($user->socid > 0) accessforbidden(); +//if ($user->socid > 0) $socid = $user->socid; +$isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0); +restrictedArea($user, 'bom', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); /* diff --git a/htdocs/mrp/mo_note.php b/htdocs/mrp/mo_note.php index 56699e4903f..6bbfc503453 100644 --- a/htdocs/mrp/mo_note.php +++ b/htdocs/mrp/mo_note.php @@ -60,8 +60,7 @@ if ($id > 0 || !empty($ref)) { $isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0); $result = restrictedArea($user, 'mrp', $object->id, 'mrp_mo', '', 'fk_soc', 'rowid', $isdraft); -$permissionnote = 1; -//$permissionnote=$user->rights->mrp->creer; // Used by the include of actions_setnotes.inc.php +$permissionnote = $user->rights->mrp->write; // Used by the include of actions_setnotes.inc.php From c43d3dff92ea10ccd22c79a99467f467a5c4cbbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 20:51:40 +0100 Subject: [PATCH 163/180] fix project replace projet --- htdocs/core/class/conf.class.php | 2 +- htdocs/core/photos_resize.php | 2 +- htdocs/projet/stats/index.php | 8 ++++---- htdocs/projet/tasks/stats/index.php | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 6b50c73da8e..decab886f49 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -842,7 +842,7 @@ class Conf if (isset($this->categorie)) { $this->category = $this->categorie; } - if (isset($this->project)) { + if (isset($this->projet) && !isset($this->project)) { $this->project = $this->projet; } diff --git a/htdocs/core/photos_resize.php b/htdocs/core/photos_resize.php index f03436c0043..008e524f299 100644 --- a/htdocs/core/photos_resize.php +++ b/htdocs/core/photos_resize.php @@ -142,7 +142,7 @@ if ($modulepart == 'produit' || $modulepart == 'product' || $modulepart == 'serv if ($result <= 0) { dol_print_error($db, 'Failed to load object'); } - $dir = $conf->projet->multidir_output[$object->entity]; // By default + $dir = $conf->project->multidir_output[$object->entity]; // By default } } elseif ($modulepart == 'propal') { require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; diff --git a/htdocs/projet/stats/index.php b/htdocs/projet/stats/index.php index afbc4f7c55b..f17e326276a 100644 --- a/htdocs/projet/stats/index.php +++ b/htdocs/projet/stats/index.php @@ -99,7 +99,7 @@ if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) $data1 = array(array(0=>$langs->trans("None"), 1=>1)); } - $filenamenb = $conf->projet->dir_output."/stats/projectbystatus.png"; + $filenamenb = $conf->project->dir_output."/stats/projectbystatus.png"; $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=projectstats&file=projectbystatus.png'; $px = new DolGraph(); $mesg = $px->isGraphKo(); @@ -150,7 +150,7 @@ if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) $data = $stats_project->getNbByMonthWithPrevYear($endyear, $startyear); //var_dump($data); -$filenamenb = $conf->projet->dir_output."/stats/projectnbprevyear-".$year.".png"; +$filenamenb = $conf->project->dir_output."/stats/projectnbprevyear-".$year.".png"; $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=projectstats&file=projectnbprevyear-'.$year.'.png'; $px1 = new DolGraph(); @@ -182,7 +182,7 @@ if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) { //var_dump($data); // $data = array(array('Lib',val1,val2,val3),...) - $filenamenb = $conf->projet->dir_output."/stats/projectamountprevyear-".$year.".png"; + $filenamenb = $conf->project->dir_output."/stats/projectamountprevyear-".$year.".png"; $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=projectstats&file=projectamountprevyear-'.$year.'.png'; $px2 = new DolGraph(); @@ -217,7 +217,7 @@ if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) { //var_dump($data); // $data = array(array('Lib',val1,val2,val3),...) - $filenamenb = $conf->projet->dir_output."/stats/projecttransrateprevyear-".$year.".png"; + $filenamenb = $conf->project->dir_output."/stats/projecttransrateprevyear-".$year.".png"; $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=projectstats&file=projecttransrateprevyear-'.$year.'.png'; $px3 = new DolGraph(); diff --git a/htdocs/projet/tasks/stats/index.php b/htdocs/projet/tasks/stats/index.php index d2c53943506..5d1bec36f17 100644 --- a/htdocs/projet/tasks/stats/index.php +++ b/htdocs/projet/tasks/stats/index.php @@ -65,7 +65,7 @@ $includeuserlist = array(); llxHeader('', $langs->trans('Tasks')); $title = $langs->trans("TasksStatistics"); -$dir = $conf->projet->dir_output.'/temp'; +$dir = $conf->project->dir_output.'/temp'; print load_fiche_titre($title, '', 'projecttask'); @@ -90,7 +90,7 @@ if (!empty($year)) { $data = $stats_tasks->getNbByMonthWithPrevYear($endyear, $startyear); //var_dump($data); -$filenamenb = $conf->projet->dir_output."/stats/tasknbprevyear-".$year.".png"; +$filenamenb = $conf->project->dir_output."/stats/tasknbprevyear-".$year.".png"; $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=taskstats&file=tasknbprevyear-'.$year.'.png'; $px1 = new DolGraph(); From 3ca9bee5de71fcb4d92ce2b6946f4e804e5e7f97 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Thu, 18 Mar 2021 20:52:24 +0100 Subject: [PATCH 164/180] Update card.php $help_url = 'EN:Module_Products#Variants'; llxHeader('', $title, $help_url); --- htdocs/variants/card.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/variants/card.php b/htdocs/variants/card.php index ecaa4e77948..7a15a4ede97 100644 --- a/htdocs/variants/card.php +++ b/htdocs/variants/card.php @@ -122,9 +122,11 @@ if ($confirm == 'yes') { $langs->load('products'); +$help_url = 'EN:Module_Products#Variants'; + $title = $langs->trans('ProductAttributeName', dol_htmlentities($object->label)); -llxHeader('', $title); +llxHeader('', $title, $help_url); //print load_fiche_titre($title); From b7aed07284a2946886cd53df8f729d3082cd3bbc Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Thu, 18 Mar 2021 20:55:41 +0100 Subject: [PATCH 165/180] Update create.php $help_url = 'EN:Module_Products#Variants'; llxHeader('', $title, $help_url); --- htdocs/variants/create.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/variants/create.php b/htdocs/variants/create.php index ee178f2728d..8f3a1d28d9f 100644 --- a/htdocs/variants/create.php +++ b/htdocs/variants/create.php @@ -59,9 +59,12 @@ $langs->load('products'); * View */ +$help_url = 'EN:Module_Products#Variants'; + $title = $langs->trans('NewProductAttribute'); -llxHeader('', $title); +llxHeader('', $title, $help_url); + print load_fiche_titre($title); From e7ad9f129020ba1a18220295abc1f73799aba9d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 20:55:47 +0100 Subject: [PATCH 166/180] fix project replace projet --- htdocs/projet/stats/index.php | 4 ++-- htdocs/projet/tasks/stats/index.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/projet/stats/index.php b/htdocs/projet/stats/index.php index f17e326276a..6b1b0eac4c1 100644 --- a/htdocs/projet/stats/index.php +++ b/htdocs/projet/stats/index.php @@ -65,7 +65,7 @@ $includeuserlist = array(); llxHeader('', $langs->trans('Projects')); $title = $langs->trans("ProjectsStatistics"); -$dir = $conf->projet->dir_output.'/temp'; +$dir = $conf->project->dir_output.'/temp'; print load_fiche_titre($title, '', 'project'); @@ -269,7 +269,7 @@ $head[$h][1] = $langs->trans("ByMonthYear"); $head[$h][2] = 'byyear'; $h++; -complete_head_from_modules($conf, $langs, null, $head, $h, 'projet_stats'); +complete_head_from_modules($conf, $langs, null, $head, $h, 'project_stats'); print dol_get_fiche_head($head, 'byyear', $langs->trans("Statistics"), -1, ''); diff --git a/htdocs/projet/tasks/stats/index.php b/htdocs/projet/tasks/stats/index.php index 5d1bec36f17..531b9eb7b3a 100644 --- a/htdocs/projet/tasks/stats/index.php +++ b/htdocs/projet/tasks/stats/index.php @@ -139,7 +139,7 @@ $head[$h][1] = $langs->trans("ByMonthYear"); $head[$h][2] = 'byyear'; $h++; -complete_head_from_modules($conf, $langs, null, $head, $h, 'projet_tasks_stats'); +complete_head_from_modules($conf, $langs, null, $head, $h, 'project_tasks_stats'); print dol_get_fiche_head($head, 'byyear', $langs->trans("Statistics"), -1, ''); From 8844f4fda96c7e2514a878df480e24b0e844175c Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Thu, 18 Mar 2021 20:57:09 +0100 Subject: [PATCH 167/180] Update create_val.php $help_url = 'EN:Module_Products#Variants'; llxHeader('', $title, $help_url); --- htdocs/variants/create_val.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/variants/create_val.php b/htdocs/variants/create_val.php index ce03f314265..22dc2a1a110 100644 --- a/htdocs/variants/create_val.php +++ b/htdocs/variants/create_val.php @@ -75,9 +75,11 @@ if ($action == 'add') { $langs->load('products'); +$help_url = 'EN:Module_Products#Variants'; + $title = $langs->trans('ProductAttributeName', dol_htmlentities($object->label)); -llxHeader('', $title); +llxHeader('', $title, $help_url); $h = 0; $head[$h][0] = DOL_URL_ROOT.'/variants/card.php?id='.$object->id; From 9ba568eb25452d3e8802719638b4a84c375db6f2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Mar 2021 20:57:50 +0100 Subject: [PATCH 168/180] Fix security check --- htdocs/compta/bank/card.php | 12 ++++++------ htdocs/compta/bank/document.php | 1 + htdocs/compta/bank/info.php | 12 ++++++++++++ htdocs/compta/bank/treso.php | 23 +++++++++++++---------- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/htdocs/compta/bank/card.php b/htdocs/compta/bank/card.php index 1524c1d1727..ccc834835a4 100644 --- a/htdocs/compta/bank/card.php +++ b/htdocs/compta/bank/card.php @@ -54,12 +54,6 @@ $langs->loadLangs(array("banks", "bills", "categories", "companies", "compta")); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); -// Security check -$id = GETPOST("id", 'int') ? GETPOST("id", 'int') : GETPOST('ref', 'alpha'); -$fieldid = GETPOSTISSET("ref") ? 'ref' : 'rowid'; - -$result = restrictedArea($user, 'banque', $id, 'bank_account&bank_account', '', '', $fieldid); - $object = new Account($db); $extrafields = new ExtraFields($db); @@ -69,6 +63,12 @@ $extrafields->fetch_name_optionals_label($object->table_element); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('bankcard', 'globalcard')); +// Security check +$id = GETPOST("id", 'int') ? GETPOST("id", 'int') : GETPOST('ref', 'alpha'); +$fieldid = GETPOSTISSET("ref") ? 'ref' : 'rowid'; +$result = restrictedArea($user, 'banque', $id, 'bank_account&bank_account', '', '', $fieldid); + + /* * Actions */ diff --git a/htdocs/compta/bank/document.php b/htdocs/compta/bank/document.php index 0add6bf77fd..35102281ae9 100644 --- a/htdocs/compta/bank/document.php +++ b/htdocs/compta/bank/document.php @@ -71,6 +71,7 @@ if ($id > 0 || !empty($ref)) { $object->fetch($id, $ref); } + $result = restrictedArea($user, 'banque', $object->id, 'bank_account', '', ''); diff --git a/htdocs/compta/bank/info.php b/htdocs/compta/bank/info.php index a2a3260775a..c61f6e50bff 100644 --- a/htdocs/compta/bank/info.php +++ b/htdocs/compta/bank/info.php @@ -30,6 +30,18 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; $langs->loadLangs(array('banks', 'categories', 'companies')); $id = GETPOST("rowid", 'int'); +$ref = GETPOST('ref', 'alpha'); + +// Security check +$fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : '')); +$fieldtype = (!empty($ref) ? 'ref' : 'rowid'); +if ($user->socid) { + $socid = $user->socid; +} +$result = restrictedArea($user, 'banque', $fieldvalue, 'bank_account', '', '', $fieldtype); +if (!$user->rights->banque->lire && !$user->rights->banque->consolidate) { + accessforbidden(); +} /* diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index b1dac2858b0..6ccd953a68b 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -37,22 +37,23 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; $langs->loadLangs(array('banks', 'categories', 'bills', 'companies')); // Security check -if (isset($_GET["account"]) || isset($_GET["ref"])) { - $id = isset($_GET["account"]) ? $_GET["account"] : (isset($_GET["ref"]) ? $_GET["ref"] : ''); +if (GETPOSTISSET("account") || GETPOSTISSET("ref")) { + $id = GETPOSTISSET("account") ? GETPOST("account") : (GETPOSTISSET("ref") ? GETPOST("ref") : ''); } -$fieldid = isset($_GET["ref"]) ? 'ref' : 'rowid'; +$fieldid = GETPOSTISSET("ref") ? 'ref' : 'rowid'; if ($user->socid) { $socid = $user->socid; } $result = restrictedArea($user, 'banque', $id, 'bank_account&bank_account', '', '', $fieldid); -$vline = isset($_GET["vline"]) ? $_GET["vline"] : $_POST["vline"]; -$page = isset($_GET["page"]) ? $_GET["page"] : 0; +$vline = GETPOST('vline'); +$page = GETPOSTISSET("page") ? GETPOST("page") : 0; // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('banktreso', 'globalcard')); + /* * View */ @@ -68,7 +69,7 @@ $socialcontribstatic = new ChargeSociales($db); $form = new Form($db); -if ($_REQUEST["account"] || $_REQUEST["ref"]) { +if (GETPOST("account") || GETPOST("ref")) { if ($vline) { $viewline = $vline; } else { @@ -76,11 +77,11 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) { } $object = new Account($db); - if ($_GET["account"]) { - $result = $object->fetch($_GET["account"]); + if (GETPOST("account", 'int')) { + $result = $object->fetch(GETPOST("account", 'int')); } - if ($_GET["ref"]) { - $result = $object->fetch(0, $_GET["ref"]); + if (GETPOST("ref")) { + $result = $object->fetch(0, GETPOST("ref")); $_GET["account"] = $object->id; } @@ -91,6 +92,8 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) { $linkback = ''.$langs->trans("BackToList").''; + $morehtmlref = ''; + dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref, '', 0, '', '', 1); print dol_get_fiche_end(); From 88ec31c0423c7ced7009450787fe190cf98b2204 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Thu, 18 Mar 2021 21:09:18 +0100 Subject: [PATCH 169/180] Update workstation_card.php $help_url = 'EN:Module_Workstation'; --- htdocs/workstation/workstation_card.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/workstation/workstation_card.php b/htdocs/workstation/workstation_card.php index 2378741c140..c15053bad5e 100755 --- a/htdocs/workstation/workstation_card.php +++ b/htdocs/workstation/workstation_card.php @@ -160,7 +160,9 @@ $formfile = new FormFile($db); $formresource = new FormResource($db); $title = $langs->trans("Workstation"); -$help_url = ''; + +$help_url = 'EN:Module_Workstation'; + llxHeader('', $title, $help_url); // Example : Adding jquery code From b584adf2995bc5fdb59009e1e8671c37e3317019 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 21:10:55 +0100 Subject: [PATCH 170/180] fix project replace projet --- htdocs/core/class/conf.class.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index decab886f49..0eab527bc6b 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -826,22 +826,28 @@ class Conf unset($this->global->MAIN_NO_CONCAT_DESCRIPTION); } - // For backward compatibility + // product is new use if (isset($this->product)) { + // For backward compatibility $this->produit = $this->product; } + // invoice is new use, facture is old use still initialised if (isset($this->facture)) { $this->invoice = $this->facture; } + // order is new use, commande is old use still initialised if (isset($this->commande)) { $this->order = $this->commande; } + // contract is new use, contrat is old use still initialised if (isset($this->contrat)) { $this->contract = $this->contrat; } + // category is new use, categorie is old use still initialised if (isset($this->categorie)) { $this->category = $this->categorie; } + // project is new use, projet is old use still initialised if (isset($this->projet) && !isset($this->project)) { $this->project = $this->projet; } From 972d162c5e811ba468a1bf159445e04a9fe4c5dd Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Thu, 18 Mar 2021 21:16:44 +0100 Subject: [PATCH 171/180] Update type.php $help_url = 'EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros|DE:Modul_Mitglieder'; --- htdocs/adherents/type.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index d2b46e96610..a867a884775 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -213,7 +213,8 @@ if ($action == 'confirm_delete' && $user->rights->adherent->configurer) { $form = new Form($db); $formproduct = new FormProduct($db); -$help_url = 'EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros'; +$help_url = 'EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros|DE:Modul_Mitglieder'; + llxHeader('', $langs->trans("MembersTypeSetup"), $help_url); // List of members type From 4e3e2a23bccf219ee9ebefab66d655d597846bb4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Mar 2021 21:22:50 +0100 Subject: [PATCH 172/180] More complete fix for #yogosha5644 --- htdocs/main.inc.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 199601f1385..f6376a650b7 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -428,17 +428,16 @@ if (!defined('NOTOKENRENEWAL')) { } //dol_syslog("aaaa - ".defined('NOCSRFCHECK')." - ".$dolibarr_nocsrfcheck." - ".$conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN." - ".$_SERVER['REQUEST_METHOD']." - ".GETPOST('token', 'alpha').' '.$_SESSION['token']); -//$dolibarr_nocsrfcheck=1; -// Check token -if ((!defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && !empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN)) - || defined('CSRFCHECK_WITH_TOKEN')) { // Check validity of token, only if option MAIN_SECURITY_CSRF_WITH_TOKEN enabled or if constant CSRFCHECK_WITH_TOKEN is set into page + +// Check validity of token, only if option MAIN_SECURITY_CSRF_WITH_TOKEN enabled or if constant CSRFCHECK_WITH_TOKEN is set into page +if ((!defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && !empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN)) || defined('CSRFCHECK_WITH_TOKEN')) { // Check all cases that need a token (all POST actions + all login, actions and mass actions on pages with CSRFCHECK_WITH_TOKEN set + all sensitive GET actions) if ( $_SERVER['REQUEST_METHOD'] == 'POST' || ((GETPOSTISSET('actionlogin') || GETPOSTISSET('action') || GETPOSTISSET('massaction')) && defined('CSRFCHECK_WITH_TOKEN')) || in_array(GETPOST('action', 'aZ09'), array('add', 'addtimespent', 'update', 'install', 'delete', 'deletefilter', 'deleteoperation', 'deleteprof', 'deletepayment', 'confirm_create_user', 'confirm_create_thirdparty', 'confirm_reject_check')) ) { - if (!GETPOSTISSET('token')) { + if (!GETPOST('token', 'alpha')) { // If token is not provided or empty if (GETPOST('uploadform', 'int')) { dol_syslog("--- Access to ".$_SERVER["PHP_SELF"]." refused. File size too large."); $langs->loadLangs(array("errors", "install")); From 569d33392d5b238dc845c38e9ece6363bc49f290 Mon Sep 17 00:00:00 2001 From: UT from dolibit <45215329+dolibit-ut@users.noreply.github.com> Date: Thu, 18 Mar 2021 21:49:29 +0100 Subject: [PATCH 173/180] Update card.php change $helpurl -> $help_url $help_url = 'EN:Category:Accounting'; --- htdocs/accountancy/admin/card.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/accountancy/admin/card.php b/htdocs/accountancy/admin/card.php index 253c320bde0..caf98c7d91c 100644 --- a/htdocs/accountancy/admin/card.php +++ b/htdocs/accountancy/admin/card.php @@ -212,8 +212,10 @@ $accountsystem = new AccountancySystem($db); $accountsystem->fetch($conf->global->CHARTOFACCOUNTS); $title = $langs->trans('AccountAccounting')." - ".$langs->trans('Card'); -$helpurl = ''; -llxheader('', $title, $helpurl); + +$help_url = 'EN:Category:Accounting'; + +llxheader('', $title, $help_url); // Create mode From 37fcaf2a57d13e002cddcb3e61fc1204c6f13e64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 22:07:35 +0100 Subject: [PATCH 174/180] fix php8 warning --- htdocs/core/tpl/extrafields_view.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/extrafields_view.tpl.php b/htdocs/core/tpl/extrafields_view.tpl.php index e43548afc3f..3940f0c38e5 100644 --- a/htdocs/core/tpl/extrafields_view.tpl.php +++ b/htdocs/core/tpl/extrafields_view.tpl.php @@ -159,7 +159,7 @@ if (empty($reshook) && is_array($extrafields->attributes[$object->table_element] $keyforperm = 'ficheinter'; } if (isset($user->rights->$keyforperm)) { - $permok = $user->rights->$keyforperm->creer || $user->rights->$keyforperm->create || $user->rights->$keyforperm->write; + $permok = !empty($user->rights->$keyforperm->creer) || !empty($user->rights->$keyforperm->create) || !empty($user->rights->$keyforperm->write); } if ($object->element == 'order_supplier') { $permok = $user->rights->fournisseur->commande->creer; From d2ce3b2d6005aec9e388bb3047879e9ce0d1a43e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 18 Mar 2021 22:19:58 +0100 Subject: [PATCH 175/180] fix php8 warning --- htdocs/opensurvey/list.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/opensurvey/list.php b/htdocs/opensurvey/list.php index 3f0b6011455..56036b51aec 100644 --- a/htdocs/opensurvey/list.php +++ b/htdocs/opensurvey/list.php @@ -376,6 +376,7 @@ print '